package hudson.model.queue; import hudson.model.Queue; import hudson.model.Queue.Item; import hudson.model.Queue.WaitingItem; import javax.annotation.CheckForNull; /** * Result of {@link Queue#schedule2} * * @author Kohsuke Kawaguchi * @since 1.521 * @see Queue#schedule(Task, int, Action...) */ public abstract class ScheduleResult { /** * If true, the {@link #getItem()} is newly created * as a result of {@link Queue#schedule2}. */ public boolean isCreated() { return false; } /** * The scheduling of the task was refused and the queue didn't change. * If this method returns true, {@link #getItem()} will return null. */ public boolean isRefused() { return false; } /** * Unless {@link #isRefused()} is true, this method either returns * the newly created item in the queue or the existing item that's already * in the queue that matched the submitted task. */ public @CheckForNull Item getItem() { return null; } /** * If {@link #isCreated()} returns true, then this method returns * the newly created item, which is always of the type {@link WaitingItem}. */ public @CheckForNull WaitingItem getCreateItem() { return null; } /** * Opposite of {@link #isRefused()} */ public final boolean isAccepted() { return !isRefused(); } public static final class Created extends ScheduleResult { private final WaitingItem item; private Created(WaitingItem item) { this.item = item; } @Override public boolean isCreated() { return true; } @Override public WaitingItem getCreateItem() { return item; } @Override public Item getItem() { return item; } } public static final class Existing extends ScheduleResult { private final Item item; private Existing(Item item) { this.item = item; } @Override public Item getItem() { return item; } } public static final class Refused extends ScheduleResult { @Override public boolean isRefused() { return true; } } public static Created created(WaitingItem i) { return new Created(i); } public static Existing existing(Item i) { return new Existing(i); } public static Refused refused() { return new Refused(); } }