[jboss-svn-commits] JBL Code SVN: r20208 - in labs/jbossrules/trunk/drools-process/drools-osworkflow: src/main/java/org/drools/osworkflow and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 29 08:07:04 EDT 2008


Author: KrisVerlaenen
Date: 2008-05-29 08:07:04 -0400 (Thu, 29 May 2008)
New Revision: 20208

Added:
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/Simple2ProcessTest.java
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple2.xml
Removed:
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java
Modified:
   labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
   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/node/StepNodeInstance.java
   labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml
Log:
OSWorkflow implementation

Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath	2008-05-29 09:43:59 UTC (rev 20207)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath	2008-05-29 12:07:04 UTC (rev 20208)
@@ -12,5 +12,6 @@
 	<classpathentry kind="lib" path="lib/propertyset-1.4.jar"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+	<classpathentry kind="lib" path="lib/bsh-1.2b7.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>

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-29 09:43:59 UTC (rev 20207)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java	2008-05-29 12:07:04 UTC (rev 20208)
@@ -85,8 +85,10 @@
         List<Integer> ids = new ArrayList<Integer>();
         OSWorkflowProcessInstance processInstance = findProcessInstance(id);
         for (NodeInstance nodeInstance: processInstance.getNodeInstances()) {
-            StepNodeInstance stepNodeInstance = (StepNodeInstance) nodeInstance;
-            ids.addAll(stepNodeInstance.getAvailableActions());
+            if (nodeInstance instanceof StepNodeInstance) {
+                StepNodeInstance stepNodeInstance = (StepNodeInstance) nodeInstance;
+                ids.addAll(stepNodeInstance.getAvailableActions());
+            }
         }
         int[] result = new int[ids.size()];
         int i = 0;

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-29 09:43:59 UTC (rev 20207)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java	2008-05-29 12:07:04 UTC (rev 20208)
@@ -23,7 +23,7 @@
 public class OSWorkflowParser {
     
     private OSWorkflowProcess process;
-    private Map<StepDescriptor, StepNode> stepsMap;
+    private Map<Integer, StepNode> stepsMap;
     private Map<Integer, Split> splitsMap;
     private Map<Integer, Join> joinsMap;
 	
@@ -34,21 +34,22 @@
 		process.setPackageName("org.drools.osworkflow");
 		process.setInitialActions(descriptor.getInitialActions());
 
-        stepsMap = new HashMap<StepDescriptor, StepNode>();
+        stepsMap = new HashMap<Integer, StepNode>();
+        int nodeCounter = 0;
 		List<StepDescriptor> steps = descriptor.getSteps();
 		for (StepDescriptor step: steps) {
 			StepNode stepNode = new StepNode();
-			stepNode.setId(step.getId());
+			stepNode.setId(++nodeCounter);
 			stepNode.setName(step.getName());
 			stepNode.setActions(step.getActions());
 			process.addNode(stepNode);
-			stepsMap.put(step, stepNode);
+			stepsMap.put(step.getId(), stepNode);
 		}
 		splitsMap = new HashMap<Integer, Split>();
         List<SplitDescriptor> splits = descriptor.getSplits();
         for (SplitDescriptor split: splits) {
             Split splitNode = new Split();
-            splitNode.setId(split.getId());
+            splitNode.setId(++nodeCounter);
             splitNode.setName("split");
             splitNode.setType(Split.TYPE_AND);
             process.addNode(splitNode);
@@ -62,7 +63,7 @@
         List<JoinDescriptor> joins = descriptor.getJoins();
         for (JoinDescriptor join: joins) {
             Join joinNode = new Join();
-            joinNode.setId(join.getId());
+            joinNode.setId(++nodeCounter);
             joinNode.setName("join");
             // TODO conditions
             List<ConditionDescriptor> conditions = join.getConditions();
@@ -73,12 +74,12 @@
             createConnection(joinNode, Node.CONNECTION_DEFAULT_TYPE, result);
         }
 		
-		for (Map.Entry<StepDescriptor, StepNode> entry: stepsMap.entrySet()) {
-		    StepDescriptor step = entry.getKey();
+        steps = descriptor.getSteps();
+        for (StepDescriptor step: steps) {
 		    List<ActionDescriptor> actions = step.getActions();
 		    for (ActionDescriptor action: actions) {
                 ResultDescriptor result = action.getUnconditionalResult();
-		        createConnection(entry.getValue(), action.getId() + "", result);
+		        createConnection(stepsMap.get(step.getId()), action.getId() + "", result);
 		    }
 		}
 		return process;
@@ -91,11 +92,13 @@
         } else if (result.getJoin() != 0) {
             Join join = joinsMap.get(result.getJoin());
             new ConnectionImpl(node, type, join, Node.CONNECTION_DEFAULT_TYPE);
+        } else if (result.getStep() == -1 || result.getStep() == node.getId()) {
+            // Do nothing, this is an internal connection
         } else {
             new ConnectionImpl(
                 node,
                 type,
-                process.getNode(result.getStep() == -1 ? node.getId() : result.getStep()),
+                process.getNode(result.getStep()),
                 result.getStatus()
             );
         }

Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/node/StepNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/node/StepNodeInstance.java	2008-05-29 09:43:59 UTC (rev 20207)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/node/StepNodeInstance.java	2008-05-29 12:07:04 UTC (rev 20208)
@@ -13,6 +13,7 @@
 import com.opensymphony.workflow.loader.ConditionDescriptor;
 import com.opensymphony.workflow.loader.ConditionsDescriptor;
 import com.opensymphony.workflow.loader.RestrictionDescriptor;
+import com.opensymphony.workflow.loader.ResultDescriptor;
 import com.opensymphony.workflow.spi.Step;
 import com.opensymphony.workflow.util.StatusCondition;
 
@@ -40,8 +41,14 @@
             throw new IllegalArgumentException(
                 "Unknown action id " + actionId);
         }
+        ResultDescriptor result = action.getUnconditionalResult();
         // TODO check stuff
-        triggerCompleted(actionId + "", true);
+        if (result.getStep() == -1 || result.getStep() == getNodeId()) {
+            setStatus(result.getStatus());
+        } else {
+            setStatus(result.getOldStatus());
+            triggerCompleted(actionId + "", true);
+        }
     }
     
     public String getStatus() {

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/Simple2ProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/Simple2ProcessTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/Simple2ProcessTest.java	2008-05-29 12:07:04 UTC (rev 20208)
@@ -0,0 +1,96 @@
+package org.drools;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.osworkflow.DroolsWorkflow;
+
+import com.opensymphony.workflow.Workflow;
+import com.opensymphony.workflow.config.DefaultConfiguration;
+import com.opensymphony.workflow.spi.Step;
+
+public class Simple2ProcessTest extends TestCase {
+	
+	public void testSimpleProcess() {
+		Workflow workflow = new DroolsWorkflow();
+		DefaultConfiguration config = new DefaultConfiguration();
+		workflow.setConfiguration(config);
+		try {
+			long workflowId = workflow.initialize("simple2", 1, null);
+			
+			Collection<Step> currentSteps = workflow.getCurrentSteps(workflowId);
+			//verify we only have one current step
+			assertEquals("Unexpected number of current steps", 1, currentSteps.size());
+			//verify it's step 1
+			Step currentStep = currentSteps.iterator().next();
+			assertEquals("Unexpected current step", 1, currentStep.getStepId());
+
+			int[] availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+			//verify we only have one available action
+			assertEquals("Unexpected number of available actions", 1, availableActions.length);
+			//verify it's action 2
+			assertEquals("Unexpected available action", 2, availableActions[0]);
+			
+			workflow.doAction(workflowId, 2, null);
+			
+			currentSteps = workflow.getCurrentSteps(workflowId);
+            //verify we have two current steps
+            assertEquals("Unexpected number of current steps", 2, currentSteps.size());
+            //verify it's step 2 and 3
+            List<Integer> currentStepIds = new ArrayList<Integer>();
+            for (Step step: currentSteps) {
+                currentStepIds.add((int) step.getId());
+            }
+            assertTrue("Current step 2 not found", currentStepIds.contains(2));
+            assertTrue("Current step 3 not found", currentStepIds.contains(3));
+            
+			availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+			//verify we have two available actions
+			assertEquals("Unexpected number of available actions", 2, availableActions.length);
+			//verify it's action 3 and 4
+			List<Integer> availableActionIds = new ArrayList<Integer>();
+            for (int availableAction: availableActions) {
+                availableActionIds.add(availableAction);
+            }
+			assertTrue("Available action 3 not found", availableActionIds.contains(3));
+            assertTrue("Available action 4 not found", availableActionIds.contains(4));
+			
+			workflow.doAction(workflowId, 3, null);
+			
+			currentSteps = workflow.getCurrentSteps(workflowId);
+            //verify we only have one current step
+            assertEquals("Unexpected number of current steps", 1, currentSteps.size());
+            //verify it's step 3
+            currentStep = currentSteps.iterator().next();
+            assertEquals("Unexpected current step", 3, currentStep.getStepId());
+            
+            availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+            //verify we only have one available action
+            assertEquals("Unexpected number of available actions", 1, availableActions.length);
+            //verify it's action 4
+            assertEquals("Unexpected available action", 4, availableActions[0]);
+            
+            workflow.doAction(workflowId, 4, null);
+            
+            currentSteps = workflow.getCurrentSteps(workflowId);
+            //verify we only have one current step
+            assertEquals("Unexpected number of current steps", 1, currentSteps.size());
+            //verify it's step 4
+            currentStep = currentSteps.iterator().next();
+            assertEquals("Unexpected current step", 4, currentStep.getStepId());
+
+            availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+			//verify we only have one available action
+			assertEquals("Unexpected number of available actions", 0, availableActions.length);
+			
+		} catch (Throwable t) {
+			t.printStackTrace();
+			fail();
+		}
+	}
+
+}

Deleted: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java	2008-05-29 09:43:59 UTC (rev 20207)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleOSWorkflowProcessTest.java	2008-05-29 12:07:04 UTC (rev 20208)
@@ -1,55 +0,0 @@
-package org.drools;
-
-import java.util.Collection;
-import java.util.Collections;
-
-import junit.framework.TestCase;
-
-import com.opensymphony.workflow.Workflow;
-import com.opensymphony.workflow.basic.BasicWorkflow;
-import com.opensymphony.workflow.config.DefaultConfiguration;
-import com.opensymphony.workflow.spi.Step;
-
-public class SimpleOSWorkflowProcessTest extends TestCase {
-	
-	public void testSimpleProcess() {
-		Workflow workflow = new BasicWorkflow("testuser");
-		DefaultConfiguration config = new DefaultConfiguration();
-		workflow.setConfiguration(config);
-		try {
-			long workflowId = workflow.initialize("simple", 1, null);
-			
-			Collection<Step> currentSteps = workflow.getCurrentSteps(workflowId);
-			//verify we only have one current step
-			assertEquals("Unexpected number of current steps", 1, currentSteps.size());
-			//verify it's step 1
-			Step currentStep = currentSteps.iterator().next();
-			assertEquals("Unexpected current step", 1, currentStep.getStepId());
-
-			int[] availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
-			//verify we only have one available action
-			assertEquals("Unexpected number of available actions", 1, availableActions.length);
-			//verify it's action 1
-			assertEquals("Unexpected available action", 2, availableActions[0]);
-			
-			workflow.doAction(workflowId, 2, null);
-			
-			availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
-			//verify we only have one available action
-			assertEquals("Unexpected number of available actions", 1, availableActions.length);
-			//verify it's action 1
-			assertEquals("Unexpected available action", 3, availableActions[0]);
-			
-			workflow.doAction(workflowId, 3, null);
-			
-			availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
-			//verify we only have one available action
-			assertEquals("Unexpected number of available actions", 0, availableActions.length);
-			
-		} catch (Throwable t) {
-			t.printStackTrace();
-			fail();
-		}
-	}
-
-}

Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple2.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple2.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/simple2.xml	2008-05-29 12:07:04 UTC (rev 20208)
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE workflow PUBLIC 
+                 "-//OpenSymphony Group//DTD OSWorkflow 2.8//EN"
+                 "http://www.opensymphony.com/osworkflow/workflow_2_8.dtd">
+<workflow>
+  <initial-actions>
+    <action id="1" name="Start Workflow">
+      <results>
+        <unconditional-result old-status="Finished" status="Active" step="1"/>
+      </results>
+    </action>
+  </initial-actions>
+  <steps>
+    <step id="1" name="Stage 1">
+      <actions>
+        <action id="2" name="Finish Stage 1">
+          <restrict-to>
+            <conditions>
+              <condition type="class">
+                <arg name="class.name">
+                   com.opensymphony.workflow.util.StatusCondition
+                </arg>
+                <arg name="status">Active</arg>
+              </condition>
+            </conditions>
+          </restrict-to>
+          <results>
+            <unconditional-result old-status="Finished" split="1" />
+          </results>
+        </action>
+      </actions>
+    </step>
+    <step id="2" name="Stage 2">
+      <actions>
+        <action id="3" name="Finish Stage 2">
+          <restrict-to>
+            <conditions>
+              <condition type="class">
+                <arg name="class.name">
+                   com.opensymphony.workflow.util.StatusCondition
+                </arg>
+                <arg name="status">Active</arg>
+              </condition>
+            </conditions>
+          </restrict-to>
+          <results>
+            <unconditional-result old-status="Finished" join="1" />
+          </results>
+        </action>
+      </actions>
+    </step>
+    <step id="3" name="Stage 3">
+      <actions>
+        <action id="4" name="Finish Stage 3">
+          <restrict-to>
+            <conditions>
+              <condition type="class">
+                <arg name="class.name">
+                   com.opensymphony.workflow.util.StatusCondition
+                </arg>
+                <arg name="status">Active</arg>
+              </condition>
+            </conditions>
+          </restrict-to>
+          <results>
+            <unconditional-result old-status="Finished" join="1" />
+          </results>
+        </action>
+      </actions>
+    </step>
+    <step id="4" name="Stage 4" />
+  </steps>
+  <splits>
+    <split id="1">
+      <unconditional-result old-status="Finished" step="2" status="Active" />
+      <unconditional-result old-status="Finished" step="3" status="Active" />
+    </split>
+  </splits>
+  <joins>
+    <join id="1">
+      <conditions type="AND">
+        <condition type="beanshell">
+          <arg name="script">
+            "Finished".equals(jn.getStep(2).getStatus()) 
+            &amp;&amp; "Finished".equals(jn.getStep(3).getStatus())
+          </arg>
+        </condition>
+      </conditions>
+      <unconditional-result old-status="Finished" status="Active" step="4"/>
+    </join>
+  </joins>
+</workflow>
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml	2008-05-29 09:43:59 UTC (rev 20207)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/resources/workflows.xml	2008-05-29 12:07:04 UTC (rev 20208)
@@ -1,3 +1,4 @@
 <workflows>
   <workflow name="simple" type="resource" location="simple.xml"/>
+  <workflow name="simple2" type="resource" location="simple2.xml"/>
 </workflows>
\ No newline at end of file




More information about the jboss-svn-commits mailing list