[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