package org.jboss.seam.drools;
import java.util.List;
import org.drools.WorkingMemory;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.node.DecisionHandler;
/**
* A jBPM DecisionHandler that delegates to a Drools WorkingMemory
* held in a Seam context variable. The decision outcome is returned
* by setting the outcome attribute of the global named "decision".
*
* @author Gavin King
*
*/
public class DroolsDecisionHandler extends DroolsHandler implements DecisionHandler
{
private static final long serialVersionUID = -8900810376838166513L;
public List<String> assertObjects;
public List<String> retractObjects;
public String workingMemoryName;
public String startProcessId;
public String decide(ExecutionContext executionContext) throws Exception
{
WorkingMemory workingMemory = getWorkingMemory(workingMemoryName, assertObjects, retractObjects, executionContext);
workingMemory.setGlobal( "decision", new Decision() );
if(startProcessId != null && startProcessId.trim().length() > 0 )
{
workingMemory.startProcess(startProcessId);
}
workingMemory.fireAllRules();
return ( (Decision) workingMemory.getGlobal("decision") ).getOutcome();
}
}