package hudson.plugins.parameterizedtrigger;
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Action;
import hudson.model.DependencyGraph;
import hudson.model.DependencyGraph.Dependency;
import hudson.model.TaskListener;
import java.util.List;
/**
* Invoke downstream projects with applicable parameters using Hudson's
* DependencyGraph.Dependency interface.
* @author Alan.Harder@sun.com
*/
public class ParameterizedDependency extends Dependency {
private BuildTriggerConfig config;
public ParameterizedDependency(AbstractProject upstream, AbstractProject downstream,
BuildTriggerConfig config) {
super(upstream, downstream);
this.config = config;
}
public static void add(AbstractProject upstream, AbstractProject downstream,
BuildTriggerConfig config, DependencyGraph graph) {
// Keeping graph.addDependency() call in this class so classloader
// won't look for DependencyGraph.Dependency when running on older Hudson
graph.addDependency(new ParameterizedDependency(upstream, downstream, config));
}
@Override
public boolean shouldTriggerBuild(AbstractBuild build, TaskListener listener,
List<Action> actions) {
if (!config.getCondition().isMet(build.getResult()))
return false;
try {
List<Action> actionList = config.getBaseActions(build, listener);
if (!actionList.isEmpty()) {
actions.addAll(config.getBuildActions(actionList, getDownstreamProject()));
return true;
}
return false;
} catch (AbstractBuildParameters.DontTriggerException ex) {
// don't trigger on this configuration
return false;
} catch (Exception ex) {
listener.error("Failed to build parameters to trigger project: "
+ getDownstreamProject().getName());
ex.printStackTrace(listener.getLogger());
return false;
}
}
}