[jboss-svn-commits] JBL Code SVN: r28962 - in labs/jbossrules/trunk: drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core and 9 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 17 10:42:18 EDT 2009


Author: KrisVerlaenen
Date: 2009-08-17 10:42:17 -0400 (Mon, 17 Aug 2009)
New Revision: 28962

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.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/ComplexGatewayHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java
   labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.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/JoinHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.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/SplitHandler.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/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.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
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
Log:
- bpmn2 commit

Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd	2009-08-17 14:42:17 UTC (rev 28962)
@@ -532,7 +532,6 @@
 			<xs:attribute name="y" type="xs:string"/>
 			<xs:attribute name="width" type="xs:string"/>
 			<xs:attribute name="height" type="xs:string"/>
-			<xs:attribute name="type" type="xs:string"/>
 		</xs:complexType>
 	</xs:element>
 	<xs:element name="dynamic">

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -29,6 +29,8 @@
  */
 public class EndNodeWrapper extends AbstractNodeWrapper {
 
+	public static final int CHANGE_TERMINATE = 5;
+
     public static final String TERMINATE = "terminate";
 
     private static final long serialVersionUID = 400L;
@@ -64,6 +66,7 @@
     public void resetPropertyValue(Object id) {
         if (TERMINATE.equals(id)) {
             getEndNode().setTerminate(true);
+            notifyListeners(CHANGE_TERMINATE);
         } else {
             super.resetPropertyValue(id);
         }
@@ -72,6 +75,7 @@
     public void setPropertyValue(Object id, Object value) {
         if (TERMINATE.equals(id)) {
             getEndNode().setTerminate(((Integer) value).intValue() == 0);
+            notifyListeners(CHANGE_TERMINATE);
         } else {
             super.setPropertyValue(id, value);
         }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -16,8 +16,12 @@
  */
 
 import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.core.ModelEvent;
 import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
 import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.core.EndNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.JoinWrapper;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.JoinEditPart.JoinFigureInterface;
 import org.drools.eclipse.flow.ruleflow.skin.SkinManager;
 import org.drools.eclipse.flow.ruleflow.skin.SkinProvider;
 import org.drools.eclipse.preferences.IDroolsConstants;
@@ -51,7 +55,25 @@
     	return result;
     }
 
-    public static class EndNodeFigure extends AbstractElementFigure {
+    public void modelChanged(ModelEvent event) {
+        if (event.getChange() == EndNodeWrapper.CHANGE_TERMINATE) {
+            refreshVisuals();
+        } else {
+        	super.modelChanged(event);
+        }
+    }
+    
+    protected void refreshVisuals() {
+    	super.refreshVisuals();
+    	boolean terminate = ((EndNodeWrapper) getModel()).getEndNode().isTerminate();
+		((EndNodeFigureInterface) getFigure()).setTerminate(terminate);
+    }
+    
+    public static interface EndNodeFigureInterface extends IFigure {
+    	void setTerminate(boolean terminate);
+    }
+
+    public static class EndNodeFigure extends AbstractElementFigure implements EndNodeFigureInterface {
         
         private static final Image icon = ImageDescriptor.createFromURL(
         	DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_stop.gif")).createImage();
@@ -66,6 +88,11 @@
             ((LineBorder) getBorder()).setWidth(b ? 3 : 1);
             repaint();
         }
+        
+		public void setTerminate(boolean terminate) {
+			// Do nothing
+		}
+
     }
 
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -2,12 +2,13 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.EndNodeEditPart.EndNodeFigureInterface;
 import org.eclipse.draw2d.LineBorder;
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 
-public class BPMNEndNodeFigure extends AbstractElementFigure {
+public class BPMNEndNodeFigure extends AbstractElementFigure implements EndNodeFigureInterface {
     
     private static final Image icon = ImageDescriptor.createFromURL(
     	DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/large/end_terminate.png")).createImage();
@@ -34,4 +35,8 @@
         repaint();
     }
     
+	public void setTerminate(boolean terminate) {
+		// Do nothing
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -2,15 +2,18 @@
 
 import org.drools.eclipse.DroolsEclipsePlugin;
 import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.EndNodeEditPart.EndNodeFigureInterface;
 import org.eclipse.draw2d.LineBorder;
 import org.eclipse.draw2d.geometry.Rectangle;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 
-public class BPMNEndNodeFigure extends AbstractElementFigure {
+public class BPMNEndNodeFigure extends AbstractElementFigure implements EndNodeFigureInterface {
     
-    private static final Image icon = ImageDescriptor.createFromURL(
+    private static final Image ICON_TERMINATE = ImageDescriptor.createFromURL(
     	DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn2/large/end_terminate.png")).createImage();
+    private static final Image ICON_EMPTY = ImageDescriptor.createFromURL(
+        	DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn2/large/end_empty.png")).createImage();
         
     public BPMNEndNodeFigure() {
     	setSize(48, 48);
@@ -25,7 +28,7 @@
     }
     
     protected void customizeFigure() {
-        setIcon(icon);
+        setIcon(ICON_TERMINATE);
     }
     
     public void setSelected(boolean b) {
@@ -34,4 +37,8 @@
         repaint();
     }
     
+	public void setTerminate(boolean terminate) {
+    	setIcon(terminate ? ICON_TERMINATE : ICON_EMPTY);
+	}
+
 }

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -58,7 +58,7 @@
     }
     
 	protected String getLabelText(Object value) {
-    	if (actionNode == null || actionNode.getAction() == null) {
+    	if (actionNode == null || actionNode.getAction() == null || actionNode.getAction().toString() == null) {
     		return "";
     	}
         return actionNode.getAction().toString();

Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template	2009-08-17 14:42:17 UTC (rev 28962)
@@ -16,7 +16,7 @@
     <!-- process variables -->
 
     <!-- nodes -->
-    <startEvent id="StartProcess" g:x="16" g:y="16" g:width="48" g:height="48" />
+    <startEvent id="_1" name="StartProcess" g:x="16" g:y="16" g:width="48" g:height="48" />
 
     <!-- connections -->
 

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -47,7 +47,7 @@
         // remove starting _
         id = id.substring(1);
         // remove ids of parent nodes
-        id = id.substring(id.lastIndexOf(":") + 1);
+        id = id.substring(id.lastIndexOf("-") + 1);
         final String name = attrs.getValue("name");
         node.setName(name);
         node.setId(new Integer(id));
@@ -108,7 +108,7 @@
     protected void writeNode(final String name, final Node node, 
     		                 final StringBuilder xmlDump, boolean includeMeta) {
     	xmlDump.append("    <" + name + " "); 
-        xmlDump.append("id=\"_" + node.getUniqueId() + "\" ");
+        xmlDump.append("id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "\" ");
         if (node.getName() != null) {
             xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(node.getName()) + "\" ");
         }

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-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -17,9 +17,13 @@
 		addHandler("endEvent", new EndEventHandler());
 		addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
 		addHandler("parallelGateway", new ParallelGatewayHandler());
+		addHandler("complexGateway", new ComplexGatewayHandler());
 		addHandler("scriptTask", new ScriptTaskHandler());
 		addHandler("task", new TaskHandler());
 		addHandler("userTask", new UserTaskHandler());
+		addHandler("businessRuleTask", new BusinessRuleTaskHandler());
+		addHandler("callActivity", new CallActivityHandler());
+		addHandler("subProcess", new SubProcessHandler());
 
 		addHandler("sequenceFlow", new SequenceFlowHandler());
 		

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.RuleSetNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class BusinessRuleTaskHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new RuleSetNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return RuleSetNode.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);
+        RuleSetNode ruleSetNode = (RuleSetNode) node;
+		String ruleFlowGroup = element.getAttribute("ruleFlowGroup");
+		if (ruleFlowGroup != null) {
+			ruleSetNode.setRuleFlowGroup(ruleFlowGroup);
+		}
+	}
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		RuleSetNode ruleSetNode = (RuleSetNode) node;
+		writeNode("businessRuleTask", ruleSetNode, xmlDump, includeMeta);
+		if (ruleSetNode.getRuleFlowGroup() != null) {
+			xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" ");
+		}
+		endNode(xmlDump);
+	}
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+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 CallActivityHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new SubProcessNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return SubProcessNode.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);
+    	SubProcessNode subProcessNode = (SubProcessNode) node;
+		String processId = element.getAttribute("calledElement");
+		if (processId != null) {
+			subProcessNode.setProcessId(processId);
+		}
+	}
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		SubProcessNode subProcessNode = (SubProcessNode) node;
+		writeNode("callActivity", subProcessNode, xmlDump, includeMeta);
+		if (subProcessNode.getProcessId() != null) {
+			xmlDump.append("calledElement=\"" + subProcessNode.getProcessId() + "\" ");
+		}
+		endNode(xmlDump);
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,35 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class ComplexGatewayHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        final String type = attrs.getValue("gatewayDirection");
+        if ("converging".equals(type)) {
+        	Join join = new Join();
+        	join.setType(Join.TYPE_UNDEFINED);
+        	return join;
+        } else if ("diverging".equals(type)) {
+        	Split split = new Split();
+        	split.setType(Split.TYPE_UNDEFINED);
+        	return split;
+        } else {
+        	throw new IllegalArgumentException(
+    			"Unknown gateway direction: " + type);
+        }
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		throw new IllegalArgumentException("Writing out should be handled by split / join handler");
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -25,7 +25,7 @@
 				writeNode("exclusiveGateway", node, xmlDump, includeMeta);
 				break;
 			default:
-				throw new IllegalArgumentException("Unsupported join type: " + join.getType());
+				writeNode("complexGateway", node, xmlDump, includeMeta);
 		}
 		xmlDump.append("gatewayDirection=\"converging\" ");
 		endNode(xmlDump);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -5,6 +5,7 @@
 
 import org.drools.bpmn2.core.SequenceFlow;
 import org.drools.definition.process.Node;
+import org.drools.definition.process.NodeContainer;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Constraint;
@@ -55,11 +56,14 @@
 		return process;
 	}
 
+	@SuppressWarnings("unchecked")
 	public Object end(final String uri, final String localName,
 			          final ExtensibleXmlParser parser) throws SAXException {
 		parser.endElementBuilder();
 		RuleFlowProcess process = (RuleFlowProcess) parser.getCurrent();
-		linkConnections(process);
+		List<SequenceFlow> connections = (List<SequenceFlow>)
+			process.getMetaData(CONNECTIONS);
+		linkConnections(process, connections);
 		return process;
 	}
 
@@ -67,9 +71,7 @@
 		return org.drools.definition.process.Process.class;
 	}
 	
-	@SuppressWarnings("unchecked")
-	private void linkConnections(RuleFlowProcess process) {
-		List<SequenceFlow> connections = (List<SequenceFlow>) process.getMetaData(CONNECTIONS);
+	public static void linkConnections(NodeContainer nodeContainer, List<SequenceFlow> connections) {
 		if (connections != null) {
 			for (SequenceFlow connection: connections) {
 				String sourceRef = connection.getSourceRef();
@@ -78,10 +80,10 @@
 				sourceRef = sourceRef.substring(1);
 				targetRef = targetRef.substring(1);
 		        // remove ids of parent nodes
-				sourceRef = sourceRef.substring(sourceRef.lastIndexOf(":") + 1);
-				targetRef = targetRef.substring(targetRef.lastIndexOf(":") + 1);
-				Node source = process.getNode(new Integer(sourceRef));
-				Node target = process.getNode(new Integer(targetRef));
+				sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
+				targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
+				Node source = nodeContainer.getNode(new Integer(sourceRef));
+				Node target = nodeContainer.getNode(new Integer(targetRef));
 				Connection result = new ConnectionImpl(
 					source, NodeImpl.CONNECTION_DEFAULT_TYPE, 
 					target, NodeImpl.CONNECTION_DEFAULT_TYPE);

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	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -9,6 +9,7 @@
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.CompositeNode;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
 import org.drools.xml.Handler;
@@ -47,13 +48,23 @@
 		final String targetRef = attrs.getValue("targetRef");
 		final String bendpoints = attrs.getValue("g:bendpoints");
 
-		RuleFlowProcess process = (RuleFlowProcess) parser.getParent();
+		NodeContainer nodeContainer = (NodeContainer) parser.getParent();
 		
-		List<SequenceFlow> connections = (List<SequenceFlow>)
-			process.getMetaData(ProcessHandler.CONNECTIONS);
-		if (connections == null) {
-			connections = new ArrayList<SequenceFlow>();
-			process.setMetaData(ProcessHandler.CONNECTIONS, connections);
+		List<SequenceFlow> connections = null;
+		if (nodeContainer instanceof RuleFlowProcess) {
+			connections = (List<SequenceFlow>)
+				((RuleFlowProcess) nodeContainer).getMetaData(ProcessHandler.CONNECTIONS);			
+			if (connections == null) {
+				connections = new ArrayList<SequenceFlow>();
+				((RuleFlowProcess) nodeContainer).setMetaData(ProcessHandler.CONNECTIONS, connections);
+			}
+		} else if (nodeContainer instanceof CompositeNode) {
+			connections = (List<SequenceFlow>)
+				((CompositeNode) nodeContainer).getMetaData(ProcessHandler.CONNECTIONS);			
+			if (connections == null) {
+				connections = new ArrayList<SequenceFlow>();
+				((CompositeNode) nodeContainer).setMetaData(ProcessHandler.CONNECTIONS, connections);
+			}
 		}
 		SequenceFlow connection = new SequenceFlow(sourceRef, targetRef);
 		connection.setBendpoints(bendpoints);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -25,7 +25,7 @@
 				writeNode("exclusiveGateway", node, xmlDump, includeMeta);
 				break;
 			default:
-				throw new IllegalArgumentException("Unsupported split type: " + split.getType());
+				writeNode("complexGateway", node, xmlDump, includeMeta);
 		}
 		xmlDump.append("gatewayDirection=\"diverging\" ");
 		endNode(xmlDump);

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,89 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.definition.process.Connection;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.CompositeContextNode;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class SubProcessHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+    	CompositeContextNode result = new CompositeContextNode();
+        VariableScope variableScope = new VariableScope();
+        result.addContext(variableScope);
+        result.setDefaultContext(variableScope);
+        return result;
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return CompositeContextNode.class;
+    }
+
+    @SuppressWarnings("unchecked")
+	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);
+    	CompositeContextNode compositeNode = (CompositeContextNode) node;
+    	List<SequenceFlow> connections = (List<SequenceFlow>)
+			compositeNode.getMetaData(ProcessHandler.CONNECTIONS);
+    	ProcessHandler.linkConnections(compositeNode, connections);
+    }
+    
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+    	CompositeContextNode compositeNode = (CompositeContextNode) node;
+		writeNode("subProcess", compositeNode, xmlDump, includeMeta);
+		xmlDump.append(" >" + EOL);
+		// nodes
+		List<Node> subNodes = getSubNodes(compositeNode);
+    	xmlDump.append("    <!-- nodes -->" + EOL);
+        for (Node subNode: subNodes) {
+    		XmlBPMNProcessDumper.INSTANCE.visitNode(subNode, xmlDump, includeMeta);
+        }
+        // connections
+        List<Connection> connections = getSubConnections(compositeNode);
+    	xmlDump.append("    <!-- connections -->" + EOL);
+        for (Connection connection: connections) {
+        	XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
+        }
+		endNode("subProcess", xmlDump);
+	}
+	
+	protected List<Node> getSubNodes(CompositeNode compositeNode) {
+    	List<Node> subNodes =
+    		new ArrayList<Node>();
+        for (org.drools.definition.process.Node subNode: compositeNode.getNodes()) {
+        	// filter out composite start and end nodes as they can be regenerated
+        	if ((!(subNode instanceof CompositeNode.CompositeNodeStart)) &&
+    			(!(subNode instanceof CompositeNode.CompositeNodeEnd))) {
+        		subNodes.add((Node) subNode);
+        	}
+        }
+        return subNodes;
+    }
+    
+    protected List<Connection> getSubConnections(CompositeNode compositeNode) {
+    	List<Connection> connections = new ArrayList<Connection>();
+        for (org.drools.definition.process.Node subNode: compositeNode.getNodes()) {
+        	// filter out composite start and end nodes as they can be regenerated
+            if (!(subNode instanceof CompositeNode.CompositeNodeEnd)) {
+                for (Connection connection: subNode.getIncomingConnections(Node.CONNECTION_DEFAULT_TYPE)) {
+                    if (!(connection.getFrom() instanceof CompositeNode.CompositeNodeStart)) {
+                        connections.add(connection);
+                    }
+                }
+            }
+        }
+        return connections;
+    }
+
+}
\ No newline at end of file

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-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -73,15 +73,15 @@
 			String from = subSubNode.getTextContent();
 			subNode = subNode.getNextSibling();
     		String to = subNode.getTextContent();
-    		workItemNode.getWork().setParameter(to.substring(workItemNode.getUniqueId().length() + 2), from);
+    		workItemNode.getWork().setParameter(to.substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2), from);
 		} else {
     		String from = subNode.getTextContent();
     		// targetRef
     		subNode = subNode.getNextSibling();
     		String to = subNode.getTextContent();
     		workItemNode.addInMapping(
-				dataInputs.get(to).substring(workItemNode.getUniqueId().length() + 2),
-				from.substring(workItemNode.getUniqueId().length() + 2));
+				dataInputs.get(to),
+				from);
 		}
     }
     
@@ -93,8 +93,8 @@
 		subNode = subNode.getNextSibling();
 		String to = subNode.getTextContent();
 		workItemNode.addOutMapping(
-			from.substring(workItemNode.getUniqueId().length() + 2),
-			dataOutputs.get(to).substring(workItemNode.getUniqueId().length() + 2));
+			from.substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2),
+			dataOutputs.get(to).substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2));
     }
 
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
@@ -108,30 +108,30 @@
 	protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
 		xmlDump.append("      <ioSpecification>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("        <dataInput id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (entry.getValue() != null) {
-				xmlDump.append("        <dataInput id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+				xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
 			}
 		}
 		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("        <dataOutput id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
 		}
 		xmlDump.append("        <inputSet>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("          <dataInputRefs>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+			xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (entry.getValue() != null) {
-				xmlDump.append("          <dataInputRefs>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+				xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
 			}
 		}
 		xmlDump.append(
 			"        </inputSet>" + EOL);
 		xmlDump.append("        <outputSet>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("          <dataOutputRefs>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
 		}
 		xmlDump.append(
 			"        </outputSet>" + EOL);
@@ -140,14 +140,14 @@
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (entry.getValue() != null) {
 				xmlDump.append(
-					"      <property id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "\" />" + EOL);
+					"      <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
 			}
 		}
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
 			xmlDump.append("      <dataInputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>_" + workItemNode.getUniqueId() + "_" + entry.getValue() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "</targetRef>" + EOL);
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</sourceRef>" + EOL +
+				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</targetRef>" + EOL);
 			xmlDump.append("      </dataInputAssociation>" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
@@ -156,18 +156,18 @@
 				xmlDump.append(
 					"        <assignment>" + EOL +
 					"          <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
-					"          <to xs:type=\"tFormalExpression\">_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</to>" + EOL +
+					"          <to xs:type=\"tFormalExpression\">_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</to>" + EOL +
 					"        </assignment>" + EOL +
-					"        <sourceRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "</sourceRef>" + EOL +
-					"        <targetRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+					"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+					"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
 				xmlDump.append("      </dataInputAssociation>" + EOL);
 			}
 		}
 		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
 			xmlDump.append("      <dataOutputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + workItemNode.getUniqueId() + "_" + entry.getValue() + "</targetRef>" + EOL);
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</targetRef>" + EOL);
 			xmlDump.append("      </dataOutputAssociation>" + EOL);
 		}
 	}

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	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -5,9 +5,11 @@
 
 import org.drools.definition.process.Connection;
 import org.drools.definition.process.Node;
+import org.drools.definition.process.NodeContainer;
 import org.drools.definition.process.WorkflowProcess;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.node.CompositeNode;
 import org.drools.workflow.core.node.Split;
 import org.drools.xml.Handler;
 import org.drools.xml.SemanticModule;
@@ -141,9 +143,9 @@
     }
     
     public void visitConnection(Connection connection, StringBuilder xmlDump, boolean includeMeta) {
-        xmlDump.append("    <sequenceFlow sourceRef=\"_" + connection.getFrom().getId() + "\" ");
+        xmlDump.append("    <sequenceFlow sourceRef=\"_" + getUniqueNodeId(connection.getFrom()) + "\" ");
         // TODO fromType, toType
-        xmlDump.append("targetRef=\"_" + connection.getTo().getId() + "\" ");
+        xmlDump.append("targetRef=\"_" + getUniqueNodeId(connection.getTo()) + "\" ");
         if (includeMeta) {
             String bendpoints = (String) connection.getMetaData("bendpoints");
             if (bendpoints != null) {
@@ -165,4 +167,15 @@
         }
     }
     
+    public static String getUniqueNodeId(Node node) {
+    	String result = node.getId() + "";
+    	NodeContainer nodeContainer = node.getNodeContainer();
+    	while (nodeContainer instanceof CompositeNode) {
+    		CompositeNode composite = (CompositeNode) nodeContainer;
+    		result = composite.getId() + "-" + result;
+    		nodeContainer = composite.getNodeContainer();
+    	}
+    	return result;
+    }
+    
 }

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-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf	2009-08-17 14:42:17 UTC (rev 28962)
@@ -7,8 +7,12 @@
 endEvent=org.drools.bpmn2.xml.EndEventHandler
 exclusiveGateway=org.drools.bpmn2.xml.ExclusiveGatewayHandler
 parallelGateway=org.drools.bpmn2.xml.ParallelGatewayHandler
+complexGateway=org.drools.bpmn2.xml.ComplexGatewayHandler
 scriptTask=org.drools.bpmn2.xml.ScriptTaskHandler
 task=org.drools.bpmn2.xml.TaskHandler
 userTask=org.drools.bpmn2.xml.UserTaskHandler
+businessRuleTask=org.drools.bpmn2.xml.BusinessRuleTaskHandler
+callActivity=org.drools.bpmn2.xml.CallActivityHandler
+subProcess=org.drools.bpmn2.xml.SubProcessHandler
 
 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-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2009-08-17 14:42:17 UTC (rev 28962)
@@ -31,7 +31,7 @@
 		ksession.startProcess("Minimal");
 	}
 
-	public void FIXME_testEvaluationProcess() throws Exception {
+	public void testEvaluationProcess() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
@@ -50,7 +50,7 @@
 		ksession.startProcess("com.sample.evaluation", params);
 	}
 
-	public void FIXME_testEvaluationProcess3() throws Exception {
+	public void testEvaluationProcess3() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess3.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
@@ -60,7 +60,7 @@
 		ksession.startProcess("Evaluation", params);
 	}
 
-	public void FIXME_testExclusiveSplit() throws Exception {
+	public void testExclusiveSplit() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplit.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 		ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
@@ -70,6 +70,12 @@
 		ksession.startProcess("com.sample.test", params);
 	}
 
+	public void testSubProcess() throws Exception {
+		KnowledgeBase kbase = createKnowledgeBase("BPMN2-SubProcess.xml");
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		ksession.startProcess("SubProcess");
+	}
+
 	private KnowledgeBase createKnowledgeBase(String process) throws Exception {
 		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
 		((PackageBuilderConfiguration) conf).initSemanticModules();

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml	2009-08-17 14:42:17 UTC (rev 28962)
@@ -21,42 +21,37 @@
     <property id="employee" itemSubjectRef="tns:employeeId" />
   
     <!-- nodes -->  
-    <startEvent id="StartProcess"/>
-    <scriptTask id="Log" scriptLanguage="java">
+    <startEvent id="_1" name="StartProcess"/>
+    <scriptTask id="_2" name="Log" scriptLanguage="java">
       <script>System.out.println("Processing evaluation for employee " + employee);</script>
     </scriptTask>
-    <parallelGateway id="Diverge" gatewayDirection="diverging"/>
-    <task id="RegisterRequest" name="RegisterRequest">
+    <parallelGateway id="_3" name="Diverge" gatewayDirection="diverging"/>
+    <task id="_4" name="RegisterRequest" tns:taskName="RegisterRequest">
       <ioSpecification>
-        <dataInput id="employeeIdInput" name="employeeId" />
-        <dataInput id="descriptionInput" name="description" />
+        <dataInput id="_4_employeeIdInput" name="employeeId" />
         <inputSet>
-          <dataInputRefs>employeeInputSet</dataInputRefs>
+          <dataInputRefs>_4_employeeIdInput</dataInputRefs>
         </inputSet>
         <outputSet/>
       </ioSpecification>
       <dataInputAssociation>
         <sourceRef>employee</sourceRef>
-        <targetRef>employeeIdInput</targetRef>
+        <targetRef>_4_employeeIdInput</targetRef>
       </dataInputAssociation>
-      <dataInputAssociation>
-        <sourceRef>description</sourceRef>
-        <targetRef>descriptionInput</targetRef>
-      </dataInputAssociation>
     </task>
-    <userTask id="Two">
+    <userTask id="_5" name="Two">
     </userTask>
-    <parallelGateway id="Converge" gatewayDirection="converging"/>
-    <endEvent id="EndProcess"/>
+    <parallelGateway id="_6" name="Converge" gatewayDirection="converging"/>
+    <endEvent id="_7" name="EndProcess"/>
     
     <!-- connections -->
-    <sequenceFlow sourceRef="StartProcess" targetRef="Log"/>
-    <sequenceFlow sourceRef="Log" targetRef="Diverge"/>
-    <sequenceFlow sourceRef="Diverge" targetRef="RegisterRequest"/>
-    <sequenceFlow sourceRef="Diverge" targetRef="Two"/>
-    <sequenceFlow sourceRef="RegisterRequest" targetRef="Converge"/>
-    <sequenceFlow sourceRef="Two" targetRef="Converge"/>
-    <sequenceFlow sourceRef="Converge" targetRef="EndProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <sequenceFlow sourceRef="_3" targetRef="_4"/>
+    <sequenceFlow sourceRef="_3" targetRef="_5"/>
+    <sequenceFlow sourceRef="_4" targetRef="_6"/>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <sequenceFlow sourceRef="_6" targetRef="_7"/>
     
   </process>
 </definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml	2009-08-17 14:42:17 UTC (rev 28962)
@@ -21,52 +21,52 @@
     <property id="employee" itemSubjectRef="tns:employeeId" />
   
     <!-- nodes -->  
-    <startEvent id="StartProcess"/>
-    <scriptTask id="Log" scriptLanguage="java">
+    <startEvent id="_1" name="StartProcess"/>
+    <scriptTask id="_2" name="Log" scriptLanguage="java">
       <script>System.out.println("Processing evaluation for employee " + employee);</script>
     </scriptTask>
-    <exclusiveGateway id="Diverge" gatewayDirection="diverging"/>
-    <sequenceFlow sourceRef="Diverge" targetRef="RegisterRequest">
+    <exclusiveGateway id="_3" name="Diverge" gatewayDirection="diverging"/>
+    <sequenceFlow sourceRef="_3" targetRef="_4">
       <conditionExpression>return employee == "john";</conditionExpression>
     </sequenceFlow>
-    <sequenceFlow sourceRef="Diverge" targetRef="Two">
+    <sequenceFlow sourceRef="_3" targetRef="_5">
       <conditionExpression>return true;</conditionExpression>
     </sequenceFlow>
-    <task id="RegisterRequest" name="RegisterRequest">
+    <task id="_4" name="RegisterRequest" tns:taskName="RegisterRequest" >
       <ioSpecification>
-        <dataInput id="employeeIdInput" name="employeeId" itemSubjectRef="tns:employeeId" />
-        <dataInput id="actorIdInput" name="actorId" itemSubjectRef="tns:employeeId" />
+        <dataInput id="_4_employeeIdInput" name="employeeId" itemSubjectRef="tns:employeeId" />
+        <dataInput id="_4_actorIdInput" name="actorId" itemSubjectRef="tns:employeeId" />
         <inputSet>
-          <dataInputRefs>employeeIdInput</dataInputRefs>
-          <dataInputRefs>actorIdInput</dataInputRefs>
+          <dataInputRefs>_4_employeeIdInput</dataInputRefs>
+          <dataInputRefs>_4_actorIdInput</dataInputRefs>
         </inputSet>
         <outputSet/>
       </ioSpecification>
-      <property id="actorId" itemSubjectRef="java.lang.String" />
+      <property id="_4_actorId" itemSubjectRef="java.lang.String" />
       <dataInputAssociation>
         <sourceRef>employee</sourceRef>
-        <targetRef>employeeIdInput</targetRef>
+        <targetRef>_4_employeeIdInput</targetRef>
       </dataInputAssociation>
       <dataInputAssociation>
         <assignment>
           <from xs:type="tFormalExpression">John</from>
-          <to xs:type="tFormalExpression">actorId</to>
+          <to xs:type="tFormalExpression">_4_actorId</to>
         </assignment>
-        <sourceRef>actorId</sourceRef>
-        <targetRef>actorIdInput</targetRef>
+        <sourceRef>_4_actorId</sourceRef>
+        <targetRef>_4_actorIdInput</targetRef>
       </dataInputAssociation>
     </task>
-    <userTask id="Two">
+    <userTask id="_5" name="Two">
     </userTask>
-    <exclusiveGateway id="Converge" gatewayDirection="converging"/>
-    <endEvent id="EndProcess"/>
+    <exclusiveGateway id="_6" name="Converge" gatewayDirection="converging"/>
+    <endEvent id="_7" name="EndProcess"/>
     
     <!-- connections -->
-    <sequenceFlow sourceRef="StartProcess" targetRef="Log"/>
-    <sequenceFlow sourceRef="Log" targetRef="Diverge"/>
-    <sequenceFlow sourceRef="RegisterRequest" targetRef="Converge"/>
-    <sequenceFlow sourceRef="Two" targetRef="Converge"/>
-    <sequenceFlow sourceRef="Converge" targetRef="EndProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <sequenceFlow sourceRef="_4" targetRef="_6"/>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <sequenceFlow sourceRef="_6" targetRef="_7"/>
     
   </process>
 </definitions>

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	2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml	2009-08-17 14:42:17 UTC (rev 28962)
@@ -19,81 +19,81 @@
     <property id="y" itemSubjectRef="tns:yItem"/>
 
     <!-- nodes -->
-    <scriptTask id="Script2" g:x="177" g:y="96" g:width="80" g:height="48" scriptLanguage="mvel" >
+    <startEvent id="_1" name="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
+    <exclusiveGateway id="_2" name="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
+    <scriptTask id="_3" name="Script1" g:x="177" g:y="16" g:width="80" g:height="48" scriptLanguage="mvel" >
+      <script>System.out.println("x=" + x);</script>
+    </scriptTask>
+    <scriptTask id="_4" name="Script2" g:x="177" g:y="96" g:width="80" g:height="48" scriptLanguage="mvel" >
       <script>System.out.println("y=" + y);</script>
     </scriptTask>
-    <endEvent id="End" g:x="370" g:y="56" g:width="48" g:height="48" />
-    <task id="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
+    <exclusiveGateway id="_5" name="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+    <task id="_6" name="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
       <ioSpecification>
-        <dataInput id="FromInput" name="From" />
-        <dataInput id="ToInput" name="To" />
-        <dataInput id="SubjectInput" name="Subject" />
-        <dataInput id="BodyInput" name="Body" />
+        <dataInput id="_6_FromInput" name="From" />
+        <dataInput id="_6_ToInput" name="To" />
+        <dataInput id="_6_SubjectInput" name="Subject" />
+        <dataInput id="_6_BodyInput" name="Body" />
         <inputSet>
-          <dataInputRefs>FromInput</dataInputRefs>
-          <dataInputRefs>ToInput</dataInputRefs>
-          <dataInputRefs>SubjectInput</dataInputRefs>
-          <dataInputRefs>BodyInput</dataInputRefs>
+          <dataInputRefs>_6_FromInput</dataInputRefs>
+          <dataInputRefs>_6_ToInput</dataInputRefs>
+          <dataInputRefs>_6_SubjectInput</dataInputRefs>
+          <dataInputRefs>_6_BodyInput</dataInputRefs>
         </inputSet>
         <outputSet>
         </outputSet>
       </ioSpecification>
-      <property id="From" />
-      <property id="Subject" />
-      <property id="To" />
-      <property id="Body" />
+      <property id="_6_From" />
+      <property id="_6_Subject" />
+      <property id="_6_To" />
+      <property id="_6_Body" />
       <dataInputAssociation>
         <assignment>
           <from xs:type="tFormalExpression">me at mail.com</from>
-          <to xs:type="tFormalExpression">From</to>
+          <to xs:type="tFormalExpression">_6_From</to>
         </assignment>
-        <sourceRef>From</sourceRef>
-        <targetRef>FromInput</targetRef>
+        <sourceRef>_6_From</sourceRef>
+        <targetRef>_6_FromInput</targetRef>
       </dataInputAssociation>
       <dataInputAssociation>
         <assignment>
           <from xs:type="tFormalExpression">Urgent email !</from>
-          <to xs:type="tFormalExpression">Subject</to>
+          <to xs:type="tFormalExpression">_6_Subject</to>
         </assignment>
-        <sourceRef>Subject</sourceRef>
-        <targetRef>SubjectInput</targetRef>
+        <sourceRef>_6_Subject</sourceRef>
+        <targetRef>_6_SubjectInput</targetRef>
       </dataInputAssociation>
       <dataInputAssociation>
         <assignment>
           <from xs:type="tFormalExpression">you at mail.com</from>
-          <to xs:type="tFormalExpression">To</to>
+          <to xs:type="tFormalExpression">_6_To</to>
         </assignment>
-        <sourceRef>To</sourceRef>
-        <targetRef>ToInput</targetRef>
+        <sourceRef>_6_To</sourceRef>
+        <targetRef>_6_ToInput</targetRef>
       </dataInputAssociation>
       <dataInputAssociation>
         <assignment>
           <from xs:type="tFormalExpression">This is an urgent email #{x}</from>
-          <to xs:type="tFormalExpression">Body</to>
+          <to xs:type="tFormalExpression">_6_Body</to>
         </assignment>
-        <sourceRef>Body</sourceRef>
-        <targetRef>BodyInput</targetRef>
+        <sourceRef>_6_Body</sourceRef>
+        <targetRef>_6_BodyInput</targetRef>
       </dataInputAssociation>
     </task>
-    <exclusiveGateway id="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
-    <startEvent id="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
-    <scriptTask id="Script1" g:x="177" g:y="16" g:width="80" g:height="48" scriptLanguage="mvel" >
-      <script>System.out.println("x=" + x);</script>
-    </scriptTask>
-    <exclusiveGateway id="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+    <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" />
 
     <!-- connections -->
-    <sequenceFlow sourceRef="Split" targetRef="Script2" g:bendpoints="[120,120]" >
+    <sequenceFlow sourceRef="_1" targetRef="_2" />
+    <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[120,40]" >
+      <conditionExpression>return x == "First";</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" >
       <conditionExpression>return x == "Second";</conditionExpression>
     </sequenceFlow>
-    <sequenceFlow sourceRef="Start" targetRef="Split" />
-    <sequenceFlow sourceRef="Split" targetRef="Script1" g:bendpoints="[120,40]" >
-      <conditionExpression>return x == "First";</conditionExpression>
-    </sequenceFlow>
-    <sequenceFlow sourceRef="Script2" targetRef="Join" g:bendpoints="[314,119]" />
-    <sequenceFlow sourceRef="Script1" targetRef="Join" g:bendpoints="[313,40]" />
-    <sequenceFlow sourceRef="Join" targetRef="Email" />
-    <sequenceFlow sourceRef="Email" targetRef="End" />
+    <sequenceFlow sourceRef="_3" targetRef="_5" g:bendpoints="[313,40]" />
+    <sequenceFlow sourceRef="_4" targetRef="_5" g:bendpoints="[314,119]" />
+    <sequenceFlow sourceRef="_5" targetRef="_6" />
+    <sequenceFlow sourceRef="_6" targetRef="_7" />
 
   </process>
 

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml	2009-08-17 14:42:17 UTC (rev 28962)
@@ -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">
+
+  <process id="SubProcess" name="Minimal SubProcess">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <subProcess id="_2" name="Hello" >
+      <startEvent id="_2-1" name="StartSubProcess"/>
+      <sequenceFlow sourceRef="_2-1" targetRef="_2-2"/>
+      <scriptTask id="_2-2" name="Hello" scriptLanguage="java">
+        <script>System.out.println("Hello World");</script>
+      </scriptTask>
+      <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+      <endEvent id="_2-3" name="EndSubProcess"/>
+    </subProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess"/>
+  </process>
+</definitions>



More information about the jboss-svn-commits mailing list