package hudson.plugins.promoted_builds.integrations.jobdsl;
import groovy.lang.Closure;
import groovy.util.Node;
import hudson.plugins.promoted_builds.PromotionCondition;
import hudson.plugins.promoted_builds.conditions.DownstreamPassCondition;
import hudson.plugins.promoted_builds.conditions.ParameterizedSelfPromotionCondition;
import hudson.plugins.promoted_builds.conditions.SelfPromotionCondition;
import hudson.plugins.promoted_builds.conditions.UpstreamPromotionCondition;
import java.util.ArrayList;
import java.util.List;
import javaposse.jobdsl.dsl.Context;
import javaposse.jobdsl.dsl.helpers.step.StepContext;
import javaposse.jobdsl.plugin.DslEnvironment;
import static javaposse.jobdsl.plugin.ContextExtensionPoint.executeInContext;
class PromotionContext implements Context {
private final DslEnvironment dslEnvironment;
private List<PromotionCondition> conditions = new ArrayList<PromotionCondition>();
private List<Node> actions = new ArrayList<Node>();
private String icon;
private String restrict;
private String name;
public void name(String name) {
this.name = name;
}
public void icon(String icon) {
this.icon = icon;
}
public void restrict(String restrict) {
this.restrict = restrict;
}
public PromotionContext(DslEnvironment dslEnvironment) {
this.dslEnvironment = dslEnvironment;
}
public void conditions(Closure<?> conditionClosure) {
// delegate to ConditionsContext
ConditionsContext conditionContext = new ConditionsContext(dslEnvironment);
executeInContext(conditionClosure, conditionContext);
if (conditionContext.isSelfPromotion()) {
conditions.add(new SelfPromotionCondition(conditionContext.isEvenIfUnstable()));
}
if (conditionContext.isParameterizedSelfPromotion()) {
conditions.add(new ParameterizedSelfPromotionCondition(conditionContext.isEvenIfUnstableParameterized(), conditionContext
.getParameterName(), conditionContext.getParameterValue()));
}
if (conditionContext.isManual()) {
JobDslManualCondition condition = new JobDslManualCondition();
condition.setUsers(conditionContext.getUsers());
if (conditionContext.getParams() != null) {
condition.setParameterDefinitionNodes(conditionContext.getParams().values());
}
conditions.add(condition);
}
if (conditionContext.isReleaseBuild()) {
conditions.add(new ReleasePromotionCondition());
}
if (conditionContext.isDownstreamPass()) {
conditions.add(new DownstreamPassCondition(conditionContext.getJobs(), conditionContext.isEvenIfUnstableDownstream()));
}
if (conditionContext.isUpstreamPromotion()) {
conditions.add(new UpstreamPromotionCondition(conditionContext.getPromotionNames()));
}
}
public void actions(Closure<?> actionsClosure) {
// delegate to StepContext
StepContext stepContext = dslEnvironment.createContext(StepContext.class);
executeInContext(actionsClosure, stepContext);
actions.addAll(stepContext.getStepNodes());
}
public List<PromotionCondition> getConditions() {
return conditions;
}
public List<Node> getActions() {
return actions;
}
public String getIcon() {
return icon;
}
public String getRestrict() {
return restrict;
}
public String getName() {
return name;
}
}