package hudson.init;
import org.jvnet.hudson.annotation_indexer.Indexed;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static hudson.init.TermMilestone.*;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* Like {@link Initializer} but used during the shut down.
*
* @author Kohsuke Kawaguchi
*/
@Indexed
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface Terminator {
/**
* Indicates that the specified milestone is necessary before executing this terminator.
*
* <p>
* This has the identical purpose as {@link #requires()}, but it's separated to allow better type-safety
* when using {@link TermMilestone} as a requirement (since enum member definitions need to be constant.)
*/
TermMilestone after() default STARTED;
/**
* Indicates that this terminator is a necessary step before achieving the specified milestone.
*
* <p>
* This has the identical purpose as {@link #attains()}. See {@link #after()} for why there are two things
* to achieve the same goal.
*/
TermMilestone before() default COMPLETED;
/**
* Indicates the milestones necessary before executing this terminator.
*/
String[] requires() default {};
/**
* Indicates the milestones that this terminator contributes to.
*
* A milestone is considered attained if all the terminators that attains the given milestone
* completes. So it works as a kind of join.
*/
String[] attains() default {};
/**
* Key in <tt>Messages.properties</tt> that represents what this task is about. Used for rendering the progress.
* Defaults to "${short class name}.${method Name}".
*/
String displayName() default "";
}