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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Jan 19 15:06:10 EST 2010


Author: KrisVerlaenen
Date: 2010-01-19 15:06:10 -0500 (Tue, 19 Jan 2010)
New Revision: 31150

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventMessage.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml
Modified:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
   labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
   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/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/BoundaryEventHandler.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/IntermediateCatchEventHandler.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/main/java/org/drools/bpmn2/xml/ProcessHandler.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/XmlBPMNProcessDumper.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
 - added some more BPMN2 nodes

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath	2010-01-19 20:06:10 UTC (rev 31150)
@@ -13,10 +13,10 @@
   <classpathentry kind="var" path="M2_REPO/org/codehaus/janino/com.springsource.org.codehaus.janino/2.5.15/com.springsource.org.codehaus.janino-2.5.15.jar"/>
   <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
   <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
-  <classpathentry kind="src" path="/drools-api"/>
-  <classpathentry kind="src" path="/drools-compiler"/>
-  <classpathentry kind="src" path="/drools-core"/>
-  <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/geronimo-jms_1.1_spec-1.0.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/geronimo-jta_1.0.1B_spec-1.0.1.jar"/>
@@ -29,7 +29,7 @@
   <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
   <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar" sourcepath="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1-sources.jar"/>
+  <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
   <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
   <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.project	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.project	2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,11 +1,7 @@
 <projectDescription>
   <name>drools-bpmn2</name>
   <comment>A rule production system</comment>
-  <projects>
-    <project>drools-api</project>
-    <project>drools-compiler</project>
-    <project>drools-core</project>
-  </projects>
+  <projects/>
   <buildSpec>
     <buildCommand>
       <name>org.eclipse.jdt.core.javabuilder</name>

Modified: 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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -26,9 +26,26 @@
 		    if ("".equals(s)) {
 		        writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
 		        endNode(xmlDump);
-		    } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+		    } else if (s.startsWith("org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();")) {
                 writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
                 xmlDump.append(">" + EOL);
+                String variable = (String) actionNode.getMetaData("MappingVariable");
+                if (variable != null) {
+                    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("      <messageEventDefinition messageRef=\"" + "_" + actionNode.getUniqueId() + "_Message\"/>" + EOL);
+                endNode("intermediateThrowEvent", 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);
@@ -45,8 +62,20 @@
                         "        <dataInputRefs>_" + actionNode.getUniqueId() + "_Input</dataInputRefs>" + EOL + 
                         "      </inputSet>" + EOL);
                 }
-                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+                if (type.startsWith("Compensate-")) {
+	                xmlDump.append("      <compensateEventDefinition activityRef=\"" + type.substring(11) + "\"/>" + EOL);
+                } else {
+	                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+                }
                 endNode("intermediateThrowEvent", xmlDump);
+            } else if (s.startsWith("org.drools.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"")) {
+                writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+                xmlDump.append(">" + EOL);
+                s = s.substring(327);
+                String type = s.substring(0, s.indexOf("\""));
+                s = s.substring(s.indexOf(",") + 2);
+                xmlDump.append("      <escalationEventDefinition escalationCode=\"" + type + "\"/>" + EOL);
+                endNode("intermediateThrowEvent", xmlDump);
             } else {
                 writeNode("scriptTask", actionNode, xmlDump, includeMeta);
                 if (JavaDialect.ID.equals(action.getDialect())) {

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,11 +1,13 @@
 package org.drools.bpmn2.xml;
 
 import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeContextNode;
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.core.node.FaultNode;
 import org.drools.workflow.core.node.Join;
 import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
 import org.drools.workflow.core.node.TimerNode;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.DefaultSemanticModule;
@@ -41,6 +43,7 @@
         addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
         addHandler("boundaryEvent", new BoundaryEventHandler());
         addHandler("dataObject", new DataObjectHandler());
+        addHandler("transaction", new TransactionHandler());
         
 		addHandler("sequenceFlow", new SequenceFlowHandler());
 		
@@ -58,6 +61,8 @@
         handlersByClass.put(FaultNode.class, new FaultNodeHandler());
         handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
         handlersByClass.put(ActionNode.class, new ActionNodeHandler());
+        handlersByClass.put(StateNode.class, new StateNodeHandler());
+        handlersByClass.put(CompositeContextNode.class, new CompositeContextNodeHandler());
 	}
 
 }

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,11 +1,13 @@
 package org.drools.bpmn2.xml;
 
 import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeContextNode;
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.core.node.FaultNode;
 import org.drools.workflow.core.node.Join;
 import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
 import org.drools.workflow.core.node.TimerNode;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.DefaultSemanticModule;
@@ -41,6 +43,7 @@
         addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
         addHandler("boundaryEvent", new BoundaryEventHandler());
         addHandler("dataObject", new DataObjectHandler());
+        addHandler("transaction", new TransactionHandler());
 
         addHandler("sequenceFlow", new SequenceFlowHandler());
 
@@ -58,6 +61,8 @@
         handlersByClass.put(FaultNode.class, new FaultNodeHandler());
         handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
         handlersByClass.put(ActionNode.class, new ActionNodeHandler());
+        handlersByClass.put(StateNode.class, new StateNodeHandler());
+        handlersByClass.put(CompositeContextNode.class, new CompositeContextNodeHandler());
 	}
 
 }

Modified: 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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -43,10 +43,18 @@
                 // reuse already created EventNode
                 handleEscalationNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
                 break;
+            } else if ("errorEventDefinition".equals(nodeName)) {
+                // reuse already created EventNode
+                handleErrorNode(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;
+            } else if ("compensateEventDefinition".equals(nodeName)) {
+                // reuse already created EventNode
+                handleCompensationNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
+                break;
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -80,6 +88,30 @@
         }
     }
     
+    protected void handleErrorNode(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);
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("errorEventDefinition".equals(nodeName)) {
+                String type = ((Element) xmlNode).getAttribute("errorCode");
+                if (type != null && type.trim().length() > 0) {
+                    List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                    EventTypeFilter eventFilter = new EventTypeFilter();
+                    eventFilter.setType("Error-" + attachedTo + "-" + type);
+                    eventFilters.add(eventFilter);
+                    eventNode.setEventFilters(eventFilters);
+                    eventNode.setMetaData("ErrorEvent", 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 {
@@ -114,6 +146,31 @@
         }
     }
     
+    protected void handleCompensationNode(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 ("compensateEventDefinition".equals(nodeName)) {
+                String activityRef = ((Element) xmlNode).getAttribute("activityRef");
+                if (activityRef != null && activityRef.trim().length() > 0) {
+                    List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                    EventTypeFilter eventFilter = new EventTypeFilter();
+                    eventFilter.setType("Compensate-" + eventNode.getUniqueId());
+                    eventFilters.add(eventFilter);
+                    eventNode.setEventFilters(eventFilters);
+                    eventNode.setMetaData("CompensationEvent", activityRef);
+                }
+            }
+            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/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -2,7 +2,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
+import org.drools.bpmn2.core.Message;
 import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.NodeContainer;
@@ -10,6 +12,7 @@
 import org.drools.workflow.core.node.EndNode;
 import org.drools.workflow.core.node.FaultNode;
 import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -98,6 +101,7 @@
         }
     }
     
+    @SuppressWarnings("unchecked")
     public void handleMessageNode(final Node node, final Element element, final String uri, 
             final String localName, final ExtensibleXmlParser parser) throws SAXException {
         EndNode endNode = (EndNode) node;
@@ -107,12 +111,26 @@
             if ("dataInputAssociation".equals(nodeName)) {
                 readEndDataInputAssociation(xmlNode, endNode);
             } else if ("messageEventDefinition".equals(nodeName)) {
-                String signalName = ((Element) xmlNode).getAttribute("messageRef");
+                String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+                Map<String, Message> messages = (Map<String, Message>)
+                    ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+                if (messages == null) {
+                    throw new IllegalArgumentException("No messages found");
+                }
+                Message message = messages.get(messageRef);
+                if (message == null) {
+                    throw new IllegalArgumentException("Could not find message " + messageRef);
+                }
                 String variable = (String) endNode.getMetaData("MappingVariable");
+                endNode.setMetaData("MessageType", message.getType());
                 List<DroolsAction> actions = new ArrayList<DroolsAction>();
-                actions.add(new DroolsConsequenceAction("mvel",
-                    "kcontext.getKnowledgeRuntime().signalEvent(\""
-                        + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+                
+                actions.add(new DroolsConsequenceAction("java",
+                    "org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();" + EOL + 
+                    "workItem.setName(\"Send Task\");" + EOL + 
+                    "workItem.setParameter(\"MessageType\", \"" + message.getType() + "\");" + EOL + 
+                    (variable == null ? "" : "workItem.setParameter(\"Message\", " + variable + ");" + EOL) +
+                    "((org.drools.process.instance.WorkItemManager) kcontext.getKnowledgeRuntime().getWorkItemManager()).internalExecuteWorkItem(workItem);"));
                 endNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
             }
             xmlNode = xmlNode.getNextSibling();

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -32,7 +32,23 @@
 		        if (actions.size() == 1) {
 		            DroolsConsequenceAction action = (DroolsConsequenceAction) actions.get(0);
 		            String s = action.getConsequence();
-		            if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+		            if (s.startsWith("org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();")) {
+		                xmlDump.append(">" + EOL);
+                        String variable = (String) endNode.getMetaData("MappingVariable");
+                        if (variable != null) {
+                            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("      <messageEventDefinition messageRef=\"" + "_" + endNode.getUniqueId() + "_Message\"/>" + EOL);
+                        endNode("endEvent", xmlDump);
+		            } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
                         xmlDump.append(">" + EOL);
 		                s = s.substring(44);
 		                String type = s.substring(0, s.indexOf("\""));

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -35,8 +35,12 @@
     		}
     		if (eventNode.getEventFilters().size() > 0) {
     			String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
-    			xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
-    			
+    			if (type.startsWith("Message-")) {
+    			    type = type.substring(8);
+    			    xmlDump.append("      <messageEventDefinition messageRef=\"" + type + "\"/>" + EOL);
+                } else {
+                    xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+                }
     		}
     		endNode("intermediateCatchEvent", xmlDump);
 		} else {
@@ -52,8 +56,15 @@
     		    xmlDump.append(">" + EOL);
     		    xmlDump.append("      <escalationEventDefinition escalationCode=\"" + type + "\" />" + EOL);
     		    endNode("boundaryEvent", xmlDump);
-		    } else if (type.startsWith("Timer-")) {
+		    } else if (type.startsWith("Error-")) {
                 type = type.substring(attachedTo.length() + 7);
+                writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
+                xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
+                xmlDump.append(">" + EOL);
+                xmlDump.append("      <errorEventDefinition errorCode=\"" + 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 + "\" ");

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -2,15 +2,19 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
+import org.drools.bpmn2.core.Message;
 import org.drools.process.core.event.EventFilter;
 import org.drools.process.core.event.EventTypeFilter;
 import org.drools.process.core.timer.Timer;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.NodeContainer;
 import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.StateNode;
 import org.drools.workflow.core.node.TimerNode;
 import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -39,6 +43,10 @@
                 // reuse already created EventNode
                 handleSignalNode(node, element, uri, localName, parser);
                 break;
+            } else if ("messageEventDefinition".equals(nodeName)) {
+                // reuse already created EventNode
+                handleMessageNode(node, element, uri, localName, parser);
+                break;
             } else if ("timerEventDefinition".equals(nodeName)) {
                 // create new timerNode
                 TimerNode timerNode = new TimerNode();
@@ -47,6 +55,14 @@
                 node = timerNode;
                 handleTimerNode(node, element, uri, localName, parser);
                 break;
+            } else if ("conditionalEventDefinition".equals(nodeName)) {
+                // create new stateNode
+                StateNode stateNode = new StateNode();
+                stateNode.setId(node.getId());
+                stateNode.setName(node.getName());
+                node = stateNode;
+                handleStateNode(node, element, uri, localName, parser);
+                break;
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -78,6 +94,38 @@
         }
     }
     
+    @SuppressWarnings("unchecked")
+    protected void handleMessageNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        super.handleNode(node, element, uri, localName, parser);
+        EventNode eventNode = (EventNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("dataOutputAssociation".equals(nodeName)) {
+                readDataOutputAssociation(xmlNode, eventNode);
+            } else if ("messageEventDefinition".equals(nodeName)) {
+                String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+                Map<String, Message> messages = (Map<String, Message>)
+                    ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+                if (messages == null) {
+                    throw new IllegalArgumentException("No messages found");
+                }
+                Message message = messages.get(messageRef);
+                if (message == null) {
+                    throw new IllegalArgumentException("Could not find message " + messageRef);
+                }
+                eventNode.setMetaData("MessageType", message.getType());
+                List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                EventTypeFilter eventFilter = new EventTypeFilter();
+                eventFilter.setType("Message-" + messageRef);
+                eventFilters.add(eventFilter);
+                eventNode.setEventFilters(eventFilters);
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
     protected void handleTimerNode(final Node node, final Element element, final String uri, 
             final String localName, final ExtensibleXmlParser parser) throws SAXException {
         super.handleNode(node, element, uri, localName, parser);
@@ -103,6 +151,28 @@
         }
     }
     
+    protected void handleStateNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        super.handleNode(node, element, uri, localName, parser);
+        StateNode stateNode = (StateNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("conditionalEventDefinition".equals(nodeName)) {
+                org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+                while (subNode != null) {
+                    String subnodeName = subNode.getNodeName();
+                    if ("condition".equals(subnodeName)) {
+                        stateNode.setMetaData("Condition", xmlNode.getTextContent());
+                        break;
+                    }
+                    subNode = subNode.getNextSibling();
+                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
     protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, EventNode eventNode) {
 		// sourceRef
 		org.w3c.dom.Node subNode = xmlNode.getFirstChild();

Modified: 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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,10 +1,14 @@
 package org.drools.bpmn2.xml;
 
+import java.util.Map;
+
+import org.drools.bpmn2.core.Message;
 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.drools.xml.ProcessBuildData;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -33,6 +37,18 @@
                 // reuse already created ActionNode
                 handleSignalNode(node, element, uri, localName, parser);
                 break;
+            } else if ("messageEventDefinition".equals(nodeName)) {
+                // reuse already created ActionNode
+                handleMessageNode(node, element, uri, localName, parser);
+                break;
+            } else if ("escalationEventDefinition".equals(nodeName)) {
+                // reuse already created ActionNode
+                handleEscalationNode(node, element, uri, localName, parser);
+                break;
+            } else if ("compensateEventDefinition".equals(nodeName)) {
+                // reuse already created ActionNode
+                handleCompensationNode(node, element, uri, localName, parser);
+                break;
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -64,6 +80,84 @@
         }
     }
     
+    @SuppressWarnings("unchecked")
+    public void handleMessageNode(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 ("messageEventDefinition".equals(nodeName)) {
+                String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+                Map<String, Message> messages = (Map<String, Message>)
+                    ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+                if (messages == null) {
+                    throw new IllegalArgumentException("No messages found");
+                }
+                Message message = messages.get(messageRef);
+                if (message == null) {
+                    throw new IllegalArgumentException("Could not find message " + messageRef);
+                }
+                String variable = (String) actionNode.getMetaData("MappingVariable");
+                actionNode.setMetaData("MessageType", message.getType());
+                actionNode.setAction(new DroolsConsequenceAction("java",
+                    "org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();" + EOL + 
+                    "workItem.setName(\"Send Task\");" + EOL + 
+                    "workItem.setParameter(\"MessageType\", \"" + message.getType() + "\");" + EOL + 
+                    (variable == null ? "" : "workItem.setParameter(\"Message\", " + variable + ");" + EOL) +
+                    "((org.drools.process.instance.WorkItemManager) kcontext.getKnowledgeRuntime().getWorkItemManager()).internalExecuteWorkItem(workItem);"));
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    public void handleEscalationNode(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 ("escalationEventDefinition".equals(nodeName)) {
+                String faultName = ((Element) xmlNode).getAttribute("escalationCode");
+                if (faultName != null && faultName.trim().length() > 0) {
+                    actionNode.setAction(new DroolsConsequenceAction("java",
+                        "org.drools.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"" + faultName + "\");" + EOL + 
+                        "if (scopeInstance != null) {" + EOL + 
+                        "  scopeInstance.handleException(\"" + faultName + "\", null);" + EOL + 
+                        "} else {" + EOL + 
+                        "    ((org.drools.process.instance.ProcessInstance) kcontext.getProcessInstance()).setState(org.drools.process.instance.ProcessInstance.STATE_ABORTED);" + EOL + 
+                        "}"));
+                }
+            } 
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    public void handleCompensationNode(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 ("compensateEventDefinition".equals(nodeName)) {
+                String activityRef = ((Element) xmlNode).getAttribute("activityRef");
+                if (activityRef != null && activityRef.trim().length() > 0) {
+                	actionNode.setMetaData("activityRef", activityRef);
+                }
+//                boolean waitForCompletion = true;
+//                String waitForCompletionString = ((Element) xmlNode).getAttribute("waitForCompletion");
+//                if ("false".equals(waitForCompletionString)) {
+//                    waitForCompletion = false;
+//                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
     protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, ActionNode actionNode) {
         // sourceRef
         org.w3c.dom.Node subNode = xmlNode.getFirstChild();

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -30,6 +30,7 @@
 import org.drools.workflow.core.node.EventNode;
 import org.drools.workflow.core.node.HumanTaskNode;
 import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
 import org.drools.xml.Handler;
@@ -95,6 +96,7 @@
         List<Lane> lanes = (List<Lane>)
             process.getMetaData(LaneHandler.LANES);
         assignLanes(process, lanes);
+        postProcessStateNodes(process);
 		return process;
 	}
 
@@ -210,6 +212,21 @@
                             (cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
                             "kcontext.getProcessInstance().signalEvent(\"Escalation-" + attachedTo + "-" + escalationCode + "\", null);"));
                         exceptionScope.setExceptionHandler(escalationCode, exceptionHandler);
+                    } else if (type.startsWith("Error-")) {
+                        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 errorCode = (String) node.getMetaData("ErrorEvent");
+                        ActionExceptionHandler exceptionHandler = new ActionExceptionHandler();
+                        exceptionHandler.setAction(new DroolsConsequenceAction("java",
+                            "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" +
+                            "kcontext.getProcessInstance().signalEvent(\"Error-" + attachedTo + "-" + errorCode + "\", null);"));
+                        exceptionScope.setExceptionHandler(errorCode, exceptionHandler);
                     } else if (type.startsWith("Timer-")) {
                         boolean cancelActivity = (Boolean) node.getMetaData("CancelActivity");
                         CompositeContextNode compositeNode = (CompositeContextNode) attachedNode;
@@ -245,6 +262,23 @@
 	    assignLanes(process, laneMapping);
 	}
 	
+    private void postProcessStateNodes(NodeContainer container) {
+        for (Node node: container.getNodes()) {
+            if (node instanceof StateNode) {
+                StateNode stateNode = (StateNode) node;
+                String condition = (String) stateNode.getMetaData("Condition");
+                Constraint constraint = new ConstraintImpl();
+                constraint.setConstraint(condition);
+                constraint.setType("rule");
+                for (org.drools.definition.process.Connection connection: stateNode.getDefaultOutgoingConnections()) {
+                    stateNode.setConstraint(connection, constraint);
+                }
+            } else if (node instanceof NodeContainer) {
+                postProcessStateNodes((NodeContainer) node);
+            }
+        }
+    }
+    
 	private void assignLanes(NodeContainer nodeContainer, Map<String, String> laneMapping) {
 	    for (Node node: nodeContainer.getNodes()) {
 	        String lane = null;

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	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,7 +1,9 @@
 package org.drools.bpmn2.xml;
 
 import java.util.List;
+import java.util.Map;
 
+import org.drools.bpmn2.core.Message;
 import org.drools.process.core.event.EventTypeFilter;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.ConstraintTrigger;
@@ -9,6 +11,7 @@
 import org.drools.workflow.core.node.StartNode;
 import org.drools.workflow.core.node.Trigger;
 import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -24,6 +27,7 @@
         return StartNode.class;
     }
 
+    @SuppressWarnings("unchecked")
     protected void handleNode(final Node node, final Element element, final String uri, 
             final String localName, final ExtensibleXmlParser parser) throws SAXException {
         super.handleNode(node, element, uri, localName, parser);
@@ -61,6 +65,27 @@
                     }
                     startNode.addTrigger(trigger);
                 }
+            } else if ("messageEventDefinition".equals(nodeName)) {
+                String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+                Map<String, Message> messages = (Map<String, Message>)
+                    ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+                if (messages == null) {
+                    throw new IllegalArgumentException("No messages found");
+                }
+                Message message = messages.get(messageRef);
+                if (message == null) {
+                    throw new IllegalArgumentException("Could not find message " + messageRef);
+                }
+                startNode.setMetaData("MessageType", message.getType());
+                EventTrigger trigger = new EventTrigger();
+                EventTypeFilter eventFilter = new EventTypeFilter();
+                eventFilter.setType("Message-" + messageRef);
+                trigger.addEventFilter(eventFilter);
+                String mapping = (String) startNode.getMetaData("TriggerMapping");
+                if (mapping != null) {
+                    trigger.addInMapping(mapping, "event");
+                }
+                startNode.addTrigger(trigger);
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -103,8 +128,13 @@
                         "        <dataOutputRefs>_" + startNode.getId() + "_Output</dataOutputRefs>" + EOL +
                         "      </outputSet>" + EOL);
 		        }
-		        EventTypeFilter filter = (EventTypeFilter) eventTrigger.getEventFilters().get(0);
-                xmlDump.append("      <signalEventDefinition signalRef=\"" + filter.getType() + "\" />" + EOL);
+		        String type = ((EventTypeFilter) eventTrigger.getEventFilters().get(0)).getType();
+		        if (type.startsWith("Message-")) {
+                    type = type.substring(8);
+                    xmlDump.append("      <messageEventDefinition messageRef=\"" + type + "\"/>" + EOL);
+                } else {
+                    xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\" />" + EOL);
+                }
             } else {
 		        throw new IllegalArgumentException("Unsupported trigger type " + trigger);
 		    }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -15,12 +15,19 @@
 import org.drools.process.core.context.swimlane.SwimlaneContext;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.event.EventTypeFilter;
 import org.drools.rule.builder.dialect.java.JavaDialect;
 import org.drools.workflow.core.Constraint;
 import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.ActionNode;
 import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.EventTrigger;
 import org.drools.workflow.core.node.HumanTaskNode;
 import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.Trigger;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.Handler;
 import org.drools.xml.SemanticModule;
@@ -245,6 +252,42 @@
                             "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
                     }
                 }
+            } else if (node instanceof EndNode) {
+                String messageType = (String) node.getMetaData("MessageType");
+                if (messageType != null) {
+                    xmlDump.append(
+                        "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+                        "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                }
+            } else if (node instanceof ActionNode) {
+                String messageType = (String) node.getMetaData("MessageType");
+                if (messageType != null) {
+                    xmlDump.append(
+                        "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+                        "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                }
+            } else if (node instanceof EventNode) {
+                String messageRef = ((EventTypeFilter) ((EventNode) node).getEventFilters().get(0)).getType();
+                messageRef = messageRef.substring(8);
+                String messageType = (String) node.getMetaData("MessageType");
+                xmlDump.append(
+                    "  <itemDefinition id=\"" + messageRef + "Type\" structureRef=\"" + messageType + "\"/>" + EOL +
+                    "  <message id=\"" + messageRef + "\" structureRef=\"" + messageRef + "Type\" />" + EOL + EOL);
+            } else if (node instanceof StartNode) {
+                StartNode startNode = (StartNode) node;
+                if (startNode.getTriggers() != null && !startNode.getTriggers().isEmpty()) {
+                    Trigger trigger = startNode.getTriggers().get(0);
+                    if (trigger instanceof EventTrigger) {
+                        String eventType = ((EventTypeFilter) ((EventTrigger) trigger).getEventFilters().get(0)).getType();
+                        if (eventType.startsWith("Message-")) {
+                            eventType = eventType.substring(8);
+                            String messageType = (String) node.getMetaData("MessageType");
+                            xmlDump.append(
+                                "  <itemDefinition id=\"" + eventType + "Type\" structureRef=\"" + messageType + "\"/>" + EOL +
+                                "  <message id=\"" + eventType + "\" structureRef=\"" + eventType + "Type\" />" + EOL + EOL);
+                        }
+                    }
+                }
             }
         }
     }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-01-19 20:06:10 UTC (rev 31150)
@@ -187,6 +187,14 @@
         assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
     }
 
+    public void testErrorBoundaryEvent() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorBoundaryEventInterrupting.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+        ProcessInstance processInstance = ksession.startProcess("ErrorBoundaryEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
     public void testTimerBoundaryEvent() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEvent.xml");
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -235,6 +243,17 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
+    public void testIntermediateCatchEventMessage() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventMessage.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
+        ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        // now signal process instance
+        processInstance.signalEvent("Message-HelloMessage", "SomeValue");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
     public void testIntermediateCatchEventTimer() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimer.xml");
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -252,6 +271,18 @@
         ksession.halt();
     }
 
+    public void testIntermediateCatchEventCondition() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventCondition.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        // now activate condition
+        Person person = new Person();
+        person.setName("Jack");
+        ksession.insert(person);
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
     public void testErrorEventProcess() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorEndEvent.xml");
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -259,13 +290,20 @@
         assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
     }
 
-    public void testEscalationEventProcess() throws Exception {
+    public void testEscalationEndEventProcess() 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 testEscalationIntermediateThrowEventProcess() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventEscalation.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("EscalationIntermediateThrowEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
+    }
+
     public void testGraphicalInformation() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -337,6 +375,32 @@
         ksession.startProcess("SignalEndEvent", params);
     }
     
+    public void testMessageStart() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-MessageStart.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.signalEvent("Message-HelloMessage", "NewValue");
+    }
+    
+    public void testMessageEnd() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-MessageEndEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", "MyValue");
+        ProcessInstance processInstance = ksession.startProcess("MessageEndEvent", params);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+    
+    public void testMessageIntermediateThrow() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventMessage.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", "MyValue");
+        ProcessInstance processInstance = ksession.startProcess("MessageIntermediateEvent", params);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+    
     public void testSignalIntermediateThrow() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventSignal.xml");
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml	2010-01-19 20:06:10 UTC (rev 31150)
@@ -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="ErrorBoundaryEvent" name="Error 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="ErrorEvent">
+        <errorEventDefinition errorCode="MyError"/>
+      </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="ErrorEvent" attachedToRef="_2" >
+      <errorEventDefinition errorCode="MyError" />
+    </boundaryEvent>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <scriptTask id="_5" name="Goodbye">
+      <script>System.out.println("Error 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-IntermediateCatchEventCondition.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml	2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+
+  <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_3"/>
+    <intermediateCatchEvent id="_3" name="timer">
+      <conditionalEventDefinition>
+        <condition>org.drools.bpmn2.Person(name == "Jack")</condition>
+      </conditionalEventDefinition>
+    </intermediateCatchEvent>
+    <sequenceFlow sourceRef="_3" targetRef="_4"/>
+    <scriptTask id="_4" name="Event">
+      <script>System.out.println("Condition triggered");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <endEvent id="_5" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    
+  </process>
+</definitions>

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

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml	2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,20 @@
+<?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="EscalationIntermediateThrowEvent" name="Escalation Intermediate Throw Event Process">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <intermediateThrowEvent id="_2" name="EscalationEvent">
+      <escalationEventDefinition escalationCode="MyEscalation"/>
+    </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-IntermediateThrowEventMessage.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml	2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+
+  <itemDefinition id="StringType" structureRef="java.lang.String" />
+  <message id="HelloMessage" structureRef="StringType"/>
+  
+  <process id="MessageIntermediateEvent" name="Message Intermediate Throw Event Process">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <intermediateThrowEvent id="_2" name="MessageEvent">
+      <dataInput id="_2_Input" />
+      <dataInputAssociation>
+        <sourceRef>x</sourceRef>
+        <targetRef>_2_Input</targetRef>
+      </dataInputAssociation>
+      <inputSet>
+        <dataInputRefs>_2_Input</dataInputRefs>
+      </inputSet>
+      <messageEventDefinition messageRef="HelloMessage"/>
+    </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-MessageEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml	2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+
+  <itemDefinition id="StringType" structureRef="java.lang.String" />
+  <message id="HelloMessage" structureRef="StringType"/>
+  
+  <process id="MessageEndEvent" name="Message End Event Process">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <endEvent id="_2" name="MessageEvent">
+      <dataInput id="_2_Input" />
+      <dataInputAssociation>
+        <sourceRef>x</sourceRef>
+        <targetRef>_2_Input</targetRef>
+      </dataInputAssociation>
+      <inputSet>
+        <dataInputRefs>_2_Input</dataInputRefs>
+      </inputSet>
+      <messageEventDefinition messageRef="HelloMessage"/>
+    </endEvent>
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml	2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,40 @@
+<?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" />
+
+  <itemDefinition id="StringType" structureRef="java.lang.String" />
+  <message id="HelloMessage" structureRef="StringType"/>
+  
+  <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>
+      <messageEventDefinition messageRef="HelloMessage" />
+    </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>



More information about the jboss-svn-commits mailing list