[jboss-svn-commits] JBL Code SVN: r20204 - in labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow: instance and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 28 20:29:51 EDT 2008
Author: KrisVerlaenen
Date: 2008-05-28 20:29:51 -0400 (Wed, 28 May 2008)
New Revision: 20204
Modified:
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java
Log:
OSWorkflow implementation
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java 2008-05-28 23:51:03 UTC (rev 20203)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java 2008-05-29 00:29:51 UTC (rev 20204)
@@ -7,7 +7,6 @@
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
-import org.drools.osworkflow.core.node.StepNode;
import org.drools.osworkflow.instance.OSWorkflowProcessInstance;
import org.drools.osworkflow.instance.node.StepNodeInstance;
import org.drools.rule.Package;
@@ -29,6 +28,7 @@
public class DroolsWorkflow implements Workflow {
+ private OSWorkflowParser parser = new OSWorkflowParser();
private WorkingMemory workingMemory;
private Configuration configuration;
@@ -45,7 +45,7 @@
"Could not find process with name " + workflowName);
}
Package newPackage = new Package("org.drools.osworkflow");
- newPackage.addRuleFlow(OSWorkflowParser.parseOSWorkflow(descriptor));
+ newPackage.addRuleFlow(parser.parseOSWorkflow(descriptor));
ruleBase.addPackage(newPackage);
}
// TODO initialAction
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java 2008-05-28 23:51:03 UTC (rev 20203)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java 2008-05-29 00:29:51 UTC (rev 20204)
@@ -7,23 +7,34 @@
import org.drools.osworkflow.core.OSWorkflowProcess;
import org.drools.osworkflow.core.node.StepNode;
import org.drools.process.core.Process;
+import org.drools.workflow.core.Node;
import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
import com.opensymphony.workflow.loader.ActionDescriptor;
+import com.opensymphony.workflow.loader.ConditionDescriptor;
+import com.opensymphony.workflow.loader.JoinDescriptor;
import com.opensymphony.workflow.loader.ResultDescriptor;
+import com.opensymphony.workflow.loader.SplitDescriptor;
import com.opensymphony.workflow.loader.StepDescriptor;
import com.opensymphony.workflow.loader.WorkflowDescriptor;
public class OSWorkflowParser {
+
+ private OSWorkflowProcess process;
+ private Map<StepDescriptor, StepNode> stepsMap;
+ private Map<Integer, Split> splitsMap;
+ private Map<Integer, Join> joinsMap;
- public static Process parseOSWorkflow(WorkflowDescriptor descriptor) {
- OSWorkflowProcess process = new OSWorkflowProcess();
+ public Process parseOSWorkflow(WorkflowDescriptor descriptor) {
+ process = new OSWorkflowProcess();
process.setName(descriptor.getName());
process.setId(descriptor.getName());
process.setPackageName("org.drools.osworkflow");
process.setInitialActions(descriptor.getInitialActions());
- Map<StepDescriptor, StepNode> stepsMap = new HashMap<StepDescriptor, StepNode>();
+ stepsMap = new HashMap<StepDescriptor, StepNode>();
List<StepDescriptor> steps = descriptor.getSteps();
for (StepDescriptor step: steps) {
StepNode stepNode = new StepNode();
@@ -33,19 +44,61 @@
process.addNode(stepNode);
stepsMap.put(step, stepNode);
}
+ splitsMap = new HashMap<Integer, Split>();
+ List<SplitDescriptor> splits = descriptor.getSplits();
+ for (SplitDescriptor split: splits) {
+ Split splitNode = new Split();
+ splitNode.setId(split.getId());
+ splitNode.setName("split");
+ splitNode.setType(Split.TYPE_AND);
+ process.addNode(splitNode);
+ splitsMap.put(split.getId(), splitNode);
+ List<ResultDescriptor> results = split.getResults();
+ for (ResultDescriptor result: results) {
+ createConnection(splitNode, Node.CONNECTION_DEFAULT_TYPE, result);
+ }
+ }
+ joinsMap = new HashMap<Integer, Join>();
+ List<JoinDescriptor> joins = descriptor.getJoins();
+ for (JoinDescriptor join: joins) {
+ Join joinNode = new Join();
+ joinNode.setId(join.getId());
+ joinNode.setName("join");
+ // TODO conditions
+ List<ConditionDescriptor> conditions = join.getConditions();
+ joinNode.setType(Join.TYPE_AND);
+ process.addNode(joinNode);
+ joinsMap.put(join.getId(), joinNode);
+ ResultDescriptor result = join.getResult();
+ createConnection(joinNode, Node.CONNECTION_DEFAULT_TYPE, result);
+ }
for (Map.Entry<StepDescriptor, StepNode> entry: stepsMap.entrySet()) {
StepDescriptor step = entry.getKey();
List<ActionDescriptor> actions = step.getActions();
for (ActionDescriptor action: actions) {
- ResultDescriptor result = action.getUnconditionalResult();
- if (result != null) {
- new ConnectionImpl(entry.getValue(), action.getId() + "",
- process.getNode(result.getStep()), result.getStatus());
- }
+ ResultDescriptor result = action.getUnconditionalResult();
+ createConnection(entry.getValue(), action.getId() + "", result);
}
}
return process;
}
+
+ private void createConnection(Node node, String type, ResultDescriptor result) {
+ if (result.getSplit() != 0) {
+ Split split = splitsMap.get(result.getSplit());
+ new ConnectionImpl(node, type, split, Node.CONNECTION_DEFAULT_TYPE);
+ } else if (result.getJoin() != 0) {
+ Join join = joinsMap.get(result.getJoin());
+ new ConnectionImpl(node, type, join, Node.CONNECTION_DEFAULT_TYPE);
+ } else {
+ new ConnectionImpl(
+ node,
+ type,
+ process.getNode(result.getStep() == -1 ? node.getId() : result.getStep()),
+ result.getStatus()
+ );
+ }
+ }
}
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java 2008-05-28 23:51:03 UTC (rev 20203)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java 2008-05-29 00:29:51 UTC (rev 20204)
@@ -19,7 +19,11 @@
}
protected void internalStart() {
- // Do nothing
+ for (ActionDescriptor action: getOSWorkflowProcess().getInitialActions()) {
+ if (action.getAutoExecute()) {
+ executeAction(action);
+ }
+ }
}
public void doInitialAction(int actionId, Map inputs) {
@@ -28,7 +32,12 @@
throw new IllegalArgumentException(
"Unknown initial action id " + actionId);
}
- ResultDescriptor result = initialAction.getUnconditionalResult();
+ executeAction(initialAction);
+ }
+
+ protected void executeAction(ActionDescriptor action) {
+ // TODO check conditional results first
+ ResultDescriptor result = action.getUnconditionalResult();
int step = result.getStep();
String status = result.getStatus();
StepNode stepNode = (StepNode) getNodeContainer().getNode(step);
More information about the jboss-svn-commits
mailing list