package hudson.drools;
import hudson.model.BooleanParameterValue;
import hudson.model.ParameterValue;
import hudson.model.Run;
import hudson.model.RunParameterValue;
import hudson.model.StringParameterValue;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.drools.runtime.process.WorkItem;
import org.drools.runtime.process.WorkItemHandler;
import org.drools.runtime.process.WorkItemManager;
public class BuildWorkItemHandler implements WorkItemHandler {
private static final String COMPLETE_WHEN_UNSTABLE = "Complete when unstable";
private static final String COMPLETE_WHEN_FAILED = "Complete when failed";
private static final String PROJECT = "Project";
private final DroolsProject project;
public BuildWorkItemHandler(DroolsProject project) {
super();
this.project = project;
}
public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
}
public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
String projectName = (String) workItem.getParameter(PROJECT);
Boolean completeWhenFailed = (Boolean) workItem
.getParameter(COMPLETE_WHEN_FAILED);
Boolean completeWhenUnstable = (Boolean) workItem
.getParameter(COMPLETE_WHEN_UNSTABLE);
List<ParameterValue> values = new ArrayList<ParameterValue>();
for (Map.Entry<String, Object> parameter : workItem.getParameters()
.entrySet()) {
if (parameter.getValue() instanceof String) {
values.add(new StringParameterValue(parameter.getKey(),
(String) parameter.getValue(), "drools parameter"));
}
if (parameter.getValue() instanceof Boolean) {
values.add(new BooleanParameterValue(parameter.getKey(),
(Boolean) parameter.getValue(), "drools parameter"));
}
if (parameter.getValue() instanceof RunWrapper) {
Run run = ((RunWrapper) parameter.getValue()).getRun();
values.add(new RunParameterValue(parameter.getKey(),
run != null ? run.getExternalizableId() : null, "drools parameter"));
}
}
try {
WorkItemAction action = new WorkItemAction(
project.getName(),
workItem.getId(),
workItem.getProcessInstanceId(),
projectName,
completeWhenFailed != null ? completeWhenFailed : false,
completeWhenUnstable != null ? completeWhenUnstable : false,
values);
project.addPendingWorkItemBuild(action);
action.scheduleBuild();
} catch (Exception e) {
DroolsRun run = project.getFromProcessInstance(workItem.getProcessInstanceId());
e.printStackTrace(run.getLogWriter());
}
}
}