[jboss-svn-commits] JBL Code SVN: r32430 - in labs/jbossrules/trunk/drools-process/drools-bpmn2/src: test/java/org/drools/bpmn2 and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Apr 5 19:16:17 EDT 2010


Author: KrisVerlaenen
Date: 2010-04-05 19:16:16 -0400 (Mon, 05 Apr 2010)
New Revision: 32430

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl
Modified:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
Log:
 - extended BPMN2 implementation

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java	2010-04-05 23:16:16 UTC (rev 32430)
@@ -32,6 +32,21 @@
             final String localName, final ExtensibleXmlParser parser) throws SAXException {
     	super.handleNode(node, element, uri, localName, parser);
     	DynamicNode dynamicNode = (DynamicNode) node;
+    	String cancelRemainingInstances = element.getAttribute("cancelRemainingInstances");
+    	if ("false".equals(cancelRemainingInstances)) {
+    		dynamicNode.setCancelRemainingInstances(false);
+    	}
+    	org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+        	String nodeName = xmlNode.getNodeName();
+        	if ("completionCondition".equals(nodeName)) {
+        		String expression = xmlNode.getTextContent();
+        		if ("getActivityInstanceAttribute(\"numberOfActiveInstances\") == 0".equals(expression)) {
+        			dynamicNode.setAutoComplete(true);
+        		}
+        	}
+        	xmlNode = xmlNode.getNextSibling();
+        }
     	List<SequenceFlow> connections = (List<SequenceFlow>)
 			dynamicNode.getMetaData(ProcessHandler.CONNECTIONS);
     	ProcessHandler.linkConnections(dynamicNode, connections);
@@ -41,6 +56,9 @@
     public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
         DynamicNode dynamicNode = (DynamicNode) node;
 		writeNode("adHocSubProcess", dynamicNode, xmlDump, includeMeta);
+		if (!dynamicNode.isCancelRemainingInstances()) {
+			xmlDump.append(" cancelRemainingInstances=\"false\"");
+		}
 		xmlDump.append(" ordering=\"parallel\" >" + EOL);
 		// nodes
 		List<Node> subNodes = getSubNodes(dynamicNode);
@@ -54,6 +72,9 @@
         for (Connection connection: connections) {
         	XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
         }
+        if (dynamicNode.isAutoComplete()) {
+        	xmlDump.append("    <completionCondition xs:type=\"tFormalExpression\">getActivityInstanceAttribute(\"numberOfActiveInstances\") == 0</completionCondition>" + EOL);
+        }
 		endNode("adHocSubProcess", xmlDump);
 	}
 

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2010-04-05 23:16:16 UTC (rev 32430)
@@ -48,6 +48,7 @@
 		final String sourceRef = attrs.getValue("sourceRef");
 		final String targetRef = attrs.getValue("targetRef");
 		final String bendpoints = attrs.getValue("g:bendpoints");
+		final String name = attrs.getValue("name");
 
 		NodeContainer nodeContainer = (NodeContainer) parser.getParent();
 		
@@ -69,6 +70,7 @@
 		}
 		SequenceFlow connection = new SequenceFlow(id, sourceRef, targetRef);
 		connection.setBendpoints(bendpoints);
+		connection.setName(name);
 		
 		connections.add(connection);
 
@@ -98,11 +100,6 @@
         			    throw new IllegalArgumentException("Unknown language " + language);
         			}
         		}
-        		org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
-        		if (nameNode != null) {
-        			String name = nameNode.getNodeValue();
-        			sequenceFlow.setName(name);
-        		}
         		sequenceFlow.setExpression(expression);
         	}
         	xmlNode = xmlNode.getNextSibling();

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-04-05 23:16:16 UTC (rev 32430)
@@ -350,11 +350,15 @@
         	Split split = (Split) connection.getFrom();
         	if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
         		Constraint constraint = split.getConstraint(connection);
-        		xmlDump.append(">" + EOL +
-    				"      <conditionExpression xs:type=\"tFormalExpression\" ");
         		if (constraint == null) {
-        		    xmlDump.append("/>");
+            		xmlDump.append(">" + EOL +
+    					"      <conditionExpression xs:type=\"tFormalExpression\" />");
         		} else {
+                    if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
+            			xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
+            		}
+            		xmlDump.append(">" + EOL +
+    				"      <conditionExpression xs:type=\"tFormalExpression\" ");
                     if ("code".equals(constraint.getType())) {
                         if (JavaDialect.ID.equals(constraint.getDialect())) {
                             xmlDump.append("language=\"" + JAVA_LANGUAGE + "\" ");
@@ -364,9 +368,6 @@
                     } else {
                         xmlDump.append("language=\"" + RULE_LANGUAGE + "\" ");
                     }
-                    if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
-            			xmlDump.append("tns:name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
-            		}
                     String constraintString = constraint.getConstraint();
                     if (constraintString == null) {
                         constraintString = "";

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java	2010-04-05 23:16:16 UTC (rev 32430)
@@ -15,7 +15,8 @@
 public class BPMN2XMLTest extends XMLTestCase {
 	
 	private static final String[] processes = {
-		"BPMN2-SimpleXMLProcess.xml"
+		"BPMN2-SimpleXMLProcess.xml",
+//		"BPMN2-MinimalProcess.xml",
 	};
 	
 	public void setUp() throws Exception {

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	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-04-05 23:16:16 UTC (rev 32430)
@@ -254,19 +254,84 @@
     }
 
     public void testAdHocSubProcess() throws Exception {
-        KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocSubProcess.xml");
+		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+		((PackageBuilderConfiguration) conf).initSemanticModules();
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+		((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
+        ((PackageBuilderConfiguration) conf).addDialect("XPath", new XPathDialectConfiguration());
+		XmlProcessReader processReader = new XmlProcessReader(
+	        ((PackageBuilderConfiguration) conf).getSemanticModules());
+		RuleFlowProcess p = (RuleFlowProcess)
+		    processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/BPMN2-AdHocSubProcess.xml"));
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+		System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+		kbuilder.add(ResourceFactory.newReaderResource(
+            new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
+		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-AdHocSubProcess.drl"), ResourceType.DRL);
+		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();
         TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
         ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
         ProcessInstance processInstance = ksession.startProcess("AdHocSubProcess");
         assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
         WorkItem workItem = workItemHandler.getWorkItem();
+        assertNull(workItem);
+        ksession.fireAllRules();
+        System.out.println("Signaling Hello2");
+        processInstance.signalEvent("Hello2", null);
+        workItem = workItemHandler.getWorkItem();
         assertNotNull(workItem);
         ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+//        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
+    public void testAdHocSubProcessAutoComplete() throws Exception {
+		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+		((PackageBuilderConfiguration) conf).initSemanticModules();
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+		((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
+        ((PackageBuilderConfiguration) conf).addDialect("XPath", new XPathDialectConfiguration());
+		XmlProcessReader processReader = new XmlProcessReader(
+	        ((PackageBuilderConfiguration) conf).getSemanticModules());
+		RuleFlowProcess p = (RuleFlowProcess)
+		    processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/BPMN2-AdHocSubProcessAutoComplete.xml"));
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+		System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+		kbuilder.add(ResourceFactory.newReaderResource(
+            new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
+		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-AdHocSubProcess.drl"), ResourceType.DRL);
+		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();
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+        ProcessInstance processInstance = ksession.startProcess("AdHocSubProcess");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        WorkItem workItem = workItemHandler.getWorkItem();
+        assertNull(workItem);
+        ksession.fireAllRules();
+        workItem = workItemHandler.getWorkItem();
+        assertNotNull(workItem);
+        ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
         assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
     }
-
-	public void testIntermediateCatchEventSignal() throws Exception {
+    
+    public void testIntermediateCatchEventSignal() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventSignal.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl	2010-04-05 23:16:16 UTC (rev 32430)
@@ -0,0 +1,9 @@
+package org.drools.bpmn2
+
+import org.drools.runtime.process.ProcessContext
+
+rule "Auto-activate Hello1" ruleflow-group "Hello"
+  when
+  then
+    drools.getContext(ProcessContext.class).getProcessInstance().signalEvent("Hello1", null);
+end
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml	2010-04-05 23:16:16 UTC (rev 32430)
@@ -0,0 +1,27 @@
+<?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">
+
+  <process id="AdHocSubProcess" name="AdHoc SubProcess">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <adHocSubProcess id="_2" name="Hello" >
+      <userTask id="_2-1" name="Hello1"/>
+      <completionCondition xs:type="tFormalExpression">getActivityInstanceAttribute("numberOfActiveInstances") == 0</completionCondition>
+    </adHocSubProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <scriptTask id="_3" name="Goodbye">
+      <script>System.out.println("Goodbye World");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_3" targetRef="_4"/>
+    <endEvent id="_4" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml	2010-04-05 23:16:16 UTC (rev 32430)
@@ -67,7 +67,12 @@
         <targetRef>_2_PriorityInput</targetRef>
       </dataInputAssociation>
       <dataInputAssociation>
-        <assignment>
+        <assignment>org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
+        		if (nameNode != null) {
+        			String name = nameNode.getNodeValue();
+        			sequenceFlow.setName(name);
+        		}
+        		
           <from xs:type="tFormalExpression"></from>
           <to xs:type="tFormalExpression">_2_ContentInput</to>
         </assignment>
@@ -126,7 +131,12 @@
         </assignment>
         <sourceRef>_4_TaskName</sourceRef>
         <targetRef>_4_TaskNameInput</targetRef>
-      </dataInputAssociation>
+      </dataInputAssociation>org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
+        		if (nameNode != null) {
+        			String name = nameNode.getNodeValue();
+        			sequenceFlow.setName(name);
+        		}
+        		
       <dataInputAssociation>
         <assignment>
           <from xs:type="tFormalExpression">1</from>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml	2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml	2010-04-05 23:16:16 UTC (rev 32430)
@@ -86,10 +86,10 @@
 
     <!-- connections -->
     <sequenceFlow sourceRef="_1" targetRef="_2" />
-    <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[120,40]" >
+    <sequenceFlow sourceRef="_2" targetRef="_3" name="First" g:bendpoints="[120,40]" >
       <conditionExpression>return x == "First";</conditionExpression>
     </sequenceFlow>
-    <sequenceFlow sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" >
+    <sequenceFlow sourceRef="_2" targetRef="_4" name="Second" g:bendpoints="[120,120]" >
       <conditionExpression>return x == "Second";</conditionExpression>
     </sequenceFlow>
     <sequenceFlow sourceRef="_3" targetRef="_5" g:bendpoints="[313,40]" />

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl	2010-04-05 23:16:16 UTC (rev 32430)
@@ -0,0 +1,8 @@
+package org.drools.bpmn2;
+
+rule "Start Hello1" ruleflow-group "Hello"
+  when
+    Person( age > 20 )
+  then
+    ksession.getKnowledgeSession().signalEvent("Hello1", null);
+end
\ No newline at end of file



More information about the jboss-svn-commits mailing list