[jboss-svn-commits] JBL Code SVN: r20202 - in labs/jbossrules/trunk/drools-process/drools-osworkflow: src/main and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 28 19:50:58 EDT 2008
Author: KrisVerlaenen
Date: 2008-05-28 19:50:58 -0400 (Wed, 28 May 2008)
New Revision: 20202
Added:
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/OSWorkflowProcess.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/node/
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/node/StepNode.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/
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/OSWorkflowProcessInstanceFactory.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/node/
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/resources/
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessInstanceFactory.conf
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessNodeInstanceFactory.conf
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/drools.rulebase.conf
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/test/java/org/drools/SimpleProcessTest.java
Log:
OSWorkflow implementation
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath 2008-05-28 17:46:26 UTC (rev 20201)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath 2008-05-28 23:50:58 UTC (rev 20202)
@@ -1,9 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/main/resources"/>
<classpathentry kind="src" path="src/test/java"/>
<classpathentry kind="src" path="src/test/resources"/>
- <classpathentry kind="lib" path="lib/osworkflow-2.8.0.jar" sourcepath="C:/development/projects/osworkflow/src/java"/>
+ <classpathentry kind="lib" path="lib/osworkflow-2.8.0.jar" sourcepath="F:/Mijn documenten/projects/osworkflow/src/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
<classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.jar"/>
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 17:46:26 UTC (rev 20201)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/DroolsWorkflow.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -1,13 +1,17 @@
package org.drools.osworkflow;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
-import org.drools.process.instance.ProcessInstance;
+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;
+import org.drools.workflow.instance.NodeInstance;
import com.opensymphony.module.propertyset.PropertySet;
import com.opensymphony.workflow.FactoryException;
@@ -45,17 +49,27 @@
ruleBase.addPackage(newPackage);
}
// TODO initialAction
- return workingMemory.startProcess(workflowName, inputs).getId();
+ OSWorkflowProcessInstance processInstance = (OSWorkflowProcessInstance)
+ workingMemory.startProcess(workflowName);
+ processInstance.doInitialAction(initialAction, inputs);
+ return processInstance.getId();
}
public void doAction(long id, int actionId, Map inputs)
throws InvalidInputException, WorkflowException {
- ProcessInstance processInstance = findProcessInstance(id);
-
+ OSWorkflowProcessInstance processInstance = findProcessInstance(id);
+ for (NodeInstance nodeInstance: processInstance.getNodeInstances()) {
+ StepNodeInstance stepNodeInstance = (StepNodeInstance) nodeInstance;
+ if (stepNodeInstance.isAvailableAction(actionId)) {
+ stepNodeInstance.doAction(actionId, inputs);
+ break;
+ }
+ }
}
- private ProcessInstance findProcessInstance(long id) {
- ProcessInstance processInstance = workingMemory.getProcessInstance(id);
+ private OSWorkflowProcessInstance findProcessInstance(long id) {
+ OSWorkflowProcessInstance processInstance = (OSWorkflowProcessInstance)
+ workingMemory.getProcessInstance(id);
if (processInstance == null) {
throw new IllegalArgumentException(
"Could not find process instance with id " + id);
@@ -64,18 +78,26 @@
}
public int[] getAvailableActions(long id) {
- // TODO
- return null;
+ return getAvailableActions(id, null);
}
public int[] getAvailableActions(long id, Map inputs) {
- // TODO
- return null;
+ List<Integer> ids = new ArrayList<Integer>();
+ OSWorkflowProcessInstance processInstance = findProcessInstance(id);
+ for (NodeInstance nodeInstance: processInstance.getNodeInstances()) {
+ StepNodeInstance stepNodeInstance = (StepNodeInstance) nodeInstance;
+ ids.addAll(stepNodeInstance.getAvailableActions());
+ }
+ int[] result = new int[ids.size()];
+ int i = 0;
+ for (int actionId : ids) {
+ result[i++] = actionId;
+ }
+ return result;
}
public boolean canInitialize(String workflowName, int initialStep) {
- // TODO
- return false;
+ return canInitialize(workflowName, initialStep, null);
}
public boolean canInitialize(String workflowName, int initialAction, Map inputs) {
@@ -97,8 +119,14 @@
}
public List getCurrentSteps(long id) {
- // TODO
- return null;
+ List<StepNodeInstance> result = new ArrayList<StepNodeInstance>();
+ OSWorkflowProcessInstance processInstance = findProcessInstance(id);
+ for (NodeInstance nodeInstance: processInstance.getNodeInstances()) {
+ if (nodeInstance instanceof StepNodeInstance) {
+ result.add((StepNodeInstance) nodeInstance);
+ }
+ }
+ return result;
}
public int getEntryState(long id) {
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 17:46:26 UTC (rev 20201)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/OSWorkflowParser.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -1,25 +1,50 @@
package org.drools.osworkflow;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import org.drools.osworkflow.core.OSWorkflowProcess;
+import org.drools.osworkflow.core.node.StepNode;
import org.drools.process.core.Process;
-import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import com.opensymphony.workflow.loader.ActionDescriptor;
+import com.opensymphony.workflow.loader.ResultDescriptor;
import com.opensymphony.workflow.loader.StepDescriptor;
import com.opensymphony.workflow.loader.WorkflowDescriptor;
-import com.opensymphony.workflow.spi.Step;
public class OSWorkflowParser {
public static Process parseOSWorkflow(WorkflowDescriptor descriptor) {
- RuleFlowProcess process = new RuleFlowProcess();
+ OSWorkflowProcess 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>();
List<StepDescriptor> steps = descriptor.getSteps();
for (StepDescriptor step: steps) {
-
+ StepNode stepNode = new StepNode();
+ stepNode.setId(step.getId());
+ stepNode.setName(step.getName());
+ stepNode.setActions(step.getActions());
+ process.addNode(stepNode);
+ stepsMap.put(step, stepNode);
}
+
+ 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());
+ }
+ }
+ }
return process;
}
Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/OSWorkflowProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/OSWorkflowProcess.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/OSWorkflowProcess.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,43 @@
+package org.drools.osworkflow.core;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.workflow.core.impl.WorkflowProcessImpl;
+
+import com.opensymphony.workflow.loader.ActionDescriptor;
+
+public class OSWorkflowProcess extends WorkflowProcessImpl {
+
+ public static final String OSWORKFLOW_TYPE = "OSWorkflow";
+
+ private static final long serialVersionUID = 1L;
+
+ public Map<Integer, ActionDescriptor> initialActions =
+ new HashMap<Integer, ActionDescriptor>();
+
+ public OSWorkflowProcess() {
+ setType(OSWORKFLOW_TYPE);
+ }
+
+ public void addInitialAction(ActionDescriptor action) {
+ this.initialActions.put(action.getId(), action);
+ }
+
+ public void setInitialActions(List<ActionDescriptor> actions) {
+ for (ActionDescriptor action: actions) {
+ addInitialAction(action);
+ }
+ }
+
+ public Collection<ActionDescriptor> getInitialActions() {
+ return initialActions.values();
+ }
+
+ public ActionDescriptor getInitialAction(int id) {
+ return initialActions.get(id);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/node/StepNode.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/node/StepNode.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/core/node/StepNode.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,37 @@
+package org.drools.osworkflow.core.node;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.workflow.core.impl.NodeImpl;
+
+import com.opensymphony.workflow.loader.ActionDescriptor;
+
+public class StepNode extends NodeImpl {
+
+ public Map<Integer, ActionDescriptor> actions =
+ new HashMap<Integer, ActionDescriptor>();
+
+ private static final long serialVersionUID = 1L;
+
+ public void addAction(ActionDescriptor action) {
+ this.actions.put(action.getId(), action);
+ }
+
+ public void setActions(List<ActionDescriptor> actions) {
+ for (ActionDescriptor action: actions) {
+ addAction(action);
+ }
+ }
+
+ public Collection<ActionDescriptor> getActions() {
+ return actions.values();
+ }
+
+ public ActionDescriptor getAction(int id) {
+ return actions.get(id);
+ }
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstance.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,42 @@
+package org.drools.osworkflow.instance;
+
+import java.util.Map;
+
+import org.drools.osworkflow.core.OSWorkflowProcess;
+import org.drools.osworkflow.core.node.StepNode;
+import org.drools.osworkflow.instance.node.StepNodeInstance;
+import org.drools.workflow.instance.impl.WorkflowProcessInstanceImpl;
+
+import com.opensymphony.workflow.loader.ActionDescriptor;
+import com.opensymphony.workflow.loader.ResultDescriptor;
+
+public class OSWorkflowProcessInstance extends WorkflowProcessInstanceImpl {
+
+ private static final long serialVersionUID = 1L;
+
+ public OSWorkflowProcess getOSWorkflowProcess() {
+ return (OSWorkflowProcess) getProcess();
+ }
+
+ protected void internalStart() {
+ // Do nothing
+ }
+
+ public void doInitialAction(int actionId, Map inputs) {
+ ActionDescriptor initialAction = getOSWorkflowProcess().getInitialAction(actionId);
+ if (initialAction == null) {
+ throw new IllegalArgumentException(
+ "Unknown initial action id " + actionId);
+ }
+ ResultDescriptor result = initialAction.getUnconditionalResult();
+ int step = result.getStep();
+ String status = result.getStatus();
+ StepNode stepNode = (StepNode) getNodeContainer().getNode(step);
+ if (stepNode == null) {
+ throw new IllegalArgumentException(
+ "Unknown step id " + step);
+ }
+ StepNodeInstance stepNodeInstance = (StepNodeInstance) getNodeInstance(stepNode);
+ stepNodeInstance.trigger(null, status);
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,12 @@
+package org.drools.osworkflow.instance;
+
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.ProcessInstanceFactory;
+
+public class OSWorkflowProcessInstanceFactory implements ProcessInstanceFactory {
+
+ public ProcessInstance createProcessInstance() {
+ return new OSWorkflowProcessInstance();
+ }
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/node/StepNodeInstance.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,130 @@
+package org.drools.osworkflow.instance.node;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.osworkflow.core.node.StepNode;
+import org.drools.workflow.instance.NodeInstance;
+import org.drools.workflow.instance.impl.NodeInstanceImpl;
+
+import com.opensymphony.workflow.loader.ActionDescriptor;
+import com.opensymphony.workflow.loader.ConditionDescriptor;
+import com.opensymphony.workflow.loader.ConditionsDescriptor;
+import com.opensymphony.workflow.loader.RestrictionDescriptor;
+import com.opensymphony.workflow.spi.Step;
+import com.opensymphony.workflow.util.StatusCondition;
+
+public class StepNodeInstance extends NodeInstanceImpl implements Step {
+
+ private static final long serialVersionUID = 1L;
+
+ private String status;
+
+ public StepNode getStepNode() {
+ return (StepNode) getNode();
+ }
+
+ public int getStepId() {
+ return (int) getNodeId();
+ }
+
+ public void internalTrigger(NodeInstance from, String type) {
+ setStatus(type);
+ }
+
+ public void doAction(int actionId, Map inputs) {
+ ActionDescriptor action = getStepNode().getAction(actionId);
+ if (action == null) {
+ throw new IllegalArgumentException(
+ "Unknown action id " + actionId);
+ }
+ // TODO check stuff
+ triggerCompleted(actionId + "", true);
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public boolean isAvailableAction(int actionId) {
+ return isAvailableAction(getStepNode().getAction(actionId));
+ }
+
+ private boolean isAvailableAction(ActionDescriptor action) {
+ if (action == null) {
+ return false;
+ }
+ RestrictionDescriptor restriction = action.getRestriction();
+ if (restriction != null) {
+ ConditionsDescriptor conditions = restriction.getConditionsDescriptor();
+ if (conditions != null) {
+ List<ConditionDescriptor> conditionList = conditions.getConditions();
+ for (ConditionDescriptor condition: conditionList) {
+ String className = (String) condition.getArgs().get("class.name");
+ if (StatusCondition.class.getName().equals(className.trim())) {
+ String status = (String) condition.getArgs().get("status");
+ return status.equals(this.status);
+ }
+ }
+ }
+ }
+ return true;
+ }
+
+ public List<Integer> getAvailableActions() {
+ List<Integer> ids = new ArrayList<Integer>();
+ for (ActionDescriptor action: getStepNode().getActions()) {
+ if (isAvailableAction(action)) {
+ ids.add(action.getId());
+ }
+ }
+ return ids;
+ }
+
+ public int getActionId() {
+ // TODO
+ return 0;
+ }
+
+ public String getCaller() {
+ // TODO
+ return null;
+ }
+
+ public Date getDueDate() {
+ // TODO
+ return null;
+ }
+
+ public long getEntryId() {
+ // TODO
+ return 0;
+ }
+
+ public Date getFinishDate() {
+ // TODO
+ return null;
+ }
+
+ public String getOwner() {
+ // TODO
+ return null;
+ }
+
+ public long[] getPreviousStepIds() {
+ // TODO
+ return null;
+ }
+
+ public Date getStartDate() {
+ // TODO
+ return null;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessInstanceFactory.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessInstanceFactory.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessInstanceFactory.conf 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,7 @@
+// we use MVEL to configure our process, simply populate a map, which will be added to the main registry
+import org.drools.osworkflow.core.OSWorkflowProcess;
+import org.drools.osworkflow.instance.OSWorkflowProcessInstanceFactory;
+
+[
+ OSWorkflowProcess : new OSWorkflowProcessInstanceFactory(),
+]
Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessNodeInstanceFactory.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessNodeInstanceFactory.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/OSWorkflowProcessNodeInstanceFactory.conf 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,8 @@
+// we use MVEL to configure our nodes, simply populate a map, which will be added to the main registry
+import org.drools.osworkflow.core.node.StepNode;
+import org.drools.osworkflow.instance.node.StepNodeInstance;
+import org.drools.workflow.instance.impl.factory.ReuseNodeFactory;
+
+[
+ StepNode : new ReuseNodeFactory( StepNodeInstance ),
+]
Added: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/drools.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/drools.rulebase.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/resources/META-INF/drools.rulebase.conf 2008-05-28 23:50:58 UTC (rev 20202)
@@ -0,0 +1,2 @@
+processInstanceFactoryRegistry=OSWorkflowProcessInstanceFactory.conf
+processNodeInstanceFactoryRegistry=OSWorkflowProcessNodeInstanceFactory.conf
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java 2008-05-28 17:46:26 UTC (rev 20201)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/test/java/org/drools/SimpleProcessTest.java 2008-05-28 23:50:58 UTC (rev 20202)
@@ -1,11 +1,16 @@
package org.drools;
+import java.util.Collection;
+import java.util.Collections;
+
import junit.framework.TestCase;
import org.drools.osworkflow.DroolsWorkflow;
+import org.drools.osworkflow.instance.node.StepNodeInstance;
import com.opensymphony.workflow.Workflow;
import com.opensymphony.workflow.config.DefaultConfiguration;
+import com.opensymphony.workflow.spi.Step;
public class SimpleProcessTest extends TestCase {
@@ -14,7 +19,46 @@
DefaultConfiguration config = new DefaultConfiguration();
workflow.setConfiguration(config);
try {
- workflow.initialize("simple", 1, null);
+ 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 2
+ assertEquals("Unexpected available action", 2, availableActions[0]);
+
+ workflow.doAction(workflowId, 2, 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 1
+ currentStep = currentSteps.iterator().next();
+ assertEquals("Unexpected current step", 1, 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 3
+ assertEquals("Unexpected available action", 3, availableActions[0]);
+
+ 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 2
+ currentStep = currentSteps.iterator().next();
+ assertEquals("Unexpected current step", 2, currentStep.getStepId());
+
+ availableActions = workflow.getAvailableActions(workflowId, Collections.EMPTY_MAP);
+ //verify we only have no available action
+ assertEquals("Unexpected number of available actions", 0, availableActions.length);
} catch (Throwable t) {
t.printStackTrace();
fail(t.getMessage());
More information about the jboss-svn-commits
mailing list