[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())
+ && "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