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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Aug 20 10:43:31 EDT 2009


Author: KrisVerlaenen
Date: 2009-08-20 10:43:30 -0400 (Thu, 20 Aug 2009)
New Revision: 28996

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
- bpmn2 commit

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java	2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java	2009-08-20 14:43:30 UTC (rev 28996)
@@ -115,9 +115,11 @@
 	    	ProcessInstance processInstance = ( ProcessInstance )
 	    		((ProcessInstance) getProcessInstance()).getWorkingMemory()
 	    			.startProcess(processId, parameters);
-	    	if (!getSubProcessNode().isWaitForCompletion()
-	    	        || processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
+	    	if (!getSubProcessNode().isWaitForCompletion()) {
 	    		triggerCompleted();
+	    	} else if (processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
+	    		handleOutMappings(processInstance);
+	    		triggerCompleted();
 	    	} else {
 	    		this.processInstanceId = processInstance.getId();
 	    	    addProcessListener();
@@ -173,28 +175,32 @@
     
     public void processInstanceCompleted(ProcessInstance processInstance) {
         removeEventListeners();
-        VariableScopeInstance subProcessVariableScopeInstance = (VariableScopeInstance)
-            processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
-        for (Map.Entry<String, String> mapping: getSubProcessNode().getOutMappings().entrySet()) {
-            VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
-                resolveContextInstance(VariableScope.VARIABLE_SCOPE, mapping.getValue());
-            if (variableScopeInstance != null) {
-            	Object value = subProcessVariableScopeInstance.getVariable(mapping.getKey());
-            	if (value == null) {
-            		try {
-                		value = MVEL.eval(mapping.getKey(), new VariableScopeResolverFactory(subProcessVariableScopeInstance));
-                	} catch (Throwable t) {
-                		// do nothing
-                	}
-            	}
-                variableScopeInstance.setVariable(mapping.getValue(), value);
-            } else {
-                System.err.println("Could not find variable scope for variable " + mapping.getValue());
-                System.err.println("when trying to complete SubProcess node " + getSubProcessNode().getName());
-                System.err.println("Continuing without setting variable.");
-            }
-        }
+        handleOutMappings(processInstance);
         triggerCompleted();
     }
+    
+    private void handleOutMappings(ProcessInstance processInstance) {
+        VariableScopeInstance subProcessVariableScopeInstance = (VariableScopeInstance)
+	        processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
+	    for (Map.Entry<String, String> mapping: getSubProcessNode().getOutMappings().entrySet()) {
+	        VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+	            resolveContextInstance(VariableScope.VARIABLE_SCOPE, mapping.getValue());
+	        if (variableScopeInstance != null) {
+	        	Object value = subProcessVariableScopeInstance.getVariable(mapping.getKey());
+	        	if (value == null) {
+	        		try {
+	            		value = MVEL.eval(mapping.getKey(), new VariableScopeResolverFactory(subProcessVariableScopeInstance));
+	            	} catch (Throwable t) {
+	            		// do nothing
+	            	}
+	        	}
+	            variableScopeInstance.setVariable(mapping.getValue(), value);
+	        } else {
+	            System.err.println("Could not find variable scope for variable " + mapping.getValue());
+	            System.err.println("when trying to complete SubProcess node " + getSubProcessNode().getName());
+	            System.err.println("Continuing without setting variable.");
+	        }
+	    }
+    }
 
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2009-08-20 14:43:30 UTC (rev 28996)
@@ -24,6 +24,7 @@
 		addHandler("businessRuleTask", new BusinessRuleTaskHandler());
 		addHandler("callActivity", new CallActivityHandler());
 		addHandler("subProcess", new SubProcessHandler());
+		addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
 
 		addHandler("sequenceFlow", new SequenceFlowHandler());
 		

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java	2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java	2009-08-20 14:43:30 UTC (rev 28996)
@@ -1,5 +1,8 @@
 package org.drools.bpmn2.xml;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.SubProcessNode;
 import org.drools.xml.ExtensibleXmlParser;
@@ -26,7 +29,66 @@
 		if (processId != null) {
 			subProcessNode.setProcessId(processId);
 		}
+		String waitForCompletion = element.getAttribute("waitForCompletion");
+		if (waitForCompletion != null && "false".equals(waitForCompletion)) {
+			subProcessNode.setWaitForCompletion(false);
+		}
+		String independent = element.getAttribute("independent");
+		if (independent != null && "false".equals(independent)) {
+			subProcessNode.setIndependent(false);
+		}
+    	Map<String, String> dataInputs = new HashMap<String, String>();
+    	Map<String, String> dataOutputs = new HashMap<String, String>();
+    	org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+        	String nodeName = xmlNode.getNodeName();
+        	if ("ioSpecification".equals(nodeName)) {
+        		readIoSpecification(xmlNode, dataInputs, dataOutputs);
+        	} else if ("dataInputAssociation".equals(nodeName)) {
+        		readDataInputAssociation(xmlNode, subProcessNode, dataInputs);
+        	} else if ("dataOutputAssociation".equals(nodeName)) {
+        		readDataOutputAssociation(xmlNode, subProcessNode, dataOutputs);
+        	}
+    		xmlNode = xmlNode.getNextSibling();
+        }
 	}
+    
+    protected void readIoSpecification(org.w3c.dom.Node xmlNode, Map<String, String> dataInputs, Map<String, String> dataOutputs) {
+    	org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+		while (subNode instanceof Element) {
+			String subNodeName = subNode.getNodeName();
+        	if ("dataInput".equals(subNodeName)) {
+        		String id = ((Element) subNode).getAttribute("id");
+        		String inputName = ((Element) subNode).getAttribute("name");
+        		dataInputs.put(id, inputName);
+        	} else if ("dataOutput".equals(subNodeName)) {
+        		String id = ((Element) subNode).getAttribute("id");
+        		String outputName = ((Element) subNode).getAttribute("name");
+        		dataOutputs.put(id, outputName);
+        	}
+        	subNode = subNode.getNextSibling();
+		}
+    }
+    
+    protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, SubProcessNode subProcessNode, Map<String, String> dataInputs) {
+		// sourceRef
+		org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+		String from = subNode.getTextContent();
+		// targetRef
+		subNode = subNode.getNextSibling();
+		String to = subNode.getTextContent();
+		subProcessNode.addInMapping(dataInputs.get(to), from);
+    }
+    
+    protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, SubProcessNode subProcessNode, Map<String, String> dataOutputs) {
+		// sourceRef
+		org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+		String from = subNode.getTextContent();
+		// targetRef
+		subNode = subNode.getNextSibling();
+		String to = subNode.getTextContent();
+		subProcessNode.addOutMapping(dataOutputs.get(from), to);
+    }
 
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
 		SubProcessNode subProcessNode = (SubProcessNode) node;
@@ -34,7 +96,50 @@
 		if (subProcessNode.getProcessId() != null) {
 			xmlDump.append("calledElement=\"" + subProcessNode.getProcessId() + "\" ");
 		}
-		endNode(xmlDump);
+		if (!subProcessNode.isWaitForCompletion()) {
+			xmlDump.append("tns:waitForCompletion=\"false\" ");
+		}
+		if (!subProcessNode.isIndependent()) {
+			xmlDump.append("tns:independent=\"false\" ");
+		}
+		xmlDump.append(">" + EOL);
+		writeIO(subProcessNode, xmlDump);
+		endNode("callActivity", xmlDump);
 	}
 
+	protected void writeIO(SubProcessNode subProcessNode, StringBuilder xmlDump) {
+		xmlDump.append("      <ioSpecification>" + EOL);
+		for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
+			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+		}
+		for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
+			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+		}
+		xmlDump.append("        <inputSet>" + EOL);
+		for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
+			xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+		}
+		xmlDump.append("        </inputSet>" + EOL);
+		xmlDump.append("        <outputSet>" + EOL);
+		for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
+			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+		}
+		xmlDump.append("        </outputSet>" + EOL);
+		xmlDump.append("      </ioSpecification>" + EOL);
+		for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
+			xmlDump.append("      <dataInputAssociation>" + EOL);
+			xmlDump.append(
+				"        <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
+				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+			xmlDump.append("      </dataInputAssociation>" + EOL);
+		}
+		for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
+			xmlDump.append("      <dataOutputAssociation>" + EOL);
+			xmlDump.append(
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+				"        <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
+			xmlDump.append("      </dataOutputAssociation>" + EOL);
+		}
+	}
+
 }
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java	2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,84 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.process.core.event.EventFilter;
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.SubProcessNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class IntermediateCatchEventHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new EventNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return EventNode.class;
+    }
+
+    protected void handleNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+    	super.handleNode(node, element, uri, localName, parser);
+    	EventNode eventNode = (EventNode) node;
+    	org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+        	String nodeName = xmlNode.getNodeName();
+        	if ("dataOutputAssociation".equals(nodeName)) {
+        		readDataOutputAssociation(xmlNode, eventNode);
+        	} else if ("signalEventDefinition".equals(nodeName)) {
+        		String type = ((Element) xmlNode).getAttribute("signalRef");
+        		if (type != null && type.trim().length() > 0) {
+        			List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                	EventTypeFilter eventFilter = new EventTypeFilter();
+                	eventFilter.setType(type);
+                	eventFilters.add(eventFilter);
+                    eventNode.setEventFilters(eventFilters);
+        		}
+        	}
+    		xmlNode = xmlNode.getNextSibling();
+        }
+	}
+    
+    protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, EventNode eventNode) {
+		// sourceRef
+		org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+		// targetRef
+		subNode = subNode.getNextSibling();
+		String to = subNode.getTextContent();
+		eventNode.setVariableName(to);
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		EventNode eventNode = (EventNode) node;
+		writeNode("intermediateCatchEvent", eventNode, xmlDump, includeMeta);
+		xmlDump.append(">" + EOL);
+		if (eventNode.getVariableName() != null) {
+			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL);
+			xmlDump.append("      <dataOutputAssociation>" + EOL);
+			xmlDump.append(
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
+				"        <targetRef>" + eventNode.getVariableName() + "</targetRef>" + EOL);
+			xmlDump.append("      </dataOutputAssociation>" + EOL);
+			xmlDump.append("        <outputSet>" + EOL);
+			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL);
+			xmlDump.append("        </outputSet>" + EOL);
+		}
+		if (eventNode.getEventFilters().size() > 0) {
+			String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
+			xmlDump.append("        <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+			
+		}
+		endNode("intermediateCatchEvent", xmlDump);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	2009-08-20 14:43:30 UTC (rev 28996)
@@ -92,9 +92,7 @@
 		// targetRef
 		subNode = subNode.getNextSibling();
 		String to = subNode.getTextContent();
-		workItemNode.addOutMapping(
-			from.substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2),
-			dataOutputs.get(to).substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2));
+		workItemNode.addOutMapping(dataOutputs.get(from), to);
     }
 
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
@@ -146,8 +144,8 @@
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
 			xmlDump.append("      <dataInputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</targetRef>" + EOL);
+				"        <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
+				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
 			xmlDump.append("      </dataInputAssociation>" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
@@ -166,8 +164,8 @@
 		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
 			xmlDump.append("      <dataOutputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</targetRef>" + EOL);
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+				"        <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
 			xmlDump.append("      </dataOutputAssociation>" + EOL);
 		}
 	}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf	2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf	2009-08-20 14:43:30 UTC (rev 28996)
@@ -14,5 +14,6 @@
 businessRuleTask=org.drools.bpmn2.xml.BusinessRuleTaskHandler
 callActivity=org.drools.bpmn2.xml.CallActivityHandler
 subProcess=org.drools.bpmn2.xml.SubProcessHandler
+intermediateCatchEvent=org.drools.bpmn2.xml.IntermediateCatchEventHandler
 
 sequenceFlow=org.drools.bpmn2.xml.SequenceFlowHandler
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2009-08-20 14:43:30 UTC (rev 28996)
@@ -14,21 +14,27 @@
 import org.drools.builder.ResourceType;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.io.ResourceFactory;
+import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
 import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
 import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
 
 public class SimpleBPMNProcessTest extends TestCase {
 
 	public void testMinimalProcess() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcess.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-		ksession.startProcess("Minimal");
+		ProcessInstance processInstance = ksession.startProcess("Minimal");
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
 	public void testMinimalProcessWithGraphical() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcessWithGraphical.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-		ksession.startProcess("Minimal");
+		ProcessInstance processInstance = ksession.startProcess("Minimal");
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
 	public void testEvaluationProcess() throws Exception {
@@ -38,7 +44,8 @@
 		ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler());
 		Map<String, Object> params = new HashMap<String, Object>();
 		params.put("employee", "UserId-12345");
-		ksession.startProcess("Evaluation", params);
+		ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
 	public void testEvaluationProcess2() throws Exception {
@@ -47,7 +54,8 @@
 		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
 		Map<String, Object> params = new HashMap<String, Object>();
 		params.put("employee", "UserId-12345");
-		ksession.startProcess("com.sample.evaluation", params);
+		ProcessInstance processInstance = ksession.startProcess("com.sample.evaluation", params);
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
 	public void testEvaluationProcess3() throws Exception {
@@ -57,7 +65,8 @@
 		ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler());
 		Map<String, Object> params = new HashMap<String, Object>();
 		params.put("employee", "john2");
-		ksession.startProcess("Evaluation", params);
+		ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
 	public void testExclusiveSplit() throws Exception {
@@ -67,15 +76,50 @@
 		Map<String, Object> params = new HashMap<String, Object>();
 		params.put("x", "First");
 		params.put("y", "Second");
-		ksession.startProcess("com.sample.test", params);
+		ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
+	public void testCallActivity() throws Exception {
+		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+		((PackageBuilderConfiguration) conf).initSemanticModules();
+		((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.xml"), ResourceType.DRF);
+		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.xml"), ResourceType.DRF);
+		if (!kbuilder.getErrors().isEmpty()) {
+			for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+				System.err.println(error);
+			}
+			throw new IllegalArgumentException("Errors while parsing knowledge base");
+		}
+		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("x", "oldValue");
+		ProcessInstance processInstance = ksession.startProcess("ParentProcess", params);
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+		assertEquals("new value", ((WorkflowProcessInstance) processInstance).getVariable("y"));
+	}
+
 	public void testSubProcess() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-SubProcess.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
-		ksession.startProcess("SubProcess");
+		ProcessInstance processInstance = ksession.startProcess("SubProcess");
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
+	public void testIntermediateCatchEvent() throws Exception {
+		KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEvent.xml");
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
+		ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+		// now signal process instance
+		processInstance.signalEvent("MyMessage", "SomeValue");
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+	}
+
 	private KnowledgeBase createKnowledgeBase(String process) throws Exception {
 		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
 		((PackageBuilderConfiguration) conf).initSemanticModules();

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml	2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+  <itemDefinition id="yType" structureRef="java.lang.String" />
+  
+  <process id="ParentProcess" name="Parent Process">
+    <property id="x" itemSubjectRef="tns:xType" />
+    <property id="y" itemSubjectRef="tns:yType" />
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <callActivity id="_2" name="CallActivity" calledElement="SubProcess">
+      <ioSpecification>
+        <dataInput id="_2_subXInput" name="subX" />
+        <dataOutput id="_2_subYOutput" name="subY" />
+        <inputSet>
+          <dataInputRefs>_2_subXInput</dataInputRefs>
+        </inputSet>
+        <outputSet>
+          <dataOutputRefs>_2_subYOutput</dataOutputRefs>
+        </outputSet>
+      </ioSpecification>
+      <dataInputAssociation>
+        <sourceRef>x</sourceRef>
+        <targetRef>_2_subXInput</targetRef>
+      </dataInputAssociation>
+      <dataOutputAssociation>
+        <sourceRef>_2_subYOutput</sourceRef>
+        <targetRef>y</targetRef>
+      </dataOutputAssociation>
+    </callActivity>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess"/>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml	2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="subXType" structureRef="java.lang.String" />
+  <itemDefinition id="subYType" structureRef="java.lang.String" />
+  
+  <process id="SubProcess" name="Sub Process">
+    <property id="subX" itemSubjectRef="tns:subXType" />
+    <property id="subY" itemSubjectRef="tns:subYType" />
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <scriptTask id="_2" name="Hello">
+      <script>System.out.println("subX=" + subX);
+kcontext.setVariable("subY", "new value");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess"/>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml	2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+
+  <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <userTask id="_2" name="UserTask">
+    </userTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess"/>
+    
+    <intermediateCatchEvent id="_4">
+      <dataOutput id="_4_Output" name="event" />
+      <dataOutputAssociation>
+        <sourceRef>_4_Output</sourceRef>
+        <targetRef>x</targetRef>
+      </dataOutputAssociation>
+      <outputSet>
+        <dataOutputRefs>_4_Output</dataOutputRefs>
+      </outputSet>
+      <signalEventDefinition signalRef="MyMessage" />
+    </intermediateCatchEvent>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <scriptTask id="_5" name="Event">
+      <script>System.out.println(x);</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <endEvent id="_6" name="EndProcess"/>
+    
+  </process>
+</definitions>



More information about the jboss-svn-commits mailing list