[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