package hudson.init;
import org.jvnet.hudson.reactor.Executable;
import org.jvnet.hudson.reactor.Milestone;
import org.jvnet.hudson.reactor.TaskBuilder;
import org.jvnet.hudson.reactor.TaskGraphBuilder;
/**
* Various key milestone in the termination process of Jenkins.
*
* <p>
* Plugins can use these milestones to execute their tear down processing at the right moment
* (in addition to defining their own milestones by implementing {@link Milestone}.
*
* <p>
* These milestones are achieve in this order.
*
* @author Kohsuke Kawaguchi
*/
public enum TermMilestone implements Milestone {
/**
* The very first milestone that gets achieved without doing anything.
*
* This is used in {@link Initializer#after()} since annotations cannot have null as the default value.
*/
STARTED("Started termination"),
/**
* The very last milestone
*
* This is used in {@link Initializer#before()} since annotations cannot have null as the default value.
*/
COMPLETED("Completed termination");
private final String message;
TermMilestone(String message) {
this.message = message;
}
/**
* Creates a set of dummy tasks to enforce ordering among {@link TermMilestone}s.
*/
public static TaskBuilder ordering() {
TaskGraphBuilder b = new TaskGraphBuilder();
TermMilestone[] v = values();
for (int i=0; i<v.length-1; i++)
b.add(null, Executable.NOOP).requires(v[i]).attains(v[i+1]);
return b;
}
@Override
public String toString() {
return message;
}
}