/*******************************************************************************
*
* Copyright (c) 2004-2010 Oracle Corporation.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
*
*******************************************************************************/
package hudson.model.queue;
import hudson.ExtensionList;
import hudson.ExtensionPoint;
import hudson.init.Initializer;
import hudson.model.Hudson;
import hudson.model.Queue;
import hudson.model.Queue.BuildableItem;
import java.util.List;
import java.util.logging.Logger;
import static hudson.init.InitMilestone.JOB_LOADED;
/**
* Singleton extension point for sorting buildable items
*
* @since 1.343
*/
public abstract class QueueSorter implements ExtensionPoint {
/**
* Sorts the buildable items list. The items at the beginning will be
* executed before the items at the end of the list.
*
* @param buildables List of buildable items in the queue. Never null.
*/
public abstract void sortBuildableItems(List<BuildableItem> buildables);
/**
* All registered {@link QueueSorter}s. Only the first one will be picked
* up, unless explicitly overridden by {@link Queue#setSorter(QueueSorter)}.
*/
public static ExtensionList<QueueSorter> all() {
return Hudson.getInstance().getExtensionList(QueueSorter.class);
}
/**
* Installs the default queue sorter.
*
* {@link Queue#Queue(hudson.model.LoadBalancer)} is too early to do this
*/
@Initializer(after = JOB_LOADED)
public static void installDefaultQueueSorter() {
ExtensionList<QueueSorter> all = all();
if (all.isEmpty()) {
return;
}
Queue q = Hudson.getInstance().getQueue();
if (q.getSorter() != null) {
return; // someone has already installed something. leave that alone.
}
q.setSorter(all.get(0));
if (all.size() > 1) {
LOGGER.warning("Multiple QueueSorters are registered. Only the first one is used and the rest are ignored: " + all);
}
}
private static final Logger LOGGER = Logger.getLogger(QueueSorter.class.getName());
}