[jboss-svn-commits] JBL Code SVN: r30831 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/workflow/core/node and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Dec 26 17:44:43 EST 2009


Author: KrisVerlaenen
Date: 2009-12-26 17:44:43 -0500 (Sat, 26 Dec 2009)
New Revision: 30831

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml
Modified:
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java
   labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml
   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/BPMN2SemanticModule.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/BusinessRuleTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java
   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/ProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.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/StartEventHandler.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/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.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/SimpleBPMNProcessTest.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
Log:
 - added some more BPMN2 nodes

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -17,6 +17,8 @@
  */
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.drools.process.core.TypeObject;
 import org.drools.process.core.ValueObject;
@@ -35,6 +37,7 @@
     private String name;
     private DataType type;
     private Object value;
+    private Map<String, Object> metaData = new HashMap<String, Object>();
 
     public Variable() {
         this.type = UndefinedDataType.getInstance();
@@ -76,6 +79,14 @@
         }
     }
 
+    public void setMetaData(String name, Object value) {
+        this.metaData.put(name, value);
+    }
+    
+    public Object getMetaData(String name) {
+        return this.metaData.get(name);
+    }
+    
     public String toString() {
         return this.name;
     }

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -35,6 +35,7 @@
 	
 	private String faultName;
 	private String faultVariable;
+	private boolean terminateParent = false;
 
     public String getFaultVariable() {
 		return faultVariable;
@@ -52,7 +53,15 @@
 		this.faultName = faultName;
 	}
 	
-	public String[] getActionTypes() {
+	public boolean isTerminateParent() {
+        return terminateParent;
+    }
+
+    public void setTerminateParent(boolean terminateParent) {
+        this.terminateParent = terminateParent;
+    }
+
+    public String[] getActionTypes() {
 		return EVENT_TYPES;
 	}
 	

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -23,14 +23,14 @@
 import org.drools.runtime.process.NodeInstance;
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.instance.NodeInstanceContainer;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl;
 
 /**
  * Runtime counterpart of an end node.
  * 
  * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
  */
-public class EndNodeInstance extends NodeInstanceImpl {
+public class EndNodeInstance extends ExtendedNodeInstanceImpl {
 
     private static final long serialVersionUID = 400L;
 
@@ -39,6 +39,7 @@
     }
     
     public void internalTrigger(final NodeInstance from, String type) {
+        super.internalTrigger(from, type);
         if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
             throw new IllegalArgumentException(
                 "An EndNode only accepts default incoming connections!");

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -16,12 +16,15 @@
  * limitations under the License.
  */
 
+import java.util.Collection;
+
 import org.drools.process.core.context.exception.ExceptionScope;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.instance.ProcessInstance;
 import org.drools.process.instance.context.exception.ExceptionScopeInstance;
 import org.drools.process.instance.context.variable.VariableScopeInstance;
 import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
 import org.drools.workflow.core.node.FaultNode;
 import org.drools.workflow.instance.NodeInstanceContainer;
 import org.drools.workflow.instance.impl.NodeInstanceImpl;
@@ -46,7 +49,18 @@
         }
         String faultName = getFaultName();
         ExceptionScopeInstance exceptionScopeInstance = getExceptionScopeInstance(faultName);
-        ((NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
+        NodeInstanceContainer nodeInstanceContainer =  (NodeInstanceContainer) getNodeInstanceContainer();
+        nodeInstanceContainer.removeNodeInstance(this);
+        if (getFaultNode().isTerminateParent()) {
+            if (nodeInstanceContainer instanceof CompositeNodeInstance) {
+                ((CompositeNodeInstance) nodeInstanceContainer).cancel();
+            } else if (nodeInstanceContainer instanceof WorkflowProcessInstance) {
+                Collection<NodeInstance> nodeInstances = ((WorkflowProcessInstance) nodeInstanceContainer).getNodeInstances();
+                for (NodeInstance nodeInstance: nodeInstances) {
+                    ((org.drools.workflow.instance.NodeInstance) nodeInstance).cancel();
+                }
+            }
+        }
         if (exceptionScopeInstance != null) {
         	handleException(faultName, exceptionScopeInstance);
         } else {

Modified: labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml
===================================================================
--- labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -18,9 +18,12 @@
       <itemizedlist>
         <listitem>Events
           <itemizedlist>
-            <listitem>Start Event (None)</listitem>
-            <listitem>End Event (Terminate, None, Error)</listitem>
-            <listitem>Intermediate Event (Signal, Timer)</listitem>
+            <listitem>Start Event (None, Conditional, Signal)</listitem>
+            <listitem>End Event (None, Terminate, Error, Escalation, Signal)</listitem>
+            <listitem>Intermediate Catch Event (Signal, Timer)</listitem>
+            <listitem>Intermediate Throw Event (None, Signal)</listitem>
+            <listitem>Non-interrupting Boundary Event (Escalation, Timer)</listitem>
+            <listitem>Interrupting Boundary Event ()</listitem>
           </itemizedlist>
         </listitem>
         <listitem>Activities
@@ -42,6 +45,7 @@
             <listitem>Diverging
               <itemizedlist>
                 <listitem>Exclusive (Java, MVEL or XPath expression language)</listitem>
+                <listitem>Inclusive (Java, MVEL or XPath expression language)</listitem>
                 <listitem>Parallel</listitem>
               </itemizedlist>
             </listitem>
@@ -60,6 +64,7 @@
       <itemizedlist>
         <listitem>Java type language</listitem>
         <listitem>Process properties</listitem>
+        <listitem>Embedded Sub-Process properties</listitem>
         <listitem>Activity properties</listitem>
       </itemizedlist>
     </listitem>

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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -23,7 +23,7 @@
     public AbstractNodeHandler() {
         initValidParents();
         initValidPeers();
-        this.allowNesting = false;
+        this.allowNesting = true;
     }
     
     protected void initValidParents() {

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,69 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.xml.XmlDumper;
+import org.xml.sax.Attributes;
+
+public class ActionNodeHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        throw new IllegalArgumentException("Reading in should be handled by specific handlers");
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return ActionNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		ActionNode actionNode = (ActionNode) node;
+		DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+		if (action != null) {
+		    String s = action.getConsequence();
+		    if ("".equals(s)) {
+		        writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+		        endNode(xmlDump);
+		    } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+                writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+                xmlDump.append(">" + EOL);
+                s = s.substring(44);
+                String type = s.substring(0, s.indexOf("\""));
+                s = s.substring(s.indexOf(",") + 2);
+                String variable = null;
+                if (!s.startsWith("null")) {
+                    variable = s.substring(0, s.indexOf(")"));
+                    xmlDump.append(
+                        "      <dataInput id=\"_" + actionNode.getUniqueId() + "_Input\" />" + EOL + 
+                        "      <dataInputAssociation>" + EOL + 
+                        "        <sourceRef>" + variable + "</sourceRef>" + EOL + 
+                        "        <targetRef>_" + actionNode.getUniqueId() + "_Input</targetRef>" + EOL + 
+                        "      </dataInputAssociation>" + EOL + 
+                        "      <inputSet>" + EOL + 
+                        "        <dataInputRefs>_" + actionNode.getUniqueId() + "_Input</dataInputRefs>" + EOL + 
+                        "      </inputSet>" + EOL);
+                }
+                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+                endNode("intermediateThrowEvent", xmlDump);
+            } else {
+                writeNode("scriptTask", actionNode, xmlDump, includeMeta);
+                if (JavaDialect.ID.equals(action.getDialect())) {
+                    xmlDump.append("scriptLanguage=\"" + XmlBPMNProcessDumper.JAVA_LANGUAGE + "\" ");
+                }
+                if (action.getConsequence() != null) {
+                    xmlDump.append(">" + EOL + 
+                        "      <script>" + XmlDumper.replaceIllegalChars(action.getConsequence()) + "</script>" + EOL);
+                    endNode("scriptTask", xmlDump);
+                } else {
+                    endNode(xmlDump);
+                }
+            }
+		} else {
+		    writeNode("scriptTask", actionNode, xmlDump, includeMeta);
+	        endNode(xmlDump);
+		}
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.workflow.core.node.ActionNode;
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.core.node.FaultNode;
@@ -22,6 +23,7 @@
 		addHandler("startEvent", new StartEventHandler());
 		addHandler("endEvent", new EndEventHandler());
 		addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+        addHandler("inclusiveGateway", new InclusiveGatewayHandler());
 		addHandler("parallelGateway", new ParallelGatewayHandler());
 		addHandler("complexGateway", new ComplexGatewayHandler());
 		addHandler("scriptTask", new ScriptTaskHandler());
@@ -36,7 +38,10 @@
 		addHandler("subProcess", new SubProcessHandler());
         addHandler("adHocSubProcess", new AdHocSubProcessHandler());
 		addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
-
+        addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
+        addHandler("boundaryEvent", new BoundaryEventHandler());
+        addHandler("dataObject", new DataObjectHandler());
+        
 		addHandler("sequenceFlow", new SequenceFlowHandler());
 		
         addHandler("itemDefinition", new ItemDefinitionHandler());
@@ -52,6 +57,7 @@
         handlersByClass.put(EndNode.class, new EndNodeHandler());
         handlersByClass.put(FaultNode.class, new FaultNodeHandler());
         handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
+        handlersByClass.put(ActionNode.class, new ActionNodeHandler());
 	}
 
 }

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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.workflow.core.node.ActionNode;
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.core.node.FaultNode;
@@ -22,6 +23,7 @@
         addHandler("startEvent", new StartEventHandler());
         addHandler("endEvent", new EndEventHandler());
         addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+        addHandler("inclusiveGateway", new InclusiveGatewayHandler());
         addHandler("parallelGateway", new ParallelGatewayHandler());
         addHandler("complexGateway", new ComplexGatewayHandler());
         addHandler("scriptTask", new ScriptTaskHandler());
@@ -36,6 +38,9 @@
         addHandler("subProcess", new SubProcessHandler());
         addHandler("adHocSubProcess", new AdHocSubProcessHandler());
         addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
+        addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
+        addHandler("boundaryEvent", new BoundaryEventHandler());
+        addHandler("dataObject", new DataObjectHandler());
 
         addHandler("sequenceFlow", new SequenceFlowHandler());
 
@@ -52,6 +57,7 @@
         handlersByClass.put(EndNode.class, new EndNodeHandler());
         handlersByClass.put(FaultNode.class, new FaultNodeHandler());
         handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
+        handlersByClass.put(ActionNode.class, new ActionNodeHandler());
 	}
 
 }

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,121 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.NodeContainer;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class BoundaryEventHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new EventNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return EventNode.class;
+    }
+
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        Node node = (Node) parser.getCurrent();
+        String attachedTo = element.getAttribute("attachedToRef");
+        String cancelActivityString = element.getAttribute("cancelActivity");
+        boolean cancelActivity = true;
+        if ("false".equals(cancelActivityString)) {
+            cancelActivity = false;
+        }
+        // determine type of event definition, so the correct type of node
+        // can be generated
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("escalationEventDefinition".equals(nodeName)) {
+                // reuse already created EventNode
+                handleEscalationNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
+                break;
+            } else if ("timerEventDefinition".equals(nodeName)) {
+                // reuse already created EventNode
+                handleTimerNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
+                break;
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+        nodeContainer.addNode(node);
+        return node;
+    }
+    
+    protected void handleEscalationNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser, final String attachedTo,
+            final boolean cancelActivity) throws SAXException {
+        super.handleNode(node, element, uri, localName, parser);
+        EventNode eventNode = (EventNode) node;
+        eventNode.setMetaData("AttachedTo", attachedTo);
+        eventNode.setMetaData("CancelActivity", cancelActivity);
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("escalationEventDefinition".equals(nodeName)) {
+                String type = ((Element) xmlNode).getAttribute("escalationCode");
+                if (type != null && type.trim().length() > 0) {
+                    List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                    EventTypeFilter eventFilter = new EventTypeFilter();
+                    eventFilter.setType("Escalation-" + attachedTo + "-" + type);
+                    eventFilters.add(eventFilter);
+                    eventNode.setEventFilters(eventFilters);
+                    eventNode.setMetaData("EscalationEvent", type);
+                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    protected void handleTimerNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser, final String attachedTo,
+            final boolean cancelActivity) throws SAXException {
+        super.handleNode(node, element, uri, localName, parser);
+        EventNode eventNode = (EventNode) node;
+        eventNode.setMetaData("AttachedTo", attachedTo);
+        eventNode.setMetaData("CancelActivity", cancelActivity);
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("timerEventDefinition".equals(nodeName)) {
+                String timeCycle = null;
+                org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+                while (subNode instanceof Element) {
+                    String subNodeName = subNode.getNodeName();
+                    if ("timeCycle".equals(subNodeName)) {
+                        timeCycle = subNode.getTextContent();
+                        break;
+                    }
+                    subNode = subNode.getNextSibling();
+                }
+                if (timeCycle != null && timeCycle.trim().length() > 0) {
+                    List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                    EventTypeFilter eventFilter = new EventTypeFilter();
+                    eventFilter.setType("Timer-" + attachedTo + "-" + timeCycle);
+                    eventFilters.add(eventFilter);
+                    eventNode.setEventFilters(eventFilters);
+                    eventNode.setMetaData("TimeCycle", timeCycle);
+                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+	    throw new IllegalArgumentException("Writing out should be handled by specific handlers");
+    }
+
+}

Modified: 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	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -32,7 +32,7 @@
 		RuleSetNode ruleSetNode = (RuleSetNode) node;
 		writeNode("businessRuleTask", ruleSetNode, xmlDump, includeMeta);
 		if (ruleSetNode.getRuleFlowGroup() != null) {
-			xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" ");
+			xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" implementation=\"Other\" ");
 		}
 		endNode(xmlDump);
 	}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,89 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.ContextContainer;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.datatype.DataType;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
+import org.drools.workflow.core.Node;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class DataObjectHandler extends BaseAbstractHandler implements Handler {
+
+	public DataObjectHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = false;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(ContextContainer.class);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(null);
+        this.validPeers.add(Variable.class);
+        this.validPeers.add(Node.class);
+        this.validPeers.add(SequenceFlow.class);
+    }
+    
+	@SuppressWarnings("unchecked")
+	public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		final String id = attrs.getValue("id");
+		final String itemSubjectRef = attrs.getValue("itemSubjectRef");
+
+		Object parent = parser.getParent();
+		if (parent instanceof ContextContainer) {
+		    ContextContainer contextContainer = (ContextContainer) parent;
+		    VariableScope variableScope = (VariableScope) 
+                contextContainer.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+			List variables = variableScope.getVariables();
+			Variable variable = new Variable();
+			variable.setMetaData("DataObject", "true");
+			variable.setName(id);
+			// retrieve type from item definition
+			DataType dataType = new ObjectDataType();
+			Map<String, ItemDefinition> itemDefinitions = (Map<String, ItemDefinition>)
+	            ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
+	        if (itemDefinitions != null) {
+	        	ItemDefinition itemDefinition = itemDefinitions.get(itemSubjectRef);
+	        	if (itemDefinition != null) {
+	        		dataType = new ObjectDataType(itemDefinition.getStructureRef());
+	        	}
+	        }
+			variable.setType(dataType);
+			variables.add(variable);
+			return variable;
+		}
+
+		return new Variable();
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Variable.class;
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,7 +1,12 @@
 package org.drools.bpmn2.xml;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.core.node.FaultNode;
 import org.drools.xml.ExtensibleXmlParser;
@@ -33,18 +38,32 @@
         while (xmlNode != null) {
             String nodeName = xmlNode.getNodeName();
             if ("terminateEventDefinition".equals(nodeName)) {
-                // reuse already create EventNode
+                // reuse already created EndNode
                 handleTerminateNode(node, element, uri, localName, parser);
                 break;
+            } else if ("signalEventDefinition".equals(nodeName)) {
+                handleSignalNode(node, element, uri, localName, parser);
+            } else if ("messageEventDefinition".equals(nodeName)) {
+                handleMessageNode(node, element, uri, localName, parser);
             } else if ("errorEventDefinition".equals(nodeName)) {
-                // create new timerNode
+                // create new faultNode
                 FaultNode faultNode = new FaultNode();
                 faultNode.setId(node.getId());
                 faultNode.setName(node.getName());
+                faultNode.setTerminateParent(true);
                 node = faultNode;
                 super.handleNode(node, element, uri, localName, parser);
                 handleErrorNode(node, element, uri, localName, parser);
                 break;
+            } else if ("escalationEventDefinition".equals(nodeName)) {
+                // create new faultNode
+                FaultNode faultNode = new FaultNode();
+                faultNode.setId(node.getId());
+                faultNode.setName(node.getName());
+                node = faultNode;
+                super.handleNode(node, element, uri, localName, parser);
+                handleEscalationNode(node, element, uri, localName, parser);
+                break;
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -58,6 +77,57 @@
         ((EndNode) node).setTerminate(true);
     }
     
+    public void handleSignalNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        EndNode endNode = (EndNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("dataInputAssociation".equals(nodeName)) {
+                readEndDataInputAssociation(xmlNode, endNode);
+            } else if ("signalEventDefinition".equals(nodeName)) {
+                String signalName = ((Element) xmlNode).getAttribute("signalRef");
+                String variable = (String) endNode.getMetaData("MappingVariable");
+                List<DroolsAction> actions = new ArrayList<DroolsAction>();
+                actions.add(new DroolsConsequenceAction("mvel",
+                    "kcontext.getKnowledgeRuntime().signalEvent(\""
+                        + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+                endNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    public void handleMessageNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        EndNode endNode = (EndNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("dataInputAssociation".equals(nodeName)) {
+                readEndDataInputAssociation(xmlNode, endNode);
+            } else if ("messageEventDefinition".equals(nodeName)) {
+                String signalName = ((Element) xmlNode).getAttribute("messageRef");
+                String variable = (String) endNode.getMetaData("MappingVariable");
+                List<DroolsAction> actions = new ArrayList<DroolsAction>();
+                actions.add(new DroolsConsequenceAction("mvel",
+                    "kcontext.getKnowledgeRuntime().signalEvent(\""
+                        + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+                endNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    protected void readEndDataInputAssociation(org.w3c.dom.Node xmlNode, EndNode endNode) {
+        // sourceRef
+        org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+        String eventVariable = subNode.getTextContent();
+        if (eventVariable != null && eventVariable.trim().length() > 0) {
+            endNode.setMetaData("MappingVariable", eventVariable);
+        }
+    }
+
     public void handleErrorNode(final Node node, final Element element, final String uri, 
             final String localName, final ExtensibleXmlParser parser) throws SAXException {
         FaultNode faultNode = (FaultNode) node;
@@ -65,18 +135,42 @@
         while (xmlNode != null) {
             String nodeName = xmlNode.getNodeName();
             if ("dataInputAssociation".equals(nodeName)) {
-                readDataOutputAssociation(xmlNode, faultNode);
+                readFaultDataInputAssociation(xmlNode, faultNode);
             } else if ("errorEventDefinition".equals(nodeName)) {
                 String faultName = ((Element) xmlNode).getAttribute("errorCode");
                 if (faultName != null && faultName.trim().length() > 0) {
                     faultNode.setFaultName(faultName);
                 }
-            }
+                faultNode.setTerminateParent(true);
+            } else if ("escalationEventDefinition".equals(nodeName)) {
+                String faultName = ((Element) xmlNode).getAttribute("escalationCode");
+                if (faultName != null && faultName.trim().length() > 0) {
+                    faultNode.setFaultName(faultName);
+                }
+            } 
             xmlNode = xmlNode.getNextSibling();
         }
     }
     
-    protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, FaultNode faultNode) {
+    public void handleEscalationNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        FaultNode faultNode = (FaultNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("dataInputAssociation".equals(nodeName)) {
+                readFaultDataInputAssociation(xmlNode, faultNode);
+            } else if ("escalationEventDefinition".equals(nodeName)) {
+                String faultName = ((Element) xmlNode).getAttribute("escalationCode");
+                if (faultName != null && faultName.trim().length() > 0) {
+                    faultNode.setFaultName(faultName);
+                }
+            } 
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    protected void readFaultDataInputAssociation(org.w3c.dom.Node xmlNode, FaultNode faultNode) {
         // sourceRef
         org.w3c.dom.Node subNode = xmlNode.getFirstChild();
         String faultVariable = subNode.getTextContent();

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,6 +1,10 @@
 package org.drools.bpmn2.xml;
 
+import java.util.List;
+
+import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.drools.workflow.core.node.EndNode;
 import org.xml.sax.Attributes;
 
@@ -23,7 +27,38 @@
             xmlDump.append("        <terminateEventDefinition/>" + EOL);
     		endNode("endEvent", xmlDump);
 		} else {
-		    endNode(xmlDump);
+		    List<DroolsAction> actions = endNode.getActions(EndNode.EVENT_NODE_ENTER);
+		    if (actions != null && !actions.isEmpty()) {
+		        if (actions.size() == 1) {
+		            DroolsConsequenceAction action = (DroolsConsequenceAction) actions.get(0);
+		            String s = action.getConsequence();
+		            if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+                        xmlDump.append(">" + EOL);
+		                s = s.substring(44);
+		                String type = s.substring(0, s.indexOf("\""));
+		                s = s.substring(s.indexOf(",") + 2);
+		                String variable = null;
+		                if (!s.startsWith("null")) {
+		                    variable = s.substring(0, s.indexOf(")"));
+	                        xmlDump.append(
+                                "      <dataInput id=\"_" + endNode.getUniqueId() + "_Input\" />" + EOL + 
+                                "      <dataInputAssociation>" + EOL + 
+                                "        <sourceRef>" + variable + "</sourceRef>" + EOL + 
+                                "        <targetRef>_" + endNode.getUniqueId() + "_Input</targetRef>" + EOL + 
+                                "      </dataInputAssociation>" + EOL + 
+                                "      <inputSet>" + EOL + 
+                                "        <dataInputRefs>_" + endNode.getUniqueId() + "_Input</dataInputRefs>" + EOL + 
+                                "      </inputSet>" + EOL);
+	                    }
+		                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+		                endNode("endEvent", xmlDump);
+		            } else {
+		                throw new IllegalArgumentException("Unknown action " + s);
+		            }
+		        }
+		    } else {
+		        endNode(xmlDump);
+		    }
 		}
 	}
 

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -18,25 +18,56 @@
 
 	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);
+		String attachedTo = (String) eventNode.getMetaData("AttachedTo");
+		if (attachedTo == null) {
+    		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);
+		} else {
+		    String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
+		    if (type.startsWith("Escalation-")) {
+    		    type = type.substring(attachedTo.length() + 12);
+    		    boolean cancelActivity = (Boolean) eventNode.getMetaData("CancelActivity");
+                writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
+    		    xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
+    		    if (!cancelActivity) {
+    		        xmlDump.append("cancelActivity=\"false\" ");
+    		    }
+    		    xmlDump.append(">" + EOL);
+    		    xmlDump.append("      <escalationEventDefinition escalationCode=\"" + type + "\" />" + EOL);
+    		    endNode("boundaryEvent", xmlDump);
+		    } else if (type.startsWith("Timer-")) {
+                type = type.substring(attachedTo.length() + 7);
+                boolean cancelActivity = (Boolean) eventNode.getMetaData("CancelActivity");
+                writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
+                xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
+                if (!cancelActivity) {
+                    xmlDump.append("cancelActivity=\"false\" ");
+                }
+                xmlDump.append(">" + EOL);
+                xmlDump.append(
+                    "      <timerEventDefinition>" + EOL +
+                    "        <timeCycle xs:type=\"tFormalExpression\">" + eventNode.getMetaData("TimeCycle") + "</timeCycle>" + EOL +
+                    "      </timerEventDefinition>" + EOL);
+                endNode("boundaryEvent", xmlDump);
+            }
 		}
-		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/FaultNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -30,7 +30,11 @@
             xmlDump.append("        <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</dataInputRefs>" + EOL);
             xmlDump.append("      </inputSet>" + EOL);
         }
-        xmlDump.append("      <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+        if (faultNode.isTerminateParent()) {
+            xmlDump.append("      <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+        } else {
+            xmlDump.append("      <escalationEventDefinition escalationCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+        }
 		endNode("endEvent", xmlDump);
 	}
 

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class InclusiveGatewayHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        final String type = attrs.getValue("gatewayDirection");
+        if ("diverging".equals(type)) {
+        	Split split = new Split();
+        	split.setType(Split.TYPE_OR);
+        	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/IntermediateCatchEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -36,7 +36,7 @@
         while (xmlNode != null) {
             String nodeName = xmlNode.getNodeName();
             if ("signalEventDefinition".equals(nodeName)) {
-                // reuse already create EventNode
+                // reuse already created EventNode
                 handleSignalNode(node, element, uri, localName, parser);
                 break;
             } else if ("timerEventDefinition".equals(nodeName)) {

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,80 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class IntermediateThrowEventHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new ActionNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.class;
+    }
+
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        ActionNode node = (ActionNode) parser.getCurrent();
+        // determine type of event definition, so the correct type of node
+        // can be generated
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("signalEventDefinition".equals(nodeName)) {
+                // reuse already created ActionNode
+                handleSignalNode(node, element, uri, localName, parser);
+                break;
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+        // none event definition
+        if (node.getAction() == null) {
+            node.setAction(new DroolsConsequenceAction("mvel", ""));
+        }
+        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+        nodeContainer.addNode(node);
+        return node;
+    }
+    
+    public void handleSignalNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        ActionNode actionNode = (ActionNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("dataInputAssociation".equals(nodeName)) {
+                readDataInputAssociation(xmlNode, actionNode);
+            } else if ("signalEventDefinition".equals(nodeName)) {
+                String signalName = ((Element) xmlNode).getAttribute("signalRef");
+                String variable = (String) actionNode.getMetaData("MappingVariable");
+                actionNode.setAction(new DroolsConsequenceAction("mvel",
+                    "kcontext.getKnowledgeRuntime().signalEvent(\""
+                        + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, ActionNode actionNode) {
+        // sourceRef
+        org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+        String eventVariable = subNode.getTextContent();
+        if (eventVariable != null && eventVariable.trim().length() > 0) {
+            actionNode.setMetaData("MappingVariable", eventVariable);
+        }
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException("Writing out should be handled by action node handler");
+    }
+
+}

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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -13,14 +13,21 @@
 import org.drools.bpmn2.core.SequenceFlow;
 import org.drools.definition.process.Node;
 import org.drools.definition.process.NodeContainer;
+import org.drools.process.core.context.exception.ActionExceptionHandler;
+import org.drools.process.core.context.exception.ExceptionScope;
 import org.drools.process.core.context.swimlane.Swimlane;
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.process.core.timer.Timer;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Constraint;
 import org.drools.workflow.core.impl.ConnectionImpl;
 import org.drools.workflow.core.impl.ConnectionRef;
 import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.CompositeContextNode;
+import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.core.node.HumanTaskNode;
 import org.drools.workflow.core.node.Split;
 import org.drools.xml.BaseAbstractHandler;
@@ -84,6 +91,7 @@
 		List<SequenceFlow> connections = (List<SequenceFlow>)
 			process.getMetaData(CONNECTIONS);
 		linkConnections(process, connections);
+		linkBoundaryEvents(process);
         List<Lane> lanes = (List<Lane>)
             process.getMetaData(LaneHandler.LANES);
         assignLanes(process, lanes);
@@ -160,6 +168,63 @@
 		}
 	}
 	
+    public static void linkBoundaryEvents(NodeContainer nodeContainer) {
+        for (Node node: nodeContainer.getNodes()) {
+            if (node instanceof EventNode) {
+                String type = ((EventTypeFilter)
+                    ((EventNode) node).getEventFilters().get(0)).getType();
+                String attachedTo = (String) node.getMetaData("AttachedTo");
+                if (attachedTo != null) {
+                    Node attachedNode = null;
+                    try {
+                        // remove starting _
+                        String attachedToString = attachedTo.substring(1);
+                        // remove ids of parent nodes
+                        attachedToString = attachedToString.substring(attachedToString.lastIndexOf("-") + 1);
+                        attachedNode = nodeContainer.getNode(new Integer(attachedToString));
+                    } catch (NumberFormatException e) {
+                        // try looking for a node with same "UniqueId" (in metadata)
+                        for (Node subnode: nodeContainer.getNodes()) {
+                            if (attachedTo.equals(subnode.getMetaData("UniqueId"))) {
+                                attachedNode = subnode;
+                                break;
+                            }
+                        }
+                        if (attachedNode == null) {
+                            throw new IllegalArgumentException("Could not find node to attach to: " + attachedTo);
+                        }
+                    }
+                    if (type.startsWith("Escalation-")) {
+                        boolean cancelActivity = (Boolean) node.getMetaData("CancelActivity");
+                        CompositeContextNode compositeNode = (CompositeContextNode) attachedNode;
+                        ExceptionScope exceptionScope = (ExceptionScope) 
+                            compositeNode.getDefaultContext(ExceptionScope.EXCEPTION_SCOPE);
+                        if (exceptionScope == null) {
+                            exceptionScope = new ExceptionScope();
+                            compositeNode.addContext(exceptionScope);
+                            compositeNode.setDefaultContext(exceptionScope);
+                        }
+                        String escalationCode = (String) node.getMetaData("EscalationEvent");
+                        ActionExceptionHandler exceptionHandler = new ActionExceptionHandler();
+                        exceptionHandler.setAction(new DroolsConsequenceAction("java",
+                            (cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
+                            "kcontext.getProcessInstance().signalEvent(\"Escalation-" + attachedTo + "-" + escalationCode + "\", null);"));
+                        exceptionScope.setExceptionHandler(escalationCode, exceptionHandler);
+                    } else if (type.startsWith("Timer-")) {
+                        boolean cancelActivity = (Boolean) node.getMetaData("CancelActivity");
+                        CompositeContextNode compositeNode = (CompositeContextNode) attachedNode;
+                        String timeCycle = (String) node.getMetaData("TimeCycle");
+                        Timer timer = new Timer();
+                        timer.setDelay(timeCycle);
+                        compositeNode.addTimer(timer, new DroolsConsequenceAction("java",
+                            (cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
+                            "kcontext.getProcessInstance().signalEvent(\"Timer-" + attachedTo + "-" + timeCycle + "\", null);"));
+                    }
+                }
+            }
+        }
+    }
+    
 	private void assignLanes(RuleFlowProcess process, List<Lane> lanes) {
 	    List<String> laneNames = new ArrayList<String>();
 	    Map<String, String> laneMapping = new HashMap<String, String>();

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,16 +1,16 @@
 package org.drools.bpmn2.xml;
 
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
 import org.drools.bpmn2.core.ItemDefinition;
 import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.ContextContainer;
 import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
 import org.drools.process.core.datatype.DataType;
 import org.drools.process.core.datatype.impl.type.ObjectDataType;
-import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.BaseAbstractHandler;
@@ -30,7 +30,7 @@
     
     protected void initValidParents() {
         this.validParents = new HashSet<Class<?>>();
-        this.validParents.add(RuleFlowProcess.class);
+        this.validParents.add(ContextContainer.class);
         this.validParents.add(WorkItemNode.class);
     }
     
@@ -52,9 +52,11 @@
 		final String itemSubjectRef = attrs.getValue("itemSubjectRef");
 
 		Object parent = parser.getParent();
-		if (parent instanceof RuleFlowProcess) {
-			RuleFlowProcess process = (RuleFlowProcess) parent;
-			List variables = process.getVariableScope().getVariables();
+		if (parent instanceof ContextContainer) {
+		    ContextContainer contextContainer = (ContextContainer) parent;
+		    VariableScope variableScope = (VariableScope) 
+                contextContainer.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+			List variables = variableScope.getVariables();
 			Variable variable = new Variable();
 			variable.setName(id);
 			// retrieve type from item definition

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -45,6 +45,6 @@
     }
     
     public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-        throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+        throw new IllegalArgumentException("Writing out should be handled by WorkItemNodeHandler");
     }
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -5,7 +5,6 @@
 import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.drools.workflow.core.node.ActionNode;
 import org.drools.xml.ExtensibleXmlParser;
-import org.drools.xml.XmlDumper;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -20,7 +19,7 @@
     
     @SuppressWarnings("unchecked")
 	public Class generateNodeFor() {
-        return ActionNode.class;
+        return Node.class;
     }
 
     protected void handleNode(final Node node, final Element element, final String uri, 
@@ -39,27 +38,13 @@
         org.w3c.dom.Node xmlNode = element.getFirstChild();
         if (xmlNode instanceof Element) {
     		action.setConsequence(xmlNode.getTextContent());
+        } else {
+            action.setConsequence("");
         }
 	}
 
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-		ActionNode actionNode = (ActionNode) node;
-		writeNode("scriptTask", actionNode, xmlDump, includeMeta);
-		DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
-		if (action != null) {
-			if (JavaDialect.ID.equals(action.getDialect())) {
-				xmlDump.append("scriptLanguage=\"" + XmlBPMNProcessDumper.JAVA_LANGUAGE + "\" ");
-			}
-            if (action.getConsequence() != null) {
-                xmlDump.append(">" + EOL + 
-                    "      <script>" + XmlDumper.replaceIllegalChars(action.getConsequence()) + "</script>" + EOL);
-                endNode("scriptTask", xmlDump);
-            } else {
-                endNode(xmlDump);
-            }
-		} else {
-            endNode(xmlDump);
-		}
+	    throw new IllegalArgumentException("Writing out should be handled by action node handler");
 	}
 
 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -45,6 +45,6 @@
     }
     
     public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-        throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+        throw new IllegalArgumentException("Writing out should be handled by WorkItemNodeHandler");
     }
 }

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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -24,7 +24,10 @@
 			case Split.TYPE_XOR:
 				writeNode("exclusiveGateway", node, xmlDump, includeMeta);
 				break;
-			default:
+			case Split.TYPE_OR:
+                writeNode("inclusiveGateway", node, xmlDump, includeMeta);
+                break;
+            default:
 				writeNode("complexGateway", node, xmlDump, includeMeta);
 		}
 		xmlDump.append("gatewayDirection=\"diverging\" ");

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,8 +1,17 @@
 package org.drools.bpmn2.xml;
 
+import java.util.List;
+
+import org.drools.process.core.event.EventTypeFilter;
 import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.ConstraintTrigger;
+import org.drools.workflow.core.node.EventTrigger;
 import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.Trigger;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
 
 public class StartEventHandler extends AbstractNodeHandler {
     
@@ -15,10 +24,94 @@
         return StartNode.class;
     }
 
-	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+    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);
+        StartNode startNode = (StartNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("dataOutputAssociation".equals(nodeName)) {
+                readDataOutputAssociation(xmlNode, startNode);
+            } else if ("conditionalEventDefinition".equals(nodeName)) {
+                String constraint = null;
+                org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+                while (subNode != null) {
+                    String subnodeName = subNode.getNodeName();
+                    if ("condition".equals(subnodeName)) {
+                        constraint = xmlNode.getTextContent();
+                        break;
+                    }
+                    subNode = subNode.getNextSibling();
+                }
+                ConstraintTrigger trigger = new ConstraintTrigger();
+                trigger.setConstraint(constraint);
+                startNode.addTrigger(trigger);
+                break;
+            } else if ("signalEventDefinition".equals(nodeName)) {
+                String type = ((Element) xmlNode).getAttribute("signalRef");
+                if (type != null && type.trim().length() > 0) {
+                    EventTrigger trigger = new EventTrigger();
+                    EventTypeFilter eventFilter = new EventTypeFilter();
+                    eventFilter.setType(type);
+                    trigger.addEventFilter(eventFilter);
+                    String mapping = (String) startNode.getMetaData("TriggerMapping");
+                    if (mapping != null) {
+                        trigger.addInMapping(mapping, "event");
+                    }
+                    startNode.addTrigger(trigger);
+                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, StartNode startNode) {
+        // sourceRef
+        org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+        // targetRef
+        subNode = subNode.getNextSibling();
+        String to = subNode.getTextContent();
+        startNode.setMetaData("TriggerMapping", to);
+    }
+
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
 		StartNode startNode = (StartNode) node;
 		writeNode("startEvent", startNode, xmlDump, includeMeta);
-		endNode(xmlDump);
+		List<Trigger> triggers = startNode.getTriggers();
+		if (triggers != null) {
+		    xmlDump.append(">" + EOL);
+		    if (triggers.size() > 1) {
+		        throw new IllegalArgumentException("Multiple start triggers not supported");
+		    }
+		    Trigger trigger = triggers.get(0);
+		    if (trigger instanceof ConstraintTrigger) {
+		        xmlDump.append("      <conditionalEventDefinition>" + EOL);
+                xmlDump.append("        <condition xs:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + ((ConstraintTrigger) trigger).getConstraint() + "</condition>" + EOL);
+                xmlDump.append("      </conditionalEventDefinition>" + EOL);
+		    } else if (trigger instanceof EventTrigger) {
+		        EventTrigger eventTrigger = (EventTrigger) trigger;
+		        if (!trigger.getInMappings().isEmpty()) {
+		            String mapping = eventTrigger.getInMappings().keySet().iterator().next();
+		            xmlDump.append(
+	                    "      <dataOutput id=\"_" + startNode.getId() + "_Output\" />" + EOL +
+                        "      <dataOutputAssociation>" + EOL +
+                        "        <sourceRef>_" + startNode.getId() + "_Output</sourceRef>" + EOL +
+                        "        <targetRef>" + mapping + "</targetRef>" + EOL +
+                        "      </dataOutputAssociation>" + EOL +
+                        "      <outputSet>" + EOL +
+                        "        <dataOutputRefs>_" + startNode.getId() + "_Output</dataOutputRefs>" + EOL +
+                        "      </outputSet>" + EOL);
+		        }
+		        EventTypeFilter filter = (EventTypeFilter) eventTrigger.getEventFilters().get(0);
+                xmlDump.append("      <signalEventDefinition signalRef=\"" + filter.getType() + "\" />" + EOL);
+            } else {
+		        throw new IllegalArgumentException("Unsupported trigger type " + trigger);
+		    }
+		    endNode("startEvent", xmlDump);
+		} else {
+		    endNode(xmlDump);
+		}
 	}
 
 }

Modified: 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	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -5,6 +5,7 @@
 
 import org.drools.bpmn2.core.SequenceFlow;
 import org.drools.definition.process.Connection;
+import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.CompositeContextNode;
@@ -37,12 +38,27 @@
     	List<SequenceFlow> connections = (List<SequenceFlow>)
 			compositeNode.getMetaData(ProcessHandler.CONNECTIONS);
     	ProcessHandler.linkConnections(compositeNode, connections);
+    	ProcessHandler.linkBoundaryEvents(compositeNode);
     }
     
     public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
     	CompositeContextNode compositeNode = (CompositeContextNode) node;
 		writeNode("subProcess", compositeNode, xmlDump, includeMeta);
 		xmlDump.append(" >" + EOL);
+        // variables
+		VariableScope variableScope = (VariableScope) 
+            compositeNode.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+		if (variableScope != null && !variableScope.getVariables().isEmpty()) {
+            xmlDump.append("    <!-- variables -->" + EOL);
+            for (Variable variable: variableScope.getVariables()) {
+                xmlDump.append("    <property id=\"" + variable.getName() + "\" ");
+                if (variable.getType() != null) {
+                    xmlDump.append("itemSubjectRef=\"_" + compositeNode.getUniqueId() + "-" + variable.getName() + "Item\"" );
+                }
+                // TODO: value
+                xmlDump.append("/>" + EOL);
+            }
+		}
 		// nodes
 		List<Node> subNodes = getSubNodes(compositeNode);
     	xmlDump.append("    <!-- nodes -->" + EOL);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -62,7 +62,7 @@
         if ("Send Task".equals(type)) {
             writeNode("sendTask", workItemNode, xmlDump, includeMeta);
             xmlDump.append("messageRef=\"_" + 
-                    XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+                    XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" implementation=\"Other\" >" + EOL);
                 xmlDump.append(
                     "      <ioSpecification>" + EOL +
                     "        <dataInput id=\"_2_param\" name=\"Message\" />" + EOL +
@@ -85,7 +85,7 @@
         if ("Receive Task".equals(type)) {
             writeNode("receiveTask", workItemNode, xmlDump, includeMeta);
             xmlDump.append("messageRef=\"_" + 
-                    XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+                    XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" implementation=\"Other\" >" + EOL);
                 xmlDump.append(
                     "      <ioSpecification>" + EOL +
                     "        <dataOutput id=\"_2_result\" name=\"Message\" />" + 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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -9,6 +9,7 @@
 import org.drools.definition.process.Node;
 import org.drools.definition.process.NodeContainer;
 import org.drools.definition.process.WorkflowProcess;
+import org.drools.process.core.ContextContainer;
 import org.drools.process.core.Work;
 import org.drools.process.core.context.swimlane.Swimlane;
 import org.drools.process.core.context.swimlane.SwimlaneContext;
@@ -67,17 +68,8 @@
     	// item definitions
     	VariableScope variableScope = (VariableScope)
     		((org.drools.process.core.Process) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
-	    if (variableScope != null && !variableScope.getVariables().isEmpty()) {
-	    	for (Variable variable: variableScope.getVariables()) {
-	            xmlDump.append(
-            		"  <itemDefinition id=\"" + variable.getName() + "Item\" ");
-	            if (variable.getType() != null) {
-	            	xmlDump.append("structureRef=\"" + variable.getType().getStringType() + "\" ");
-	            }
-	            xmlDump.append("/>" + EOL);
-	        }
-	    	xmlDump.append(EOL);
-	    }
+    	visitVariableScope(variableScope, "_", xmlDump);
+    	visitSubVariableScopes(process.getNodes(), xmlDump);
         
 	    xmlDump.append(
     		"  <resource id=\"Actor\" name=\"Human Actor\" />" + EOL + EOL);
@@ -106,6 +98,35 @@
         xmlDump.append("</definitions>");
     }
     
+    private void visitVariableScope(VariableScope variableScope, String prefix, StringBuilder xmlDump) {
+        if (variableScope != null && !variableScope.getVariables().isEmpty()) {
+            for (Variable variable: variableScope.getVariables()) {
+                xmlDump.append(
+                    "  <itemDefinition id=\"" + prefix + variable.getName() + "Item\" ");
+                if (variable.getType() != null) {
+                    xmlDump.append("structureRef=\"" + variable.getType().getStringType() + "\" ");
+                }
+                xmlDump.append("/>" + EOL);
+            }
+            xmlDump.append(EOL);
+        }
+    }
+    
+    private void visitSubVariableScopes(Node[] nodes, StringBuilder xmlDump) {
+        for (Node node: nodes) {
+            if (node instanceof ContextContainer) {
+                VariableScope variableScope = (VariableScope) 
+                    ((ContextContainer) node).getDefaultContext(VariableScope.VARIABLE_SCOPE);
+                if (variableScope != null) {
+                    visitVariableScope(variableScope, "_" + ((NodeImpl) node).getUniqueId() + "-", xmlDump);
+                }
+            }
+            if (node instanceof NodeContainer) {
+                visitSubVariableScopes(((NodeContainer) node).getNodes(), xmlDump);
+            }
+        }
+    }
+    
     private void visitLanes(WorkflowProcess process, StringBuilder xmlDump) {
         // lanes
         Collection<Swimlane> swimlanes = ((SwimlaneContext)
@@ -154,16 +175,30 @@
     }
     
     public static void visitVariables(List<Variable> variables, StringBuilder xmlDump) {
-    	xmlDump.append("    <!-- process variables -->" + EOL);
-        for (Variable variable: variables) {
-            xmlDump.append("    <property id=\"" + variable.getName() + "\" ");
-            if (variable.getType() != null) {
-            	xmlDump.append("itemSubjectRef=\"" + variable.getName() + "Item\"" );
+    	if (!variables.isEmpty()) {
+            xmlDump.append("    <!-- process variables -->" + EOL);
+            for (Variable variable: variables) {
+                if (variable.getMetaData("DataObject") == null) {
+                    xmlDump.append("    <property id=\"" + variable.getName() + "\" ");
+                    if (variable.getType() != null) {
+                    	xmlDump.append("itemSubjectRef=\"_" + variable.getName() + "Item\"" );
+                    }
+                    // TODO: value?
+                    xmlDump.append("/>" + EOL);
+                }
             }
-            // TODO: value
-            xmlDump.append("/>" + EOL);
-        }
-        xmlDump.append(EOL);
+            for (Variable variable: variables) {
+                if (variable.getMetaData("DataObject") != null) {
+                    xmlDump.append("    <dataObject id=\"" + variable.getName() + "\" ");
+                    if (variable.getType() != null) {
+                        xmlDump.append("itemSubjectRef=\"_" + variable.getName() + "Item\"" );
+                    }
+                    // TODO: value?
+                    xmlDump.append("/>" + EOL);
+                }
+            }
+            xmlDump.append(EOL);
+    	}
     }
     
     protected void visitInterfaces(WorkflowProcess process, StringBuilder xmlDump) {

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,15 @@
+package org.drools.bpmn2;
+
+public class Person {
+    
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+}

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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,14 +1,9 @@
 package org.drools.bpmn2;
 
-import java.io.ByteArrayInputStream;
 import java.io.StringReader;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
-import javax.xml.parsers.DocumentBuilderFactory;
-
 import junit.framework.TestCase;
 
 import org.drools.KnowledgeBase;
@@ -28,12 +23,9 @@
 import org.drools.builder.ResourceType;
 import org.drools.compiler.PackageBuilderConfiguration;
 import org.drools.io.ResourceFactory;
-import org.drools.persistence.jpa.JPAKnowledgeService;
 import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
 import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
 import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.runtime.Environment;
-import org.drools.runtime.EnvironmentName;
 import org.drools.runtime.StatefulKnowledgeSession;
 import org.drools.runtime.process.ProcessInstance;
 import org.drools.runtime.process.WorkItem;
@@ -41,9 +33,7 @@
 import org.drools.runtime.process.WorkItemManager;
 import org.drools.runtime.process.WorkflowProcessInstance;
 import org.drools.xml.XmlProcessReader;
-import org.w3c.dom.Document;
 
-import bitronix.tm.TransactionManagerServices;
 import bitronix.tm.resource.jdbc.PoolingDataSource;
 
 public class SimpleBPMNProcessTest extends TestCase {
@@ -62,6 +52,15 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
+    public void testDataObject() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-DataObject.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("employee", "UserId-12345");
+        ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
 	public void testEvaluationProcess() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -119,6 +118,15 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 	
+    public void testInclusiveSplit() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-InclusiveSplit.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", 15);
+        ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+    
 //	public void testExclusiveSplitXPath() throws Exception {
 //        KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplitXPath.xml");
 //        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -164,6 +172,45 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
+    public void testEscalationBoundaryEvent() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-EscalationBoundaryEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("EscalationBoundaryEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
+    public void testEscalationBoundaryEventInterrupting() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-EscalationBoundaryEventInterrupting.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+        ProcessInstance processInstance = ksession.startProcess("EscalationBoundaryEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
+    public void testTimerBoundaryEvent() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+        ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        Thread.sleep(1000);
+        System.out.println("Firing timer");
+        ksession.fireAllRules();
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
+    public void testTimerBoundaryEventInterrupting() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventInterrupting.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+        ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        Thread.sleep(1000);
+        System.out.println("Firing timer");
+        ksession.fireAllRules();
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
     public void testAdHocSubProcess() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocSubProcess.xml");
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -212,6 +259,13 @@
         assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
     }
 
+    public void testEscalationEventProcess() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-EscalationEndEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("EscalationEndEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
+    }
+
     public void testGraphicalInformation() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -256,6 +310,49 @@
         assertEquals("Hello john!", processInstance.getVariable("s"));
     }
 
+    public void testConditionalStart() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-ConditionalStart.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Person person = new Person();
+        person.setName("jack");
+        ksession.insert(person);
+        ksession.fireAllRules();
+        person = new Person();
+        person.setName("john");
+        ksession.insert(person);
+        ksession.fireAllRules();
+    }
+    
+    public void testSignalStart() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-SignalStart.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.signalEvent("MyStartSignal", "NewValue");
+    }
+    
+    public void testSignalEnd() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-SignalEndEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", "MyValue");
+        ksession.startProcess("SignalEndEvent", params);
+    }
+    
+    public void testSignalIntermediateThrow() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventSignal.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", "MyValue");
+        ProcessInstance processInstance = ksession.startProcess("SignalIntermediateEvent", params);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+    
+    public void testNoneIntermediateThrow() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventNone.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("NoneIntermediateEvent", null);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+    
 //    public void testPersistence() throws Exception {
 //        setupDataSource();
 //        EntityManagerFactory emf = Persistence.createEntityManagerFactory(
@@ -295,7 +392,7 @@
 		RuleFlowProcess p = (RuleFlowProcess)
 		    processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/" + process));
 		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
-//		System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+		System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
 		kbuilder.add(ResourceFactory.newReaderResource(
             new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
 		if (!kbuilder.getErrors().isEmpty()) {

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -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.jboss.org/drools">
+
+  <process id="Minimal" name="Minimal Process" processType="executable" tns:packageName="com.sample">
+    <startEvent id="_1" name="StartProcess">
+      <conditionalEventDefinition>
+        <condition>org.drools.bpmn2.Person(name == "john")</condition>
+      </conditionalEventDefinition>
+    </startEvent>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <scriptTask id="_2" name="Hello">
+      <script>System.out.println("Hello World");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/EvaluationExample"
+             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/EvaluationExample">
+
+  <!-- item definitions -->
+  <itemDefinition id="employeeId" structureRef="java.lang.String" />
+  
+  <process id="Evaluation" name="Evaluation Process">
+    
+    <!-- process variables -->
+    <dataObject id="employee" itemSubjectRef="tns:employeeId" />
+  
+    <!-- nodes -->  
+    <startEvent id="_1" name="StartProcess"/>
+    <scriptTask id="_2" name="Log">
+      <script>System.out.println("Processing evaluation for employee " + employee);</script>
+    </scriptTask>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    
+    <!-- connections -->
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    
+  </process>
+</definitions>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,37 @@
+<?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="EscalationBoundaryEvent" name="Escalation Boundary Event Process">
+    <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"/>
+      <endEvent id="_2-2" name="EscalationEvent">
+        <escalationEventDefinition escalationCode="MyEscalation"/>
+      </endEvent>
+    </subProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    <boundaryEvent id="_4" name="EscalationEvent" attachedToRef="_2" cancelActivity="false">
+      <escalationEventDefinition escalationCode="MyEscalation" />
+    </boundaryEvent>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <scriptTask id="_5" name="Goodbye">
+      <script>System.out.println("Escalation handled");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <endEvent id="_6" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,41 @@
+<?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="EscalationBoundaryEvent" name="Escalation Boundary Event Process">
+    <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"/>
+      <parallelGateway id="_2-2" gatewayDirection="diverging"/>
+      <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+      <endEvent id="_2-3" name="EscalationEvent">
+        <escalationEventDefinition escalationCode="MyEscalation"/>
+      </endEvent>
+      <sequenceFlow sourceRef="_2-2" targetRef="_2-4"/>
+      <task id="_2-4" name="Task" tns:taskName="MyTask" />
+      <sequenceFlow sourceRef="_2-4" targetRef="_2-5"/>
+      <endEvent id="_2-5" name="EndEvent"/>
+    </subProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    <boundaryEvent id="_4" name="EscalationEvent" attachedToRef="_2" >
+      <escalationEventDefinition escalationCode="MyEscalation" />
+    </boundaryEvent>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <scriptTask id="_5" name="Goodbye">
+      <script>System.out.println("Escalation handled");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <endEvent id="_6" name="EndProcess"/>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,18 @@
+<?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="EscalationEndEvent" name="Escalation End Event Process">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <endEvent id="_2" name="EscalationEvent">
+      <escalationEventDefinition escalationCode="MyEscalation"/>
+    </endEvent>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<definitions id="Definition"
+             targetNamespace="http://www.jboss.org/drools"
+             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:g="http://www.jboss.org/drools/flow/gpd"
+             xmlns:tns="http://www.jboss.org/drools">
+
+  <itemDefinition id="xItem" structureRef="java.lang.Integer" />
+
+  <process id="com.sample.test" name="Test" >
+
+    <!-- process variables -->
+    <property id="x" itemSubjectRef="tns:xItem"/>
+
+    <!-- nodes -->
+    <startEvent id="_1" name="Start" />
+    <inclusiveGateway id="_2" name="Split" gatewayDirection="diverging" />
+    <scriptTask id="_3" name="Script1" >
+      <script>System.out.println("path1");</script>
+    </scriptTask>
+    <scriptTask id="_4" name="Script2" >
+      <script>System.out.println("path2");</script>
+    </scriptTask>
+    <scriptTask id="_5" name="Script3" >
+      <script>System.out.println("path3");</script>
+    </scriptTask>
+    <endEvent id="_6" name="End" />
+    <endEvent id="_7" name="End" />
+    <endEvent id="_8" name="End" />
+
+    <!-- connections -->
+    <sequenceFlow sourceRef="_1" targetRef="_2" />
+    <sequenceFlow sourceRef="_2" targetRef="_3" >
+      <conditionExpression>return x > 0;</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_2" targetRef="_4" >
+      <conditionExpression>return x > 10;</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_2" targetRef="_5" >
+      <conditionExpression>return x > 20;</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_3" targetRef="_6" />
+    <sequenceFlow sourceRef="_4" targetRef="_7" />
+    <sequenceFlow sourceRef="_5" targetRef="_8" />
+
+  </process>
+
+</definitions>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,23 @@
+<?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="NoneIntermediateEvent" name="None Intermediate Throw Event Process">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <intermediateThrowEvent id="_2" name="NoneEvent"/>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndEvent"/>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,33 @@
+<?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="SignalIntermediateEvent" name="Signal Intermediate Throw Event Process">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <intermediateThrowEvent id="_2" name="SignalEvent">
+      <dataInput id="_2_Input" />
+      <dataInputAssociation>
+        <sourceRef>x</sourceRef>
+        <targetRef>_2_Input</targetRef>
+      </dataInputAssociation>
+      <inputSet>
+        <dataInputRefs>_2_Input</dataInputRefs>
+      </inputSet>
+      <signalEventDefinition signalRef="MySignal"/>
+    </intermediateThrowEvent>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndEvent"/>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,31 @@
+<?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="SignalEndEvent" name="Error End Event Process">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <endEvent id="_2" name="ErrorEvent">
+      <dataInput id="_2_Input" />
+      <dataInputAssociation>
+        <sourceRef>x</sourceRef>
+        <targetRef>_2_Input</targetRef>
+      </dataInputAssociation>
+      <inputSet>
+        <dataInputRefs>_2_Input</dataInputRefs>
+      </inputSet>
+      <signalEventDefinition signalRef="MySignal"/>
+    </endEvent>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,37 @@
+<?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.jboss.org/drools">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+
+  <process id="Minimal" name="Minimal Process" processType="executable" tns:packageName="com.sample">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess">
+      <dataOutput id="_1_Output" />
+      <dataOutputAssociation>
+        <sourceRef>_1_Output</sourceRef>
+        <targetRef>x</targetRef>
+      </dataOutputAssociation>
+      <outputSet>
+        <dataOutputRefs>_1_Output</dataOutputRefs>
+      </outputSet>
+      <signalEventDefinition signalRef="MyStartSignal" />
+    </startEvent>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <scriptTask id="_2" name="Hello">
+      <script>System.out.println("x = " + x);</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>

Modified: 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	2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -8,17 +8,28 @@
              xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
              xmlns:tns="http://www.example.org/MinimalExample">
 
+  <itemDefinition id="_2-xType" structureRef="java.lang.String" />
+  
   <process id="SubProcess" name="Minimal SubProcess">
     <startEvent id="_1" name="StartProcess"/>
     <sequenceFlow sourceRef="_1" targetRef="_2"/>
     <subProcess id="_2" name="Hello" >
+      <property id="x" itemSubjectRef="tns:_2-xType" />
       <startEvent id="_2-1" name="StartSubProcess"/>
       <sequenceFlow sourceRef="_2-1" targetRef="_2-2"/>
       <scriptTask id="_2-2" name="Hello">
-        <script>System.out.println("Hello World");</script>
+        <script>System.out.println("x = " + x);</script>
       </scriptTask>
       <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
-      <endEvent id="_2-3" name="EndSubProcess"/>
+      <scriptTask id="_2-3" name="Hello">
+        <script>kcontext.setVariable("x", "Hello");</script>
+      </scriptTask>
+      <sequenceFlow sourceRef="_2-3" targetRef="_2-4"/>
+      <scriptTask id="_2-4" name="Hello">
+        <script>System.out.println("x = " + x);</script>
+      </scriptTask>
+      <sequenceFlow sourceRef="_2-4" targetRef="_2-5"/>
+      <endEvent id="_2-5" name="EndSubProcess"/>
     </subProcess>
     <sequenceFlow sourceRef="_2" targetRef="_3"/>
     <scriptTask id="_3" name="Goodbye">

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,39 @@
+<?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="TimerBoundaryEvent" name="Timer Boundary Event Process">
+    <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"/>
+      <task id="_2-2" name="Task" tns:taskName="MyTask" />
+      <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+      <endEvent id="_2-3" name="EscalationEvent"/>
+    </subProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    <boundaryEvent id="_4" name="TimerEvent" attachedToRef="_2" cancelActivity="false">
+      <timerEventDefinition>
+        <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+      </timerEventDefinition>
+    </boundaryEvent>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <scriptTask id="_5" name="Goodbye">
+      <script>System.out.println("Timer handled");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <endEvent id="_6" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml	2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,37 @@
+<?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="TimerBoundaryEvent" name="Timer Boundary Event Process">
+    <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"/>
+      <task id="_2-2" name="Task" tns:taskName="MyTask" />
+      <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+      <endEvent id="_2-3" name="EscalationEvent"/>
+    </subProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    <boundaryEvent id="_4" name="TimerEvent" attachedToRef="_2">
+      <timerEventDefinition>
+        <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+      </timerEventDefinition>
+    </boundaryEvent>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <scriptTask id="_5" name="Goodbye">
+      <script>System.out.println("Timer handled");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <endEvent id="_6" name="EndProcess"/>
+  </process>
+</definitions>



More information about the jboss-svn-commits mailing list