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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 21 09:07:37 EDT 2009


Author: KrisVerlaenen
Date: 2009-10-21 09:07:35 -0400 (Wed, 21 Oct 2009)
New Revision: 29725

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.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/InMessageRefHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.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/SendTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.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/di/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventSignal.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.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/pom.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/BPMNSemanticModule.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/IntermediateCatchEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.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/SequenceFlowHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd
   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-CallActivity.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
Log:
 - adding bpmn2 implementations

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath	2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,23 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-  <classpathentry kind="src" path="src/main/java"/>
-  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
-  <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
-  <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
-  <classpathentry kind="output" path="target/classes"/>
-  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-  <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.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/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
-  <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.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/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.12/mvel2-2.0.12.jar"/>
-  <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
-</classpath>
\ No newline at end of file
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+	<classpathentry excluding="**/*.java" including="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_14"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-api"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+	<classpathentry combineaccessrules="false" kind="src" path="/drools-persistence-jpa"/>
+	<classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/codehaus/btm/btm/1.3.2/btm-1.3.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+	<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+	<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.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" 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/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"/>
+	<classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.1.117/h2-1.1.117.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
+	<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/janino/janino/2.5.15/janino-2.5.15.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"/>
+	<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/joda-time/joda-time/1.6/joda-time-1.6.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"/>
+	<classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.12/mvel2-2.0.12.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.0/slf4j-api-1.5.0.jar"/>
+	<classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+	<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.project	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.project	2009-10-21 13:07:35 UTC (rev 29725)
@@ -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/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -29,6 +29,23 @@
       <groupId>org.drools</groupId>
       <artifactId>drools-compiler</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-persistence-jpa</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <version>1.1.117</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.btm</groupId>
+      <artifactId>btm</artifactId>
+      <version>1.3.2</version>    	
+      <scope>test</scope>
+    </dependency>    	
 
   </dependencies>
 

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,66 @@
+package org.drools.bpmn2.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Interface {
+    
+    private String id;
+    private String name;
+    private Map<String, Operation> operations = new HashMap<String, Operation>();
+    
+    public Interface(String id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+    
+    public String getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Operation addOperation(String id, String name) {
+        Operation operation = new Operation(id, name);
+        operations.put(id, operation);
+        return operation;
+    }
+    
+    public Operation getOperation(String name) {
+        return operations.get(name);
+    }
+    
+    public class Operation {
+        private String id;
+        private String name;
+        private Message message;
+        public Operation(String id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+        public String getId() {
+            return id;
+        }
+        public void setId(String id) {
+            this.id = id;
+        }
+        public String getName() {
+            return name;
+        }
+        public void setName(String name) {
+            this.name = name;
+        }
+        public Message getMessage() {
+            return message;
+        }
+        public void setMessage(Message message) {
+            this.message = message;
+        }
+        public Interface getInterface() {
+            return Interface.this;
+        }
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.core;
+
+public class ItemDefinition {
+    
+    private String id;
+    private String structureRef;
+    
+    public ItemDefinition(String id) {
+        this.id = id;
+    }
+    
+    public String getId() {
+        return id;
+    }
+    
+    public String getStructureRef() {
+        return structureRef;
+    }
+    
+    public void setStructureRef(String structureRef) {
+        this.structureRef = structureRef;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,36 @@
+package org.drools.bpmn2.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Lane {
+    
+    private String id;
+    private String name;
+    private List<String> flowElementIds = new ArrayList<String>();
+    
+    public Lane(String id) {
+        this.id = id;
+    }
+    
+    public String getId() {
+        return id;
+    }
+    
+    public String getName() {
+        return name;
+    }
+    
+    public void setName(String name) {
+        this.name = name;
+    }
+    
+    public List<String> getFlowElements() {
+        return flowElementIds;
+    }
+    
+    public void addFlowElement(String id) {
+        flowElementIds.add(id);
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.core;
+
+public class Message {
+    
+    private String id;
+    private String type;
+    
+    public Message(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.handler;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ReceiveTaskHandler implements WorkItemHandler {
+    
+    // TODO: use correlation instead of message type
+    private Map<String, Long> waiting = new HashMap<String, Long>();
+    private KnowledgeRuntime ksession;
+    
+    public ReceiveTaskHandler(KnowledgeRuntime ksession) {
+        this.ksession = ksession;
+    }
+
+    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+        String messageType = (String) workItem.getParameter("MessageType");
+        waiting.put(messageType, workItem.getId());
+    }
+    
+    public void messageReceived(String messageType, Object message) {
+        Long workItemId = waiting.get(messageType);
+        if (workItemId == null) {
+            return;
+        }
+        Map<String, Object> results = new HashMap<String, Object>();
+        results.put("Message", message);
+        ksession.getWorkItemManager().completeWorkItem(workItemId, results);
+    }
+
+    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+        // Do nothing, cannot be aborted
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,19 @@
+package org.drools.bpmn2.handler;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class SendTaskHandler implements WorkItemHandler {
+
+    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+        String message = (String) workItem.getParameter("Message");
+        System.out.println("Sending message: " + message);
+        manager.completeWorkItem(workItem.getId(), null);
+    }
+
+    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+        // Do nothing, cannot be aborted
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,54 @@
+package org.drools.bpmn2.handler;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ServiceTaskHandler implements WorkItemHandler {
+
+    public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+        String i = (String) workItem.getParameter("Interface");
+        String operation = (String) workItem.getParameter("Operation");
+        String parameterType = (String) workItem.getParameter("ParameterType");
+        Object parameter = workItem.getParameter("Parameter");
+        try {
+            Class<?> c = Class.forName(i);
+            Object instance = c.newInstance();
+            Class<?>[] classes = null;
+            Object[] params = null;
+            if (parameterType != null) {
+                classes = new Class<?>[] {
+                    Class.forName(parameterType)
+                };
+                params = new Object[] {
+                    parameter
+                };
+            }
+            Method method = c.getMethod(operation, classes);
+            Object result = method.invoke(instance, params);
+            Map<String, Object> results = new HashMap<String, Object>();
+            results.put("Result", result);
+            manager.completeWorkItem(workItem.getId(), results);
+        } catch (ClassNotFoundException e) {
+            System.err.println(e);
+        } catch (InstantiationException e) {
+            System.err.println(e);
+        } catch (IllegalAccessException e) {
+            System.err.println(e);
+        } catch (NoSuchMethodException e) {
+            System.err.println(e);
+        } catch (InvocationTargetException e) {
+            System.err.println(e);
+        }
+    }
+
+    public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+        // Do nothing, cannot be aborted
+    }
+
+}

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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -2,6 +2,7 @@
 
 import java.util.HashSet;
 
+import org.drools.bpmn2.core.Lane;
 import org.drools.bpmn2.core.SequenceFlow;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.workflow.core.Node;
@@ -33,6 +34,7 @@
     protected void initValidPeers() {
         this.validPeers = new HashSet<Class<?>>();
         this.validPeers.add(null);
+        this.validPeers.add(Lane.class);
         this.validPeers.add(Variable.class);
         this.validPeers.add(Node.class);
         this.validPeers.add(SequenceFlow.class);
@@ -41,17 +43,28 @@
     public Object start(final String uri, final String localName, final Attributes attrs,
                         final ExtensibleXmlParser parser) throws SAXException {
         parser.startElementBuilder( localName, attrs );
-        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
         final Node node = createNode(attrs);
         String id = attrs.getValue("id");
-        // remove starting _
-        id = id.substring(1);
-        // remove ids of parent nodes
-        id = id.substring(id.lastIndexOf("-") + 1);
-        final String name = attrs.getValue("name");
-        node.setName(name);
-        node.setId(new Integer(id));
-        nodeContainer.addNode(node);
+        try {
+            // remove starting _
+            id = id.substring(1);
+            // remove ids of parent nodes
+            id = id.substring(id.lastIndexOf("-") + 1);
+            final String name = attrs.getValue("name");
+            node.setName(name);
+            node.setId(new Integer(id));
+        } catch (NumberFormatException e) {
+            // id is not in the expected format, generating a new one
+            long newId = 0;
+            NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+            for (org.drools.definition.process.Node n: nodeContainer.getNodes()) {
+                if (n.getId() > newId) {
+                    newId = n.getId();
+                }
+            }
+            ((org.drools.workflow.core.Node) node).setId(++newId);
+            node.setMetaData("UniqueId", attrs.getValue("id"));
+        }
         return node;
     }
 
@@ -62,6 +75,8 @@
         final Element element = parser.endElementBuilder();
         Node node = (Node) parser.getCurrent();
         handleNode(node, element, uri, localName, parser);
+        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+        nodeContainer.addNode(node);
         return node;
     }
     

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.xml;
+
+import java.util.List;
+
+import org.drools.definition.process.Connection;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.DynamicNode;
+import org.xml.sax.Attributes;
+
+public class AdHocSubProcessHandler extends SubProcessHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new DynamicNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return DynamicNode.class;
+    }
+    
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        DynamicNode dynamicNode = (DynamicNode) node;
+		writeNode("adHocSubProcess", dynamicNode, xmlDump, includeMeta);
+		xmlDump.append(" ordering=\"parallel\" >" + EOL);
+		// nodes
+		List<Node> subNodes = getSubNodes(dynamicNode);
+    	xmlDump.append("    <!-- nodes -->" + EOL);
+        for (Node subNode: subNodes) {
+    		XmlBPMNProcessDumper.INSTANCE.visitNode(subNode, xmlDump, includeMeta);
+        }
+        // connections
+        List<Connection> connections = getSubConnections(dynamicNode);
+    	xmlDump.append("    <!-- connections -->" + EOL);
+        for (Connection connection: connections) {
+        	XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
+        }
+		endNode("adHocSubProcess", xmlDump);
+	}
+
+}
\ No newline at end of file

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,57 @@
+package org.drools.bpmn2.xml;
+
+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.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.DefaultSemanticModule;
+
+public class BPMN2SemanticModule extends DefaultSemanticModule {
+	
+	public BPMN2SemanticModule() {
+		super("http://www.omg.org/bpmn20");
+		
+		addHandler("process", new ProcessHandler());
+		
+		addHandler("property", new PropertyHandler());
+        addHandler("lane", new LaneHandler());
+
+		addHandler("startEvent", new StartEventHandler());
+		addHandler("endEvent", new EndEventHandler());
+		addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+		addHandler("parallelGateway", new ParallelGatewayHandler());
+		addHandler("complexGateway", new ComplexGatewayHandler());
+		addHandler("scriptTask", new ScriptTaskHandler());
+		addHandler("task", new TaskHandler());
+		addHandler("userTask", new UserTaskHandler());
+        addHandler("manualTask", new ManualTaskHandler());
+        addHandler("serviceTask", new ServiceTaskHandler());
+        addHandler("sendTask", new SendTaskHandler());
+        addHandler("receiveTask", new ReceiveTaskHandler());
+		addHandler("businessRuleTask", new BusinessRuleTaskHandler());
+		addHandler("callActivity", new CallActivityHandler());
+		addHandler("subProcess", new SubProcessHandler());
+        addHandler("adHocSubProcess", new AdHocSubProcessHandler());
+		addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
+
+		addHandler("sequenceFlow", new SequenceFlowHandler());
+		
+        addHandler("itemDefinition", new ItemDefinitionHandler());
+        addHandler("message", new MessageHandler());
+        addHandler("interface", new InterfaceHandler());
+        addHandler("operation", new OperationHandler());
+        addHandler("inMessageRef", new InMessageRefHandler());
+        
+		handlersByClass.put(Split.class, new SplitHandler());
+		handlersByClass.put(Join.class, new JoinHandler());
+        handlersByClass.put(EventNode.class, new EventNodeHandler());
+        handlersByClass.put(TimerNode.class, new TimerNodeHandler());
+        handlersByClass.put(EndNode.class, new EndNodeHandler());
+        handlersByClass.put(FaultNode.class, new FaultNodeHandler());
+        handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,22 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.bpmn2.xml.di.ActivityShapeHandler;
+import org.drools.bpmn2.xml.di.EventShapeHandler;
+import org.drools.bpmn2.xml.di.GatewayShapeHandler;
+import org.drools.bpmn2.xml.di.ProcessDiagramHandler;
+import org.drools.bpmn2.xml.di.SequenceFlowConnectorHandler;
+import org.drools.xml.DefaultSemanticModule;
+
+public class BPMNDISemanticModule extends DefaultSemanticModule {
+	
+	public BPMNDISemanticModule() {
+		super("http://bpmndi.org");
+		
+		addHandler("processDiagram", new ProcessDiagramHandler());
+		addHandler("eventShape", new EventShapeHandler());
+        addHandler("gatewayShape", new GatewayShapeHandler());
+        addHandler("activityShape", new ActivityShapeHandler());
+        addHandler("sequenceFlowConnector", new SequenceFlowConnectorHandler());
+	}
+
+}

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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,7 +1,12 @@
 package org.drools.bpmn2.xml;
 
+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.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.DefaultSemanticModule;
 
 public class BPMNSemanticModule extends DefaultSemanticModule {
@@ -9,27 +14,44 @@
 	public BPMNSemanticModule() {
 		super("http://schema.omg.org/spec/BPMN/2.0");
 		
-		addHandler("process", new ProcessHandler());
-		
-		addHandler("property", new PropertyHandler());
+        addHandler("process", new ProcessHandler());
+        
+        addHandler("property", new PropertyHandler());
+        addHandler("lane", new LaneHandler());
 
-		addHandler("startEvent", new StartEventHandler());
-		addHandler("endEvent", new EndEventHandler());
-		addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
-		addHandler("parallelGateway", new ParallelGatewayHandler());
-		addHandler("complexGateway", new ComplexGatewayHandler());
-		addHandler("scriptTask", new ScriptTaskHandler());
-		addHandler("task", new TaskHandler());
-		addHandler("userTask", new UserTaskHandler());
-		addHandler("businessRuleTask", new BusinessRuleTaskHandler());
-		addHandler("callActivity", new CallActivityHandler());
-		addHandler("subProcess", new SubProcessHandler());
-		addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
+        addHandler("startEvent", new StartEventHandler());
+        addHandler("endEvent", new EndEventHandler());
+        addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+        addHandler("parallelGateway", new ParallelGatewayHandler());
+        addHandler("complexGateway", new ComplexGatewayHandler());
+        addHandler("scriptTask", new ScriptTaskHandler());
+        addHandler("task", new TaskHandler());
+        addHandler("userTask", new UserTaskHandler());
+        addHandler("manualTask", new ManualTaskHandler());
+        addHandler("serviceTask", new ServiceTaskHandler());
+        addHandler("sendTask", new SendTaskHandler());
+        addHandler("receiveTask", new ReceiveTaskHandler());
+        addHandler("businessRuleTask", new BusinessRuleTaskHandler());
+        addHandler("callActivity", new CallActivityHandler());
+        addHandler("subProcess", new SubProcessHandler());
+        addHandler("adHocSubProcess", new AdHocSubProcessHandler());
+        addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
 
-		addHandler("sequenceFlow", new SequenceFlowHandler());
-		
-		handlersByClass.put(Split.class, new SplitHandler());
-		handlersByClass.put(Join.class, new JoinHandler());
+        addHandler("sequenceFlow", new SequenceFlowHandler());
+
+        addHandler("itemDefinition", new ItemDefinitionHandler());
+        addHandler("message", new MessageHandler());
+        addHandler("interface", new InterfaceHandler());
+        addHandler("operation", new OperationHandler());
+        addHandler("inMessageRef", new InMessageRefHandler());
+        
+        handlersByClass.put(Split.class, new SplitHandler());
+        handlersByClass.put(Join.class, new JoinHandler());
+        handlersByClass.put(EventNode.class, new EventNodeHandler());
+        handlersByClass.put(TimerNode.class, new TimerNodeHandler());
+        handlersByClass.put(EndNode.class, new EndNodeHandler());
+        handlersByClass.put(FaultNode.class, new FaultNodeHandler());
+        handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
 	}
 
 }

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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,13 +1,20 @@
 package org.drools.bpmn2.xml;
 
 import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
 import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.FaultNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
 
 public class EndEventHandler extends AbstractNodeHandler {
     
     protected Node createNode(Attributes attrs) {
-        return new EndNode();
+        EndNode node = new EndNode();
+        node.setTerminate(false);
+        return node;
     }
     
     @SuppressWarnings("unchecked")
@@ -15,10 +22,69 @@
         return EndNode.class;
     }
 
-	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-		EndNode endNode = (EndNode) node;
-		writeNode("endEvent", endNode, xmlDump, includeMeta);
-		endNode(xmlDump);
-	}
+    public Object end(final String uri, final String localName,
+            final ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        Node node = (Node) parser.getCurrent();
+        // determine type of event definition, so the correct type of node
+        // can be generated
+        super.handleNode(node, element, uri, localName, parser);
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("terminateEventDefinition".equals(nodeName)) {
+                // reuse already create EventNode
+                handleTerminateNode(node, element, uri, localName, parser);
+                break;
+            } else if ("errorEventDefinition".equals(nodeName)) {
+                // create new timerNode
+                FaultNode faultNode = new FaultNode();
+                faultNode.setId(node.getId());
+                faultNode.setName(node.getName());
+                node = faultNode;
+                super.handleNode(node, element, uri, localName, parser);
+                handleErrorNode(node, element, uri, localName, parser);
+                break;
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+        nodeContainer.addNode(node);
+        return node;
+    }
+    
+    public void handleTerminateNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        ((EndNode) node).setTerminate(true);
+    }
+    
+    public void handleErrorNode(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)) {
+                readDataOutputAssociation(xmlNode, faultNode);
+            } else if ("errorEventDefinition".equals(nodeName)) {
+                String faultName = ((Element) xmlNode).getAttribute("errorCode");
+                if (faultName != null && faultName.trim().length() > 0) {
+                    faultNode.setFaultName(faultName);
+                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
+    protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, FaultNode faultNode) {
+        // sourceRef
+        org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+        String faultVariable = subNode.getTextContent();
+        faultNode.setFaultVariable(faultVariable);
+    }
 
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException("Writing out should be handled by specific handlers");
+    }
+
 }

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.EndNode;
+import org.xml.sax.Attributes;
+
+public class EndNodeHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        throw new IllegalArgumentException("Reading in should be handled by end event handler");
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return EndNode.class;
+    }
+
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		EndNode endNode = (EndNode) node;
+		writeNode("endEvent", endNode, xmlDump, includeMeta);
+		if (endNode.isTerminate()) {
+    		xmlDump.append(">" + EOL);
+            xmlDump.append("        <terminateEventDefinition/>" + EOL);
+    		endNode("endEvent", xmlDump);
+		} else {
+		    endNode(xmlDump);
+		}
+	}
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,42 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.EventNode;
+import org.xml.sax.Attributes;
+
+public class EventNodeHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        throw new IllegalArgumentException("Reading in should be handled by intermediate catch event handler");
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return EventNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		EventNode eventNode = (EventNode) node;
+		writeNode("intermediateCatchEvent", eventNode, xmlDump, includeMeta);
+		xmlDump.append(">" + EOL);
+		if (eventNode.getVariableName() != null) {
+			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL);
+			xmlDump.append("      <dataOutputAssociation>" + EOL);
+			xmlDump.append(
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
+				"        <targetRef>" + eventNode.getVariableName() + "</targetRef>" + EOL);
+			xmlDump.append("      </dataOutputAssociation>" + EOL);
+			xmlDump.append("        <outputSet>" + EOL);
+			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL);
+			xmlDump.append("        </outputSet>" + EOL);
+		}
+		if (eventNode.getEventFilters().size() > 0) {
+			String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
+			xmlDump.append("        <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+			
+		}
+		endNode("intermediateCatchEvent", xmlDump);
+	}
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,37 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.FaultNode;
+import org.xml.sax.Attributes;
+
+public class FaultNodeHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        throw new IllegalArgumentException("Reading in should be handled by end event handler");
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return FaultNode.class;
+    }
+
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        FaultNode faultNode = (FaultNode) node;
+		writeNode("endEvent", faultNode, xmlDump, includeMeta);
+		xmlDump.append(">" + EOL);
+        if (faultNode.getFaultVariable() != null) {
+            xmlDump.append("      <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input\" name=\"error\" />" + EOL);
+            xmlDump.append("      <dataInputAssociation>" + EOL);
+            xmlDump.append(
+                "        <sourceRef>" + faultNode.getFaultVariable() + "</sourceRef>" + EOL +
+                "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</targetRef>" + EOL);
+            xmlDump.append("      </dataInputAssociation>" + EOL);
+            xmlDump.append("      <inputSet>" + EOL);
+            xmlDump.append("        <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</dataInputRefs>" + EOL);
+            xmlDump.append("      </inputSet>" + EOL);
+        }
+        xmlDump.append("      <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+		endNode("endEvent", xmlDump);
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,61 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+import java.util.Map;
+
+import org.drools.bpmn2.core.Message;
+import org.drools.bpmn2.core.Interface.Operation;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class InMessageRefHandler extends BaseAbstractHandler implements Handler {
+	
+	@SuppressWarnings("unchecked")
+	public InMessageRefHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(Operation.class);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+
+			this.allowNesting = false;
+		}
+	}
+
+    public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+		return null;
+	}
+
+	@SuppressWarnings("unchecked")
+    public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		Element element = parser.endElementBuilder();
+		String messageId = element.getTextContent();
+		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(messageId);
+        if (message == null) {
+            throw new IllegalArgumentException("Could not find message " + messageId);
+        }
+        Operation operation = (Operation) parser.getParent();
+        operation.setMessage(message);
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Message.class;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,65 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.Message;
+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 InterfaceHandler extends BaseAbstractHandler implements Handler {
+	
+	@SuppressWarnings("unchecked")
+	public InterfaceHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(null);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+            this.validPeers.add(ItemDefinition.class);
+            this.validPeers.add(Message.class);
+            this.validPeers.add(Interface.class);
+
+			this.allowNesting = false;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+    public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		String id = attrs.getValue("id");
+		String name = attrs.getValue("name");
+
+		ProcessBuildData buildData = (ProcessBuildData) parser.getData();
+		List<Interface> interfaces = (List<Interface>) buildData.getMetaData("Interfaces");
+        if (interfaces == null) {
+            interfaces = new ArrayList<Interface>();
+            buildData.setMetaData("Interfaces", interfaces);
+        }
+        Interface i = new Interface(id, name); 
+        interfaces.add(i);
+		return i;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Interface.class;
+	}
+
+}
\ No newline at end of file

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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -5,8 +5,11 @@
 
 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.TimerNode;
 import org.drools.xml.ExtensibleXmlParser;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;
@@ -23,29 +26,83 @@
         return EventNode.class;
     }
 
-    protected void handleNode(final Node node, final Element element, final String uri, 
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        Node node = (Node) 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 create EventNode
+                handleSignalNode(node, element, uri, localName, parser);
+                break;
+            } else if ("timerEventDefinition".equals(nodeName)) {
+                // create new timerNode
+                TimerNode timerNode = new TimerNode();
+                timerNode.setId(node.getId());
+                timerNode.setName(node.getName());
+                node = timerNode;
+                handleTimerNode(node, element, uri, localName, parser);
+                break;
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+        NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+        nodeContainer.addNode(node);
+        return node;
+    }
+    
+    protected void handleSignalNode(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();
+        super.handleNode(node, element, uri, localName, parser);
+        EventNode eventNode = (EventNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
         while (xmlNode != null) {
-        	String nodeName = xmlNode.getNodeName();
-        	if ("dataOutputAssociation".equals(nodeName)) {
-        		readDataOutputAssociation(xmlNode, eventNode);
-        	} else if ("signalEventDefinition".equals(nodeName)) {
-        		String type = ((Element) xmlNode).getAttribute("signalRef");
-        		if (type != null && type.trim().length() > 0) {
-        			List<EventFilter> eventFilters = new ArrayList<EventFilter>();
-                	EventTypeFilter eventFilter = new EventTypeFilter();
-                	eventFilter.setType(type);
-                	eventFilters.add(eventFilter);
+            String nodeName = xmlNode.getNodeName();
+            if ("dataOutputAssociation".equals(nodeName)) {
+                readDataOutputAssociation(xmlNode, eventNode);
+            } else if ("signalEventDefinition".equals(nodeName)) {
+                String type = ((Element) xmlNode).getAttribute("signalRef");
+                if (type != null && type.trim().length() > 0) {
+                    List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+                    EventTypeFilter eventFilter = new EventTypeFilter();
+                    eventFilter.setType(type);
+                    eventFilters.add(eventFilter);
                     eventNode.setEventFilters(eventFilters);
-        		}
-        	}
-    		xmlNode = xmlNode.getNextSibling();
+                }
+            }
+            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);
+        TimerNode timerNode = (TimerNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("timerEventDefinition".equals(nodeName)) {
+                Timer timer = new Timer();
+                org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+                while (subNode instanceof Element) {
+                    String subNodeName = subNode.getNodeName();
+                    if ("timeCycle".equals(subNodeName)) {
+                        String period = subNode.getTextContent();
+                        timer.setDelay(period);
+                        break;
+                    }
+                    subNode = subNode.getNextSibling();
+                }
+                timerNode.setTimer(timer);
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
     protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, EventNode eventNode) {
 		// sourceRef
 		org.w3c.dom.Node subNode = xmlNode.getFirstChild();
@@ -56,26 +113,7 @@
     }
 
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-		EventNode eventNode = (EventNode) node;
-		writeNode("intermediateCatchEvent", eventNode, xmlDump, includeMeta);
-		xmlDump.append(">" + EOL);
-		if (eventNode.getVariableName() != null) {
-			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL);
-			xmlDump.append("      <dataOutputAssociation>" + EOL);
-			xmlDump.append(
-				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
-				"        <targetRef>" + eventNode.getVariableName() + "</targetRef>" + EOL);
-			xmlDump.append("      </dataOutputAssociation>" + EOL);
-			xmlDump.append("        <outputSet>" + EOL);
-			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL);
-			xmlDump.append("        </outputSet>" + EOL);
-		}
-		if (eventNode.getEventFilters().size() > 0) {
-			String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
-			xmlDump.append("        <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
-			
-		}
-		endNode("intermediateCatchEvent", xmlDump);
-	}
+	    throw new IllegalArgumentException("Writing out should be handled by specific handlers");
+    }
 
 }

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,63 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.drools.bpmn2.core.ItemDefinition;
+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 ItemDefinitionHandler extends BaseAbstractHandler implements Handler {
+	
+	@SuppressWarnings("unchecked")
+	public ItemDefinitionHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(null);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+            this.validPeers.add(ItemDefinition.class);
+
+			this.allowNesting = false;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+    public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		String id = attrs.getValue("id");
+		String type = attrs.getValue("structureRef");
+
+		ProcessBuildData buildData = (ProcessBuildData) parser.getData();
+		Map<String, ItemDefinition> itemDefintions = (Map<String, ItemDefinition>)
+            ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
+        if (itemDefintions == null) {
+            itemDefintions = new HashMap<String, ItemDefinition>();
+            buildData.setMetaData("ItemDefinitions", itemDefintions);
+        }
+        ItemDefinition itemDefinition = new ItemDefinition(id); 
+        itemDefinition.setStructureRef(type);
+        itemDefintions.put(id, itemDefinition);
+		return itemDefinition;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return ItemDefinition.class;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,78 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.Lane;
+import org.drools.definition.process.WorkflowProcess;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class LaneHandler extends BaseAbstractHandler implements Handler {
+	
+    public static final String LANES = "BPMN.Lanes";
+
+	@SuppressWarnings("unchecked")
+	public LaneHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(RuleFlowProcess.class);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+
+			this.allowNesting = false;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+    public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		String id = attrs.getValue("id");
+		String name = attrs.getValue("name");
+		
+		WorkflowProcess process = (WorkflowProcess) parser.getParent();
+        
+		List<Lane> lanes = (List<Lane>)
+            ((RuleFlowProcess) process).getMetaData(LaneHandler.LANES);          
+        if (lanes == null) {
+            lanes = new ArrayList<Lane>();
+            ((RuleFlowProcess) process).setMetaData(LaneHandler.LANES, lanes);
+        }
+        Lane lane = new Lane(id); 
+        lane.setName(name);
+        lanes.add(lane);
+		return lane;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+        final Element element = parser.endElementBuilder();
+        Lane lane = (Lane) parser.getCurrent();
+        
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("flowElementRef".equals(nodeName)) {
+                String flowElementRef = xmlNode.getTextContent();
+                lane.addFlowElement(flowElementRef);
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+        return lane;
+    }
+
+	public Class<?> generateNodeFor() {
+		return Lane.class;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,26 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+
+public class ManualTaskHandler extends TaskHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new WorkItemNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.class;
+    }
+    
+    protected String getTaskName(final Element element) {
+        return "Manual Task";
+    }
+    
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+    }
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,75 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.Message;
+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 MessageHandler extends BaseAbstractHandler implements Handler {
+	
+	@SuppressWarnings("unchecked")
+	public MessageHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(null);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+            this.validPeers.add(ItemDefinition.class);
+            this.validPeers.add(Message.class);
+
+			this.allowNesting = false;
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+    public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		String id = attrs.getValue("id");
+		String structureRef = attrs.getValue("structureRef");
+		
+		Map<String, ItemDefinition> itemDefinitions = (Map<String, ItemDefinition>)
+            ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
+        if (itemDefinitions == null) {
+            throw new IllegalArgumentException("No item definitions found");
+        }
+        ItemDefinition itemDefinition = itemDefinitions.get(structureRef);
+        if (itemDefinition == null) {
+            throw new IllegalArgumentException("Could not find itemDefinition " + structureRef);
+        }
+        
+        ProcessBuildData buildData = (ProcessBuildData) parser.getData();
+		Map<String, Message> messages = (Map<String, Message>)
+            ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+        if (messages == null) {
+            messages = new HashMap<String, Message>();
+            buildData.setMetaData("Messages", messages);
+        }
+        Message message = new Message(id); 
+        message.setType(itemDefinition.getStructureRef());
+        messages.put(id, message);
+		return message;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Message.class;
+	}
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,51 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.Interface.Operation;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class OperationHandler extends BaseAbstractHandler implements Handler {
+	
+	@SuppressWarnings("unchecked")
+	public OperationHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(Interface.class);
+
+			this.validPeers = new HashSet();
+			this.validPeers.add(null);
+
+			this.allowNesting = false;
+		}
+	}
+
+    public Object start(final String uri, final String localName,
+			            final Attributes attrs, final ExtensibleXmlParser parser)
+			throws SAXException {
+		parser.startElementBuilder(localName, attrs);
+
+		String id = attrs.getValue("id");
+		String name = attrs.getValue("name");
+		
+		Interface i = (Interface) parser.getParent();
+        Operation operation = i.addOperation(id, name);
+		return operation;
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		parser.endElementBuilder();
+		return parser.getCurrent();
+	}
+
+	public Class<?> generateNodeFor() {
+		return Operation.class;
+	}
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -29,13 +29,7 @@
     }
 
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-		writeNode("exclusiveGateway", node, xmlDump, includeMeta);
-		if (node instanceof Split) {
-			xmlDump.append("gatewayDirection=\"diverging\" ");
-		} else if (node instanceof Join) {
-			xmlDump.append("gatewayDirection=\"converging\" ");
-		}
-		endNode(xmlDump);
+	    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/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,11 +1,19 @@
 package org.drools.bpmn2.xml;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.Lane;
+import org.drools.bpmn2.core.Message;
 import org.drools.bpmn2.core.SequenceFlow;
 import org.drools.definition.process.Node;
 import org.drools.definition.process.NodeContainer;
+import org.drools.process.core.context.swimlane.Swimlane;
 import org.drools.ruleflow.core.RuleFlowProcess;
 import org.drools.workflow.core.Connection;
 import org.drools.workflow.core.Constraint;
@@ -13,6 +21,7 @@
 import org.drools.workflow.core.impl.ConnectionRef;
 import org.drools.workflow.core.impl.ConstraintImpl;
 import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.HumanTaskNode;
 import org.drools.workflow.core.node.Split;
 import org.drools.xml.BaseAbstractHandler;
 import org.drools.xml.ExtensibleXmlParser;
@@ -32,6 +41,9 @@
 			this.validParents.add(null);
 
 			this.validPeers = new HashSet();
+            this.validPeers.add(Interface.class);
+            this.validPeers.add(Message.class);
+            this.validPeers.add(ItemDefinition.class);
 			this.validPeers.add(null);
 
 			this.allowNesting = false;
@@ -43,11 +55,15 @@
 			throws SAXException {
 		parser.startElementBuilder(localName, attrs);
 
-		final String id = attrs.getValue("id");
-		final String name = attrs.getValue("name");
+		String id = attrs.getValue("id");
+		String name = attrs.getValue("name");
 
 		RuleFlowProcess process = new RuleFlowProcess();
+		process.setAutoComplete(true);
 		process.setId(id);
+		if (name == null) {
+		    name = id;
+		}
 		process.setName(name);
 		process.setType("RuleFlow");
 		process.setPackageName("org.drools.bpmn2");
@@ -64,6 +80,9 @@
 		List<SequenceFlow> connections = (List<SequenceFlow>)
 			process.getMetaData(CONNECTIONS);
 		linkConnections(process, connections);
+        List<Lane> lanes = (List<Lane>)
+            process.getMetaData(LaneHandler.LANES);
+        assignLanes(process, lanes);
 		return process;
 	}
 
@@ -76,14 +95,38 @@
 			for (SequenceFlow connection: connections) {
 				String sourceRef = connection.getSourceRef();
 				String targetRef = connection.getTargetRef();
-				// remove starting _
-				sourceRef = sourceRef.substring(1);
-				targetRef = targetRef.substring(1);
-		        // remove ids of parent nodes
-				sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
-				targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
-				Node source = nodeContainer.getNode(new Integer(sourceRef));
-				Node target = nodeContainer.getNode(new Integer(targetRef));
+				Node source = null;
+				Node target = null;
+				try {
+    				// remove starting _
+    				sourceRef = sourceRef.substring(1);
+    				targetRef = targetRef.substring(1);
+    		        // remove ids of parent nodes
+    				sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
+    				targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
+    				source = nodeContainer.getNode(new Integer(sourceRef));
+    				target = nodeContainer.getNode(new Integer(targetRef));
+				} catch (NumberFormatException e) {
+				    // try looking for a node with same "UniqueId" (in metadata)
+				    for (Node node: nodeContainer.getNodes()) {
+				        if (connection.getSourceRef().equals(node.getMetaData("UniqueId"))) {
+				            source = node;
+				            break;
+				        }
+				    }
+                    for (Node node: nodeContainer.getNodes()) {
+                        if (connection.getTargetRef().equals(node.getMetaData("UniqueId"))) {
+                            target = node;
+                            break;
+                        }
+                    }
+                    if (source == null) {
+                        throw new IllegalArgumentException("Could not find source node for connection:" + sourceRef);
+                    }
+                    if (target == null) {
+                        throw new IllegalArgumentException("Could not find target node for connection:" + targetRef);
+                    }
+				}
 				Connection result = new ConnectionImpl(
 					source, NodeImpl.CONNECTION_DEFAULT_TYPE, 
 					target, NodeImpl.CONNECTION_DEFAULT_TYPE);
@@ -112,5 +155,46 @@
 			}
 		}
 	}
+	
+	private void assignLanes(RuleFlowProcess process, List<Lane> lanes) {
+	    List<String> laneNames = new ArrayList<String>();
+	    Map<String, String> laneMapping = new HashMap<String, String>();
+	    if (lanes != null) {
+	        for (Lane lane: lanes) {
+	            String name = lane.getName();
+	            if (name != null) {
+	                Swimlane swimlane = new Swimlane();
+	                swimlane.setName(name);
+	                process.getSwimlaneContext().addSwimlane(swimlane);
+	                laneNames.add(name);
+	                for (String flowElementRef: lane.getFlowElements()) {
+	                    laneMapping.put(flowElementRef, name);
+	                }
+	            }
+	        }
+	    }
+	    assignLanes(process, laneMapping);
+	}
+	
+	private void assignLanes(NodeContainer nodeContainer, Map<String, String> laneMapping) {
+	    for (Node node: nodeContainer.getNodes()) {
+	        String lane = null;
+	        String uniqueId = (String) node.getMetaData("UniqueId");
+	        if (uniqueId != null) {
+	            lane = laneMapping.get(uniqueId);
+	        } else {
+	            lane = laneMapping.get(((NodeImpl) node).getUniqueId());
+	        }
+	        if (lane != null) {
+	            ((NodeImpl) node).setMetaData("Lane", lane);
+	            if (node instanceof HumanTaskNode) {
+	                ((HumanTaskNode) node).setSwimlane(lane);
+	            }
+	        }
+	        if (node instanceof NodeContainer) {
+	            assignLanes((NodeContainer) node, laneMapping);
+	        }
+	    }
+	}
 
 }
\ No newline at end of file

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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -4,7 +4,6 @@
 import java.util.List;
 
 import org.drools.bpmn2.core.SequenceFlow;
-import org.drools.definition.process.WorkflowProcess;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.datatype.impl.type.ObjectDataType;
 import org.drools.ruleflow.core.RuleFlowProcess;
@@ -45,7 +44,7 @@
 		parser.startElementBuilder(localName, attrs);
 
 		final String id = attrs.getValue("id");
-		final String itemSubjectRef = attrs.getValue("itemSubjectRef");
+//		final String itemSubjectRef = attrs.getValue("itemSubjectRef");
 
 		Object parent = parser.getParent();
 		if (parent instanceof RuleFlowProcess) {

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,50 @@
+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.node.WorkItemNode;
+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;
+
+public class ReceiveTaskHandler extends TaskHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new WorkItemNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.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);
+        WorkItemNode workItemNode = (WorkItemNode) node;
+        String messageRef = element.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);
+        }
+        workItemNode.getWork().setParameter("MessageType", message.getType());
+    }
+    
+    protected String getTaskName(final Element element) {
+        return "Receive Task";
+    }
+    
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+    }
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,50 @@
+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.node.WorkItemNode;
+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;
+
+public class SendTaskHandler extends TaskHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new WorkItemNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.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);
+        WorkItemNode workItemNode = (WorkItemNode) node;
+        String messageRef = element.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);
+        }
+        workItemNode.getWork().setParameter("MessageType", message.getType());
+    }
+    
+    protected String getTaskName(final Element element) {
+        return "Send Task";
+    }
+    
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+    }
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -91,6 +91,10 @@
         				sequenceFlow.setLanguage("java");
         			} else if (XmlBPMNProcessDumper.RULE_LANGUAGE.equals(language)) {
         				sequenceFlow.setType("rule");
+        			} else if (XmlBPMNProcessDumper.XPATH_LANGUAGE.equals(language)) {
+                        sequenceFlow.setLanguage("XPath");
+                    } else {
+        			    throw new IllegalArgumentException("Unknown language " + language);
         			}
         		}
         		org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
@@ -102,7 +106,7 @@
         	}
         	xmlNode = xmlNode.getNextSibling();
         }
-        return parser.getCurrent();
+        return sequenceFlow;
 	}
 
 	public Class<?> generateNodeFor() {

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,60 @@
+package org.drools.bpmn2.xml;
+
+import java.util.List;
+
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.Interface.Operation;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+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;
+
+public class ServiceTaskHandler extends TaskHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        return new WorkItemNode();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return Node.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);
+        WorkItemNode workItemNode = (WorkItemNode) node;
+        String operationRef = element.getAttribute("operationRef");
+        List<Interface> interfaces = (List<Interface>)
+            ((ProcessBuildData) parser.getData()).getMetaData("Interfaces");
+        if (interfaces == null) {
+            throw new IllegalArgumentException("No interfaces found");
+        }
+        Operation operation = null;
+        for (Interface i: interfaces) {
+            operation = i.getOperation(operationRef);
+            if (operation != null) {
+                break;
+            }
+        }
+        if (operation == null) {
+            throw new IllegalArgumentException("Could not find operation " + operationRef);
+        }
+        workItemNode.getWork().setParameter("Interface", operation.getInterface().getName());
+        workItemNode.getWork().setParameter("Operation", operation.getName());
+        workItemNode.getWork().setParameter("ParameterType", operation.getMessage().getType());
+    }
+    
+    protected String getTaskName(final Element element) {
+        return "Service Task";
+    }
+    
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -20,14 +20,14 @@
     
     @SuppressWarnings("unchecked")
 	public Class generateNodeFor() {
-        return WorkItemNode.class;
+        return Node.class;
     }
 
     protected void handleNode(final Node node, final Element element, final String uri, 
             final String localName, final ExtensibleXmlParser parser) throws SAXException {
     	super.handleNode(node, element, uri, localName, parser);
     	WorkItemNode workItemNode = (WorkItemNode) node;
-        String name = element.getAttribute("taskName");
+        String name = getTaskName(element);
         Work work = new WorkImpl();
         work.setName(name);
     	workItemNode.setWork(work);
@@ -47,6 +47,10 @@
         }
 	}
     
+    protected String getTaskName(final Element element) {
+        return element.getAttribute("taskName");
+    }
+    
     protected void readIoSpecification(org.w3c.dom.Node xmlNode, Map<String, String> dataInputs, Map<String, String> dataOutputs) {
     	org.w3c.dom.Node subNode = xmlNode.getFirstChild();
 		while (subNode instanceof Element) {
@@ -95,79 +99,10 @@
 		workItemNode.addOutMapping(dataOutputs.get(from), to);
     }
 
-	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
-		WorkItemNode workItemNode = (WorkItemNode) node;
-		writeNode("task", workItemNode, xmlDump, includeMeta);
-		xmlDump.append("tns:taskName=\"" + workItemNode.getWork().getName() + "\" >" + EOL);
-		writeIO(workItemNode, xmlDump);
-		endNode("task", xmlDump);
-	}
-	
-	protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
-		xmlDump.append("      <ioSpecification>" + EOL);
-		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
-		}
-		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
-			if (entry.getValue() != null) {
-				xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
-			}
-		}
-		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
-		}
-		xmlDump.append("        <inputSet>" + EOL);
-		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
-		}
-		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
-			if (entry.getValue() != null) {
-				xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
-			}
-		}
-		xmlDump.append(
-			"        </inputSet>" + EOL);
-		xmlDump.append("        <outputSet>" + EOL);
-		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
-		}
-		xmlDump.append(
-			"        </outputSet>" + EOL);
-		xmlDump.append(
-			"      </ioSpecification>" + EOL);
-		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
-			if (entry.getValue() != null) {
-				xmlDump.append(
-					"      <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
-			}
-		}
-		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("      <dataInputAssociation>" + EOL);
-			xmlDump.append(
-				"        <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
-			xmlDump.append("      </dataInputAssociation>" + EOL);
-		}
-		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
-			if (entry.getValue() != null) {
-				xmlDump.append("      <dataInputAssociation>" + EOL);
-				xmlDump.append(
-					"        <assignment>" + EOL +
-					"          <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
-					"          <to xs:type=\"tFormalExpression\">_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</to>" + EOL +
-					"        </assignment>" + EOL +
-					"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
-					"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
-				xmlDump.append("      </dataInputAssociation>" + EOL);
-			}
-		}
-		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("      <dataOutputAssociation>" + EOL);
-			xmlDump.append(
-				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
-				"        <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
-			xmlDump.append("      </dataOutputAssociation>" + EOL);
-		}
-	}
+    @Override
+    public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+        throw new IllegalArgumentException(
+            "Writing out should be handled by the WorkItemNodeHandler");
+    }
 
 }

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.TimerNode;
+import org.xml.sax.Attributes;
+
+public class TimerNodeHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        throw new IllegalArgumentException("Reading in should be handled by intermediate catch event handler");
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return TimerNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+	    TimerNode timerNode = (TimerNode) node;
+		writeNode("intermediateCatchEvent", timerNode, xmlDump, includeMeta);
+		xmlDump.append(">" + EOL);
+		xmlDump.append("      <timerEventDefinition>" + EOL);
+		if (timerNode.getTimer() != null && timerNode.getTimer().getDelay() != null) {
+		    xmlDump.append("        <timeCycle>" + timerNode.getTimer().getDelay() + "</timeCycle>" + EOL);
+		}
+		xmlDump.append("      </timerEventDefinition>" + EOL);
+		endNode("intermediateCatchEvent", xmlDump);
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -66,7 +66,7 @@
 	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
 		HumanTaskNode humanTaskNode = (HumanTaskNode) node;
 		writeNode("userTask", humanTaskNode, xmlDump, includeMeta);
-		xmlDump.append(">" + EOL);
+		xmlDump.append("implementation=\"humanTaskWebService\" >" + EOL);
 		writeIO(humanTaskNode, xmlDump);
 		String ownerString = (String) humanTaskNode.getWork().getParameter("ActorId");
 		if (ownerString != null) {

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,189 @@
+package org.drools.bpmn2.xml;
+
+import java.util.Map;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.xml.sax.Attributes;
+
+public class WorkItemNodeHandler extends AbstractNodeHandler {
+    
+    protected Node createNode(Attributes attrs) {
+        throw new IllegalArgumentException("Reading in should be handled by specific handlers");
+    }
+    
+    @SuppressWarnings("unchecked")
+	public Class generateNodeFor() {
+        return WorkItemNode.class;
+    }
+
+	public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+		WorkItemNode workItemNode = (WorkItemNode) node;
+		String type = workItemNode.getWork().getName();
+		if ("Manual Task".equals(type)) {
+		    writeNode("manualTask", workItemNode, xmlDump, includeMeta);
+	        endNode(xmlDump);
+	        return;
+		} 
+        if ("Service Task".equals(type)) {
+            writeNode("serviceTask", workItemNode, xmlDump, includeMeta);
+            xmlDump.append("operationRef=\"_" + 
+                XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_ServiceOperation\" implementation=\"Other\" >" + EOL);
+            xmlDump.append(
+                "      <ioSpecification>" + EOL +
+                "        <dataInput id=\"_2_param\" name=\"Parameter\" />" + EOL +
+                "        <dataOutput id=\"_2_result\" name=\"Result\" />" + EOL +
+                "        <inputSet>" + EOL +
+                "          <dataInputRefs>_2_param</dataInputRefs>" + EOL +
+                "        </inputSet>" + EOL +
+                "        <outputSet>" + EOL +
+                "          <dataOutputRefs>_2_result</dataOutputRefs>" + EOL +
+                "        </outputSet>" + EOL +
+                "      </ioSpecification>" + EOL);
+            String inMapping = workItemNode.getInMapping("Parameter");
+            if (inMapping != null) {
+                xmlDump.append(
+                    "      <dataInputAssociation>" + EOL +
+                    "        <sourceRef>" + inMapping + "</sourceRef>" + EOL +
+                    "        <targetRef>_2_param</targetRef>" + EOL +
+                    "      </dataInputAssociation>" + EOL);
+            }
+            String outMapping = workItemNode.getOutMapping("Result");
+            if (outMapping != null) {
+                xmlDump.append(
+                    "      <dataOutputAssociation>" + EOL +
+                    "        <sourceRef>_2_result</sourceRef>" + EOL +
+                    "        <targetRef>" + outMapping + "</targetRef>" + EOL +
+                    "      </dataOutputAssociation>" + EOL);
+            }
+            endNode("serviceTask", xmlDump);
+            return;
+        } 
+        if ("Send Task".equals(type)) {
+            writeNode("sendTask", workItemNode, xmlDump, includeMeta);
+            xmlDump.append("messageRef=\"_" + 
+                    XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+                xmlDump.append(
+                    "      <ioSpecification>" + EOL +
+                    "        <dataInput id=\"_2_param\" name=\"Message\" />" + EOL +
+                    "        <inputSet>" + EOL +
+                    "          <dataInputRefs>_2_param</dataInputRefs>" + EOL +
+                    "        </inputSet>" + EOL +
+                    "        <outputSet/>" + EOL +
+                    "      </ioSpecification>" + EOL);
+                String inMapping = workItemNode.getInMapping("Message");
+                if (inMapping != null) {
+                    xmlDump.append(
+                        "      <dataInputAssociation>" + EOL +
+                        "        <sourceRef>" + inMapping + "</sourceRef>" + EOL +
+                        "        <targetRef>_2_param</targetRef>" + EOL +
+                        "      </dataInputAssociation>" + EOL);
+                }
+            endNode("sendTask", xmlDump);
+            return;
+        } 
+        if ("Receive Task".equals(type)) {
+            writeNode("receiveTask", workItemNode, xmlDump, includeMeta);
+            xmlDump.append("messageRef=\"_" + 
+                    XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+                xmlDump.append(
+                    "      <ioSpecification>" + EOL +
+                    "        <dataOutput id=\"_2_result\" name=\"Message\" />" + EOL +
+                    "        <inputSet/>" + EOL +
+                    "        <outputSet>" + EOL +
+                    "          <dataOutputRefs>_2_result</dataOutputRefs>" + EOL +
+                    "        </outputSet>" + EOL +
+                    "      </ioSpecification>" + EOL);
+                String outMapping = workItemNode.getOutMapping("Message");
+                if (outMapping != null) {
+                    xmlDump.append(
+                        "      <dataOutputAssociation>" + EOL +
+                        "        <sourceRef>_2_result</sourceRef>" + EOL +
+                        "        <targetRef>" + outMapping + "</targetRef>" + EOL +
+                        "      </dataOutputAssociation>" + EOL);
+                }
+            endNode("receiveTask", xmlDump);
+            return;
+        } 
+		writeNode("task", workItemNode, xmlDump, includeMeta);
+		xmlDump.append("tns:taskName=\"" + type + "\" >" + EOL);
+		writeIO(workItemNode, xmlDump);
+		endNode("task", xmlDump);
+	}
+	
+	protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
+		xmlDump.append("      <ioSpecification>" + EOL);
+		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+		}
+		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+			if (entry.getValue() != null) {
+				xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+			}
+		}
+		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+		}
+		xmlDump.append("        <inputSet>" + EOL);
+		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+			xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+		}
+		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+			if (entry.getValue() != null) {
+				xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+			}
+		}
+		xmlDump.append(
+			"        </inputSet>" + EOL);
+		xmlDump.append("        <outputSet>" + EOL);
+		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+		}
+		xmlDump.append(
+			"        </outputSet>" + EOL);
+		xmlDump.append(
+			"      </ioSpecification>" + EOL);
+		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+			if (entry.getValue() != null) {
+				xmlDump.append(
+					"      <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
+			}
+		}
+		writeInputAssociation(workItemNode, xmlDump);
+        writeOutputAssociation(workItemNode, xmlDump);
+	}
+	
+	protected void writeInputAssociation(WorkItemNode workItemNode, StringBuilder xmlDump) {
+		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+			xmlDump.append("      <dataInputAssociation>" + EOL);
+			xmlDump.append(
+				"        <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
+				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+			xmlDump.append("      </dataInputAssociation>" + EOL);
+		}
+		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+			if (entry.getValue() != null) {
+				xmlDump.append("      <dataInputAssociation>" + EOL);
+				xmlDump.append(
+					"        <assignment>" + EOL +
+					"          <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
+					"          <to xs:type=\"tFormalExpression\">_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</to>" + EOL +
+					"        </assignment>" + EOL +
+					"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+					"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+				xmlDump.append("      </dataInputAssociation>" + EOL);
+			}
+		}
+	}
+	
+    protected void writeOutputAssociation(WorkItemNode workItemNode, StringBuilder xmlDump) {
+		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+			xmlDump.append("      <dataOutputAssociation>" + EOL);
+			xmlDump.append(
+				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+				"        <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
+			xmlDump.append("      </dataOutputAssociation>" + EOL);
+		}
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,18 +1,26 @@
 package org.drools.bpmn2.xml;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
+import org.drools.bpmn2.xpath.XPathDialect;
 import org.drools.definition.process.Connection;
 import org.drools.definition.process.Node;
 import org.drools.definition.process.NodeContainer;
 import org.drools.definition.process.WorkflowProcess;
+import org.drools.process.core.Work;
+import org.drools.process.core.context.swimlane.Swimlane;
+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.rule.builder.dialect.java.JavaDialect;
 import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.NodeImpl;
 import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.HumanTaskNode;
 import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.WorkItemNode;
 import org.drools.xml.Handler;
 import org.drools.xml.SemanticModule;
 import org.drools.xml.XmlDumper;
@@ -21,6 +29,7 @@
 	
 	public static final String JAVA_LANGUAGE = "http://www.java.com/java";
 	public static final String RULE_LANGUAGE = "http://www.jboss.org/drools/rule";
+    public static final String XPATH_LANGUAGE = "http://www.w3.org/1999/XPath";
     
 	public static XmlBPMNProcessDumper INSTANCE = new XmlBPMNProcessDumper();
 	
@@ -73,8 +82,10 @@
 	    xmlDump.append(
     		"  <resource id=\"Actor\" name=\"Human Actor\" />" + EOL + EOL);
 
+	    visitInterfaces(process, xmlDump);
+	       
 	    // the process itself
-		xmlDump.append("  <process ");
+		xmlDump.append("  <process processType=\"executable\" ");
         if (process.getId() != null) {
             xmlDump.append("id=\"" + process.getId() + "\" ");
         }
@@ -83,6 +94,7 @@
         }
         // TODO: package, version
         xmlDump.append(">" + EOL + EOL);
+        visitLanes(process, xmlDump);
         visitHeader(process, xmlDump, includeMeta);
         visitNodes(process, xmlDump, includeMeta);
         visitConnections(process.getNodes(), xmlDump, includeMeta);
@@ -90,6 +102,41 @@
         xmlDump.append("</definitions>");
     }
     
+    private void visitLanes(WorkflowProcess process, StringBuilder xmlDump) {
+        // lanes
+        Collection<Swimlane> swimlanes = ((SwimlaneContext)
+            ((org.drools.workflow.core.WorkflowProcess) process)
+                .getDefaultContext(SwimlaneContext.SWIMLANE_SCOPE)).getSwimlanes();
+        if (!swimlanes.isEmpty()) {
+            xmlDump.append("    <laneSet>" + EOL);
+            for (Swimlane swimlane: swimlanes) {
+                xmlDump.append("      <lane name=\"" + swimlane.getName() + "\" >" + EOL);
+                visitLane(process, swimlane.getName(), xmlDump);
+                xmlDump.append("      </lane>" + EOL);
+            }
+            xmlDump.append("    </laneSet>" + EOL);
+        }
+    }
+    
+    private void visitLane(NodeContainer container, String lane, StringBuilder xmlDump) {
+        for (Node node: container.getNodes()) {
+            if (node instanceof HumanTaskNode) {
+                String swimlane = ((HumanTaskNode) node).getSwimlane();
+                if (lane.equals(swimlane)) {
+                    xmlDump.append("        <flowElementRef>_" + ((NodeImpl) node).getUniqueId() + "</flowElementRef>" + EOL);
+                }
+            } else {
+                String swimlane = (String) node.getMetaData("Lane");
+                if (lane.equals(swimlane)) {
+                    xmlDump.append("        <flowElementRef>_" + ((NodeImpl) node).getUniqueId() + "</flowElementRef>" + EOL);
+                }
+            }
+            if (node instanceof NodeContainer) {
+                visitLane((NodeContainer) node, lane, xmlDump);
+            }
+        }
+    }
+    
     protected void visitHeader(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
     	// TODO: imports, function imports
     	// TODO: globals
@@ -115,6 +162,54 @@
         xmlDump.append(EOL);
     }
     
+    protected void visitInterfaces(WorkflowProcess process, StringBuilder xmlDump) {
+        for (Node node: process.getNodes()) {
+            if (node instanceof WorkItemNode) {
+                Work work = ((WorkItemNode) node).getWork();
+                if (work != null) {
+                    if ("Service Task".equals(work.getName())) {
+                        String interfaceName = (String) work.getParameter("Interface");
+                        if (interfaceName == null) {
+                            interfaceName = "";
+                        }
+                        String operationName = (String) work.getParameter("Operation");
+                        if (operationName == null) {
+                            operationName = "";
+                        }
+                        String parameterType = (String) work.getParameter("ParameterType");
+                        if (parameterType == null) {
+                            parameterType = "";
+                        }
+                        xmlDump.append(
+                            "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_InMessageType\" structureRef=\"" + parameterType + "\"/>" + EOL +
+                            "  <message id=\"_" + getUniqueNodeId(node) + "_InMessage\" structureRef=\"_" + getUniqueNodeId(node) + "_InMessageType\" />" + EOL +
+                            "  <interface id=\"_" + getUniqueNodeId(node) + "_ServiceInterface\" name=\"" + interfaceName + "\">" + EOL +
+                            "    <operation id=\"_" + getUniqueNodeId(node) + "_ServiceOperation\" name=\"" + operationName + "\">" + EOL + 
+                            "      <inMessageRef>_" + getUniqueNodeId(node) + "_InMessage</inMessageRef>" + EOL +
+                            "    </operation>" + EOL +
+                            "  </interface>" + EOL + EOL);
+                    } else if ("Send Task".equals(work.getName())) {
+                        String messageType = (String) work.getParameter("MessageType");
+                        if (messageType == null) {
+                            messageType = "";
+                        }
+                        xmlDump.append(
+                            "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+                            "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                    } else if ("Receive Task".equals(work.getName())) {
+                        String messageType = (String) work.getParameter("MessageType");
+                        if (messageType == null) {
+                            messageType = "";
+                        }
+                        xmlDump.append(
+                            "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+                            "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                    }
+                }
+            }
+        }
+    }
+    
     private void visitNodes(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
     	xmlDump.append("    <!-- nodes -->" + EOL);
         for (Node node: process.getNodes()) {
@@ -161,21 +256,31 @@
         	Split split = (Split) connection.getFrom();
         	if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
         		Constraint constraint = split.getConstraint(connection);
-        		String constraintString = constraint.getConstraint();
         		xmlDump.append(">" + EOL +
     				"      <conditionExpression xs:type=\"tFormalExpression\" ");
-        		if ("code".equals(constraint.getType())) {
-	        		if (JavaDialect.ID.equals(constraint.getDialect())) {
-	        			xmlDump.append(" language=\"" + JAVA_LANGUAGE + "\" ");
-	        		}
+        		if (constraint == null) {
+        		    xmlDump.append("/>");
         		} else {
-        			xmlDump.append(" language=\"" + RULE_LANGUAGE + "\" ");
+                    if ("code".equals(constraint.getType())) {
+                        if (JavaDialect.ID.equals(constraint.getDialect())) {
+                            xmlDump.append("language=\"" + JAVA_LANGUAGE + "\" ");
+                        } else if (XPathDialect.ID.equals(constraint.getDialect())) {
+                            xmlDump.append("language=\"" + XPATH_LANGUAGE + "\" ");
+                        }
+                    } else {
+                        xmlDump.append("language=\"" + RULE_LANGUAGE + "\" ");
+                    }
+                    if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
+            			xmlDump.append("tns:name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
+            		}
+                    String constraintString = constraint.getConstraint();
+                    if (constraintString == null) {
+                        constraintString = "";
+                    }
+                    xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</conditionExpression>");
         		}
-        		if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
-        			xmlDump.append("tns:name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
-        		}
-        		xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</conditionExpression>" + EOL +
-	    				"    </sequenceFlow>" + EOL);
+        		xmlDump.append(EOL
+    		        + "   </sequenceFlow>" + EOL);
         	} else {
             	xmlDump.append("/>" + EOL);
             }

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,9 @@
+package org.drools.bpmn2.xml.di;
+
+public class ActivityShapeHandler extends ShapeHandler {
+
+    protected String getNodeRefName() {
+        return "activityRef";
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,27 @@
+package org.drools.bpmn2.xml.di;
+
+import org.drools.xml.ExtensibleXmlParser;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class EventShapeHandler extends ShapeHandler {
+
+    protected String getNodeRefName() {
+        return "eventRef";
+    }
+
+    public Object start(final String uri, final String localName,
+            final Attributes attrs, final ExtensibleXmlParser parser)
+            throws SAXException {
+        NodeInfo nodeInfo = (NodeInfo) super.start(
+            uri, localName, attrs, parser);
+        int offsetX = (int) ((nodeInfo.getWidth() - 48) / 2);
+        nodeInfo.setX(nodeInfo.getX() + offsetX);
+        nodeInfo.setWidth(48);
+        int offsetY = (int) ((nodeInfo.getHeight() - 48) / 2);
+        nodeInfo.setY(nodeInfo.getY() + offsetY);
+        nodeInfo.setHeight(48);
+        return nodeInfo;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,27 @@
+package org.drools.bpmn2.xml.di;
+
+import org.drools.xml.ExtensibleXmlParser;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class GatewayShapeHandler extends ShapeHandler {
+
+    protected String getNodeRefName() {
+        return "gatewayRef";
+    }
+
+    public Object start(final String uri, final String localName,
+            final Attributes attrs, final ExtensibleXmlParser parser)
+            throws SAXException {
+        NodeInfo nodeInfo = (NodeInfo) super.start(
+            uri, localName, attrs, parser);
+        int offsetX = (int) ((nodeInfo.getWidth() - 48) / 2);
+        nodeInfo.setX(nodeInfo.getX() + offsetX);
+        nodeInfo.setWidth(48);
+        int offsetY = (int) ((nodeInfo.getHeight() - 48) / 2);
+        nodeInfo.setY(nodeInfo.getY() + offsetY);
+        nodeInfo.setHeight(48);
+        return nodeInfo;
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,162 @@
+package org.drools.bpmn2.xml.di;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.bpmn2.xml.di.SequenceFlowConnectorHandler.ConnectionInfo;
+import org.drools.bpmn2.xml.di.ShapeHandler.NodeInfo;
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.impl.ConnectionImpl;
+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 ProcessDiagramHandler extends BaseAbstractHandler implements Handler {
+
+    public ProcessDiagramHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = false;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(null);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(org.drools.definition.process.Process.class);
+    }
+    
+    public Object start(final String uri, final String localName,
+                        final Attributes attrs, final ExtensibleXmlParser parser)
+            throws SAXException {
+        parser.startElementBuilder(localName, attrs);
+
+        final String processRef = attrs.getValue("processRef");
+        ProcessInfo info = new ProcessInfo(processRef);
+        return info;
+    }
+
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        parser.endElementBuilder();
+        ProcessInfo processInfo = (ProcessInfo) parser.getCurrent();
+        RuleFlowProcess process = (RuleFlowProcess)
+            ((ProcessBuildData) parser.getData()).getProcess();
+        for (NodeInfo nodeInfo: processInfo.getNodeInfos().values()) {
+            boolean found = false;
+            for (Node node: process.getNodes()) {
+                String id = (String) node.getMetaData("UniqueId");
+                if (nodeInfo.getNodeRef().equals(id)) {
+                    found = true;
+                    ((org.drools.workflow.core.Node) node).setMetaData("x", nodeInfo.getX());
+                    ((org.drools.workflow.core.Node) node).setMetaData("y", nodeInfo.getY());
+                    ((org.drools.workflow.core.Node) node).setMetaData("width", nodeInfo.getWidth());
+                    ((org.drools.workflow.core.Node) node).setMetaData("height", nodeInfo.getHeight());
+                    break;
+                }
+            }
+            if (!found) {
+                throw new IllegalArgumentException(
+                    "Could not find node " + nodeInfo.getNodeRef());
+            }
+        }
+        for (ConnectionInfo connectionInfo: processInfo.getConnectionInfos()) {
+            if (connectionInfo.getBendpoints() != null) {
+                NodeInfo sourceNodeInfo = processInfo.getNodeInfo(connectionInfo.getSourceRef());
+                if (sourceNodeInfo == null) {
+                    throw new IllegalArgumentException(
+                        "Could not find sourceRef for connection info: " + connectionInfo.getSourceRef());
+                }
+                NodeInfo targetNodeInfo = processInfo.getNodeInfo(connectionInfo.getTargetRef());
+                if (targetNodeInfo == null) {
+                    throw new IllegalArgumentException(
+                        "Could not find sourceRef for connection info: " + connectionInfo.getTargetRef());
+                }
+                Node sourceNode = null;
+                for (Node node: process.getNodes()) {
+                    String id = (String) node.getMetaData("UniqueId");
+                    if (sourceNodeInfo.getNodeRef().equals(id)) {
+                        sourceNode = node;
+                        break;
+                    }
+                }
+                if (sourceNode == null) {
+                    throw new IllegalArgumentException(
+                        "Could not find node for nodeRef: " + sourceNodeInfo.getNodeRef());
+                }
+                boolean found = false;
+                for (List<Connection> outgoingConnections: sourceNode.getOutgoingConnections().values()) {
+                    for (Connection connection: outgoingConnections) {
+                        if (targetNodeInfo.getNodeRef().equals(connection.getTo().getMetaData("UniqueId"))) {
+                            ((ConnectionImpl) connection).setMetaData(
+                                "bendpoints", connectionInfo.getBendpoints());
+                            found = true;
+                            break;
+                        }
+                    }
+                    if (found) {
+                        break;
+                    }
+                }
+                if (!found) {
+                    throw new IllegalArgumentException(
+                        "Could not find connection from  " + sourceNodeInfo.getNodeRef() + 
+                        " to " + targetNodeInfo.getNodeRef());
+                }
+            }
+        }
+        return processInfo;
+    }
+
+    public Class<?> generateNodeFor() {
+        return ProcessInfo.class;
+    }
+    
+    public static class ProcessInfo {
+        
+        private String processRef;
+        private Map<String, NodeInfo> nodeInfos = new HashMap<String, NodeInfo>();
+        private List<ConnectionInfo> connectionInfos = new ArrayList<ConnectionInfo>();
+
+        public ProcessInfo(String processRef) {
+            this.processRef = processRef;
+        }
+        
+        public String getProcessRef() {
+            return processRef;
+        }
+        
+        public void addNodeInfo(NodeInfo nodeInfo) {
+            this.nodeInfos.put(nodeInfo.getId(), nodeInfo);
+        }
+        
+        public Map<String, NodeInfo> getNodeInfos() {
+            return nodeInfos;
+        }
+        
+        public NodeInfo getNodeInfo(String nodeRef) {
+            return nodeInfos.get(nodeRef);
+        }
+        
+        public void addConnectionInfo(ConnectionInfo connectionInfo) {
+            connectionInfos.add(connectionInfo);
+        }
+        
+        public List<ConnectionInfo> getConnectionInfos() {
+            return connectionInfos;
+        }
+        
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,128 @@
+package org.drools.bpmn2.xml.di;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.xml.di.ProcessDiagramHandler.ProcessInfo;
+import org.drools.bpmn2.xml.di.ShapeHandler.NodeInfo;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class SequenceFlowConnectorHandler extends BaseAbstractHandler implements Handler {
+
+    public SequenceFlowConnectorHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = false;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(ProcessInfo.class);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(null);
+        this.validPeers.add(NodeInfo.class);
+        this.validPeers.add(ConnectionInfo.class);
+    }
+    
+    public Object start(final String uri, final String localName,
+                        final Attributes attrs, final ExtensibleXmlParser parser)
+            throws SAXException {
+        parser.startElementBuilder(localName, attrs);
+
+        final String sequenceFlowRef = attrs.getValue("sequenceFlowRef");
+        ConnectionInfo info = new ConnectionInfo(sequenceFlowRef);
+        final String sourceRef = attrs.getValue("sourceRef");
+        final String targetRef = attrs.getValue("targetRef");
+        info.setSourceRef(sourceRef);
+        info.setTargetRef(targetRef);
+        ProcessInfo processInfo = (ProcessInfo) parser.getParent();
+        processInfo.addConnectionInfo(info);
+        return info;
+    }
+
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        Element element = parser.endElementBuilder();
+        // now get bendpoints
+        String bendpoints = null;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode instanceof Element) {
+            String nodeName = xmlNode.getNodeName();
+            if ("bendpoint".equals(nodeName)) {
+                String x = ((Element) xmlNode).getAttribute("x");
+                String y = ((Element) xmlNode).getAttribute("y");
+                try {
+                    int xValue = new Float(x).intValue();
+                    int yValue = new Float(y).intValue();
+                    if (bendpoints == null) {
+                        bendpoints = "[";
+                    } else {
+                        bendpoints += ";";
+                    }
+                    bendpoints += xValue + "," + yValue;
+                } catch (NumberFormatException e) {
+                    throw new IllegalArgumentException("Invalid bendpoint value", e);
+                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+        ConnectionInfo connectionInfo = (ConnectionInfo) parser.getCurrent();
+        if (bendpoints != null) {
+            connectionInfo.setBendpoints(bendpoints + "]");
+        }
+        return connectionInfo;
+    }
+
+    public Class<?> generateNodeFor() {
+        return ConnectionInfo.class;
+    }
+    
+    public static class ConnectionInfo {
+        
+        private String sequenceFlowRef;
+        private String sourceRef;
+        private String targetRef;
+        private String bendpoints;
+
+        public ConnectionInfo(String sequenceFlowRef) {
+            this.sequenceFlowRef = sequenceFlowRef;
+        }
+        
+        public String getSequenceFlowRef() {
+            return sequenceFlowRef;
+        }
+
+        public String getSourceRef() {
+            return sourceRef;
+        }
+
+        public void setSourceRef(String sourceRef) {
+            this.sourceRef = sourceRef;
+        }
+
+        public String getTargetRef() {
+            return targetRef;
+        }
+
+        public void setTargetRef(String targetRef) {
+            this.targetRef = targetRef;
+        }
+
+        public String getBendpoints() {
+            return bendpoints;
+        }
+
+        public void setBendpoints(String bendpoints) {
+            this.bendpoints = bendpoints;
+        }
+        
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,119 @@
+package org.drools.bpmn2.xml.di;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.xml.di.ProcessDiagramHandler.ProcessInfo;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public abstract class ShapeHandler extends BaseAbstractHandler implements Handler {
+
+    public ShapeHandler() {
+        initValidParents();
+        initValidPeers();
+        this.allowNesting = true;
+    }
+    
+    protected void initValidParents() {
+        this.validParents = new HashSet<Class<?>>();
+        this.validParents.add(ProcessInfo.class);
+    }
+    
+    protected void initValidPeers() {
+        this.validPeers = new HashSet<Class<?>>();
+        this.validPeers.add(null);
+        this.validPeers.add(NodeInfo.class);
+    }
+    
+    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 eventRef = attrs.getValue(getNodeRefName());
+        final String height = attrs.getValue("height");
+        final String width = attrs.getValue("width");
+        final String x = attrs.getValue("x");
+        final String y = attrs.getValue("y");
+        NodeInfo nodeInfo = new NodeInfo(id, eventRef);
+        nodeInfo.setX(new Float(x).intValue());
+        nodeInfo.setY(new Float(y).intValue());
+        nodeInfo.setWidth(new Float(width).intValue());
+        nodeInfo.setHeight(new Float(height).intValue());
+        ProcessInfo processInfo = (ProcessInfo) parser.getParent();
+        processInfo.addNodeInfo(nodeInfo);
+        return nodeInfo;
+    }
+    
+    protected abstract String getNodeRefName();
+
+    public Object end(final String uri, final String localName,
+                      final ExtensibleXmlParser parser) throws SAXException {
+        parser.endElementBuilder();
+        return parser.getCurrent();
+    }
+
+    public Class<?> generateNodeFor() {
+        return NodeInfo.class;
+    }
+    
+    public static class NodeInfo {
+        
+        private String id;
+        private String nodeRef;
+        private Integer x;
+        private Integer y;
+        private Integer width;
+        private Integer height;
+
+        public NodeInfo(String id, String nodeRef) {
+            this.id = id;
+            this.nodeRef = nodeRef;
+        }
+        
+        public String getId() {
+            return id;
+        }
+
+        public String getNodeRef() {
+            return nodeRef;
+        }
+        
+        public Integer getX() {
+            return x;
+        }
+
+        public void setX(Integer x) {
+            this.x = x;
+        }
+
+        public Integer getY() {
+            return y;
+        }
+
+        public void setY(Integer y) {
+            this.y = y;
+        }
+
+        public Integer getWidth() {
+            return width;
+        }
+
+        public void setWidth(Integer width) {
+            this.width = width;
+        }
+
+        public Integer getHeight() {
+            return height;
+        }
+
+        public void setHeight(Integer height) {
+            this.height = height;
+        }
+        
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,167 @@
+package org.drools.bpmn2.xpath;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.base.TypeResolver;
+import org.drools.compiler.Dialect;
+import org.drools.io.Resource;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.ProcessDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ActionBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.EnabledBuilder;
+import org.drools.rule.builder.EngineElementBuilder;
+import org.drools.rule.builder.EntryPointBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.PackageBuildContext;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ProcessBuildContext;
+import org.drools.rule.builder.ProcessClassBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+
+public class XPathDialect implements Dialect {
+
+    public static final String ID = "XPath";
+    
+	private static final XPathReturnValueEvaluatorBuilder RETURN_VALUE_EVALUATOR_BUILDER = new XPathReturnValueEvaluatorBuilder();
+	
+	public String getId() {
+		return ID;
+	}
+
+	public String getExpressionDialectName() {
+		return "XPath";
+	}
+
+	public ReturnValueEvaluatorBuilder getReturnValueEvaluatorBuilder() {
+		return RETURN_VALUE_EVALUATOR_BUILDER;
+	}
+
+	public ActionBuilder getActionBuilder() {
+		return null;
+	}
+
+	public void addImport(String importEntry) {
+	}
+
+	public void addProcess(ProcessBuildContext context) {
+	}
+
+	public void addRule(RuleBuildContext context) {
+	}
+
+	public void addStaticImport(String importEntry) {
+	}
+
+	public void compileAll() {
+	}
+
+	public AccumulateBuilder getAccumulateBuilder() {
+		return null;
+	}
+
+	public RuleConditionBuilder getBuilder(Class<?> clazz) {
+		return null;
+	}
+
+	public Map<Class<?>,EngineElementBuilder> getBuilders() {
+		return null;
+	}
+
+	public ConsequenceBuilder getConsequenceBuilder() {
+		return null;
+	}
+
+	public EntryPointBuilder getEntryPointBuilder() {
+		return null;
+	}
+
+	public RuleConditionBuilder getEvalBuilder() {
+		return null;
+	}
+
+	public FromBuilder getFromBuilder() {
+		return null;
+	}
+
+	public PatternBuilder getPatternBuilder() {
+		return null;
+	}
+
+	public PredicateBuilder getPredicateBuilder() {
+		return null;
+	}
+
+	public ProcessClassBuilder getProcessClassBuilder() {
+		return null;
+	}
+
+	public QueryBuilder getQueryBuilder() {
+		return null;
+	}
+
+	public List<?> getResults() {
+		return null;
+	}
+
+	public ReturnValueBuilder getReturnValueBuilder() {
+		return null;
+	}
+
+	public RuleClassBuilder getRuleClassBuilder() {
+		return null;
+	}
+
+	public SalienceBuilder getSalienceBuilder() {
+		return null;
+	}
+
+	public TypeResolver getTypeResolver() {
+		return null;
+	}
+
+	public void init(RuleDescr ruleDescr) {
+	}
+
+	public void init(ProcessDescr processDescr) {
+	}
+
+	public void postCompileAddFunction(FunctionDescr functionDescr,
+			TypeResolver typeResolver) {
+	}
+
+	public void preCompileAddFunction(FunctionDescr functionDescr,
+			TypeResolver typeResolver) {
+	}
+
+	public EnabledBuilder getEnabledBuilder() {
+		return null;
+	}
+
+	public void addFunction(FunctionDescr functionDescr, TypeResolver typeResolver, Resource resource) {
+	}
+
+	public AnalysisResult analyzeBlock(PackageBuildContext context,
+			BaseDescr descr, String text,
+			Map<String, Class<?>>[] availableIdentifiers) {
+		return null;
+	}
+
+	public AnalysisResult analyzeExpression(PackageBuildContext context,
+			BaseDescr descr, Object content,
+			Map<String, Class<?>>[] availableIdentifiers) {
+		return null;
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,26 @@
+package org.drools.bpmn2.xpath;
+
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.PackageRegistry;
+import org.drools.rule.Package;
+
+public class XPathDialectConfiguration implements DialectConfiguration {
+
+	private PackageBuilderConfiguration packageBuilderConfiguration;
+	
+	public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+		return packageBuilderConfiguration;
+	}
+
+	public void init(PackageBuilderConfiguration configuration) {
+		this.packageBuilderConfiguration = configuration;
+	}
+
+	public Dialect newDialect(PackageBuilder packageBuilder, PackageRegistry pkgRegistry, Package pkg) {
+		return new XPathDialect();
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,38 @@
+package org.drools.bpmn2.xpath;
+
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.SimpleBindings;
+
+import org.drools.WorkingMemory;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.spi.ProcessContext;
+import org.drools.spi.ReturnValueEvaluator;
+
+public class XPathReturnValueEvaluator implements ReturnValueEvaluator {
+    
+    private static XPathScriptEngineFactory FACTORY = new XPathScriptEngineFactory();
+
+    private String expression;
+    
+    public void setExpression(String expression) {
+        this.expression = expression;
+    }
+
+    public Object evaluate(WorkingMemory workingMemory, ProcessContext processContext) throws Exception {
+        ScriptEngine engine = FACTORY.getScriptEngine();
+        VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+            ((ProcessInstance) processContext.getProcessInstance())
+                .getContextInstance(VariableScope.VARIABLE_SCOPE);
+        if (variableScopeInstance != null) {
+            // TODO include other scopes that process-level scope as well
+            Bindings bindings = new SimpleBindings(variableScopeInstance.getVariables());
+            return engine.eval(expression, bindings);
+        } else {
+            return engine.eval(expression);
+        }
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,20 @@
+package org.drools.bpmn2.xpath;
+
+import org.drools.compiler.ReturnValueDescr;
+import org.drools.process.core.ContextResolver;
+import org.drools.rule.builder.PackageBuildContext;
+import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
+import org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator;
+
+public class XPathReturnValueEvaluatorBuilder implements ReturnValueEvaluatorBuilder {
+
+    public void build(PackageBuildContext context,
+            ReturnValueConstraintEvaluator returnValueConstraintEvaluator,
+            ReturnValueDescr returnValueDescr, ContextResolver contextResolver) {
+        XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
+        String xpathString = returnValueDescr.getText();
+        evaluator.setExpression(xpathString);
+        returnValueConstraintEvaluator.setEvaluator(evaluator);
+    }
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,380 @@
+package org.drools.bpmn2.xpath;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.script.AbstractScriptEngine;
+import javax.script.Bindings;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.Invocable;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptException;
+import javax.script.SimpleBindings;
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+import javax.xml.xpath.XPathFunction;
+import javax.xml.xpath.XPathFunctionResolver;
+import javax.xml.xpath.XPathVariableResolver;
+
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class XPathScriptEngine extends AbstractScriptEngine implements Compilable {
+
+    private ScriptEngineFactory factory;
+
+    private XPathFactory xpathFactory;
+
+    public static final String XPATH_RESULT_TYPE = "com.sun.script.xpath.resultType";
+
+    public static final String XPATH_INPUT_SRC = "com.sun.script.xpath.inputSource";
+
+    public static final String XMLNS_COLON = "xmlns:";
+
+    public static final String XPATH_CONTEXT_PREFIX = "context";
+
+    public static final String XPATH_CONTEXT_URI = "http://www.sun.com/java/jsr223/xpath/context";
+
+    public XPathScriptEngine() {
+        xpathFactory = XPathFactory.newInstance();
+    }
+
+    private class XPathCompiledScript extends CompiledScript {
+
+        private XPathExpression expr;
+
+        XPathCompiledScript(XPathExpression expr) {
+            this.expr = expr;
+        }
+
+        public ScriptEngine getEngine() {
+            return XPathScriptEngine.this;
+        }
+
+        public Object eval(ScriptContext ctx) throws ScriptException {
+            return evalXPath(expr, ctx);
+        }
+    }
+
+    public CompiledScript compile(String script) throws ScriptException {
+        XPathExpression expr = compileXPath(script, context);
+        return new XPathCompiledScript(expr);
+    }
+
+    public CompiledScript compile(Reader reader) throws ScriptException {
+        return compile(readFully(reader));
+    }
+
+    public Object eval(String str, ScriptContext ctx) throws ScriptException {
+        XPathExpression expr = compileXPath(str, ctx);
+        return evalXPath(expr, ctx);
+    }
+
+    public Object eval(Reader reader, ScriptContext ctx) throws ScriptException {
+        return eval(readFully(reader), ctx);
+    }
+
+    public ScriptEngineFactory getFactory() {
+        synchronized (this) {
+            if (factory == null) {
+                factory = new XPathScriptEngineFactory();
+            }
+        }
+        return factory;
+    }
+
+    public Bindings createBindings() {
+        return new SimpleBindings();
+    }
+
+    void setFactory(ScriptEngineFactory factory) {
+        this.factory = factory;
+    }
+
+    private static Object findVariable(QName qname, ScriptContext ctx) {
+        String name;
+        int scope;
+
+        if (XPATH_CONTEXT_URI.equals(qname.getNamespaceURI())) {
+            name = qname.getLocalPart();
+            synchronized (ctx) {
+                scope = ctx.getAttributesScope(name);
+                if (scope != -1) {
+                    return ctx.getAttribute(name, scope);
+                }
+            }
+        }
+        if (qname.getPrefix() == null || "".equals(qname.getPrefix())) {
+            name = qname.getLocalPart();
+        } else {
+            name = qname.getPrefix() + ":" + qname.getLocalPart();
+        }
+        synchronized (ctx) {
+            scope = ctx.getAttributesScope(name);
+            if (scope != -1) {
+                return ctx.getAttribute(name, scope);
+            }
+        }
+        return null;
+    }
+
+    private static NamespaceContext makeNamespaceContext(ScriptContext ctx) {
+
+        final Map<String, String> namespaces = new HashMap<String, String>();
+        for (int scope : ctx.getScopes()) {
+            Bindings bind = ctx.getBindings(scope);
+            if (bind != null) {
+                // TODO collectNamespaces(namespaces, bind);
+            }
+        }
+        Object def = ctx.getAttribute(XMLConstants.XMLNS_ATTRIBUTE);
+        if (def instanceof String) {
+            namespaces.put(XMLConstants.DEFAULT_NS_PREFIX, (String) def);
+        }
+
+        namespaces.put(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI);
+        namespaces.put(XMLConstants.XMLNS_ATTRIBUTE, XMLConstants.XMLNS_ATTRIBUTE_NS_URI);
+
+        namespaces.put(XPATH_CONTEXT_PREFIX, XPATH_CONTEXT_URI);
+
+        return new NamespaceContext() {
+
+            public String getNamespaceURI(String prefix) {
+                if (prefix == null) {
+                    throw new IllegalArgumentException();
+                }
+                String uri = namespaces.get(prefix);
+                if (uri == null) {
+                    return XMLConstants.NULL_NS_URI;
+                } else {
+                    return uri;
+                }
+            }
+
+            public String getPrefix(String namespaceURI) {
+                if (namespaceURI == null) {
+                    throw new IllegalArgumentException();
+                }
+                for (String prefix : namespaces.keySet()) {
+                    String uri = namespaces.get(prefix);
+                    if (namespaceURI.equals(uri)) {
+                        return prefix;
+                    }
+                }
+                return null;
+            }
+
+            public Iterator<String> getPrefixes(String namespaceURI) {
+                if (namespaceURI == null) {
+                    throw new IllegalArgumentException();
+                }
+                List<String> list = new ArrayList<String>();
+                for (String prefix : namespaces.keySet()) {
+                    String uri = namespaces.get(prefix);
+                    if (namespaceURI.equals(uri)) {
+                        list.add(prefix);
+                    }
+                }
+                return Collections.unmodifiableList(list).iterator();
+            }
+        };
+    }
+
+    private static XPathFunction makeXPathFunction(
+            final Constructor<XPathFunction> ctr, int arity) {
+        if (ctr.getParameterTypes().length != arity) {
+            return null;
+        }
+        return new XPathFunction() {
+            @SuppressWarnings("unchecked")
+            public Object evaluate(List args) {
+                try {
+                    return ctr.newInstance(args.toArray());
+                } catch (Exception exp) {
+                    throw new RuntimeException(exp);
+                }
+            }
+        };
+    }
+
+    private static XPathFunction makeXPathFunction(final Method method, int arity) {
+        int modifiers = method.getModifiers();
+        int numArgs = method.getParameterTypes().length;
+        if (Modifier.isStatic(modifiers) && numArgs == arity) {
+            return new XPathFunction() {
+                @SuppressWarnings("unchecked")
+                public Object evaluate(List args) {
+                    try {
+                        return method.invoke(null, args.toArray());
+                    } catch (Exception exp) {
+                        throw new RuntimeException(exp);
+                    }
+                }
+            };
+        } else if ((numArgs + 1) == arity) {
+            return new XPathFunction() {
+                @SuppressWarnings("unchecked")
+                public Object evaluate(List args) {
+                    List tmp = args.subList(1, args.size());
+                    try {
+                        return method.invoke(args.get(0), tmp.toArray());
+                    } catch (Exception exp) {
+                        throw new RuntimeException(exp);
+                    }
+                }
+            };
+        } else {
+            return null;
+        }
+    }
+
+    private static XPathFunction makeXPathFunction(final String funcName,
+            final Invocable invocable) {
+        return new XPathFunction() {
+            @SuppressWarnings("unchecked")
+            public Object evaluate(List args) {
+                try {
+                    return invocable.invokeFunction(funcName, args.toArray());
+                } catch (Exception exp) {
+                    throw new RuntimeException(exp);
+                }
+            }
+        };
+    }
+
+    @SuppressWarnings("unchecked")
+    private static XPathFunction makeXPathFunction(QName qname, Object obj, int arity) {
+        if (obj == null) {
+            return null;
+        } else if (obj instanceof XPathFunction) {
+            return (XPathFunction) obj;
+        } else if (obj instanceof Method) {
+            return makeXPathFunction((Method) obj, arity);
+        } else if (obj instanceof Constructor) {
+            return makeXPathFunction((Constructor<XPathFunction>) obj, arity);
+        } else if (obj instanceof Invocable) {
+            return makeXPathFunction(qname.getLocalPart(), (Invocable) obj);
+        } else {
+            return null;
+        }
+    }
+
+    private XPathExpression compileXPath(String str, final ScriptContext ctx)
+            throws ScriptException {
+        try {
+            XPath xpath = xpathFactory.newXPath();
+            xpath.setXPathVariableResolver(new XPathVariableResolver() {
+                public Object resolveVariable(QName qname) {
+                    return findVariable(qname, ctx);
+                }
+            });
+            xpath.setXPathFunctionResolver(new XPathFunctionResolver() {
+                public XPathFunction resolveFunction(QName qname, int arity) {
+                    Object obj = findVariable(qname, ctx);
+                    return makeXPathFunction(qname, obj, arity);
+                }
+            });
+            int begin = str.indexOf("getProcessProperty") > -1 ? 19 : 0;
+            if (begin > 0) {
+              String objectDataRef = str.substring(begin + 1, str.indexOf(")") - 1);
+              Document objectData = (Document) ctx.getAttribute(objectDataRef);
+              ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+              Source xmlSource = new DOMSource(objectData);
+              Result outputTarget = new StreamResult(outputStream);
+              TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);
+              InputStream is = new ByteArrayInputStream(outputStream.toByteArray());
+              ctx.setReader(new InputStreamReader(is));
+              str = str.substring(str.indexOf(")") + 1);
+            }
+            xpath.setNamespaceContext(makeNamespaceContext(ctx));
+            XPathExpression xpe = xpath.compile(str);
+            return xpe;
+        } catch (Exception exp) {
+            throw new ScriptException(exp);
+        }
+    }
+
+    private Object getVariable(ScriptContext ctx, String name) {
+        synchronized (ctx) {
+            int scope = ctx.getAttributesScope(name);
+            if (scope != -1) {
+                return ctx.getAttribute(name, scope);
+            }
+        }
+        return null;
+    }
+
+    private Object evalXPath(XPathExpression expr, final ScriptContext ctx) throws ScriptException {
+        try {
+            Object resultType = getVariable(ctx, XPATH_RESULT_TYPE);
+            Object input = getVariable(ctx, XPATH_INPUT_SRC);
+            InputSource src;
+            if (input == null) {
+                src = new InputSource(ctx.getReader());
+            } else {
+                if (input instanceof InputSource) {
+                    src = (InputSource) input;
+                } else if (input instanceof String) {
+                    src = new InputSource((String) input);
+                } else if (input instanceof Reader) {
+                    src = new InputSource((Reader) input);
+                } else if (input instanceof InputStream) {
+                    src = new InputSource((InputStream) input);
+                } else {
+                    src = null;
+                }
+            }
+            resultType = XPathConstants.BOOLEAN;
+            if (resultType instanceof QName) {
+                return (src != null) ? expr.evaluate(src, (QName) resultType)
+                        : expr.evaluate(input, (QName) resultType);
+            } else {
+                return (src != null) ? expr.evaluate(src) : expr
+                        .evaluate(input);
+            }
+        } catch (Exception exp) {
+            throw new ScriptException(exp);
+        }
+    }
+
+    private String readFully(Reader reader) throws ScriptException {
+        char[] arr = new char[8 * 1024];
+        StringBuilder buf = new StringBuilder();
+        int numChars;
+        try {
+            while ((numChars = reader.read(arr, 0, arr.length)) > 0) {
+                buf.append(arr, 0, numChars);
+            }
+        } catch (IOException exp) {
+            throw new ScriptException(exp);
+        }
+        return buf.toString();
+    }
+    
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,88 @@
+package org.drools.bpmn2.xpath;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+
+public class XPathScriptEngineFactory implements ScriptEngineFactory {
+
+    private static List<String> names;
+    private static List<String> extensions;
+    private static List<String> mimeTypes;
+    static {
+        names = new ArrayList<String>(1);
+        names.add("xpath");
+        names = Collections.unmodifiableList(names);
+        extensions = names;
+        mimeTypes = new ArrayList<String>(0);
+        mimeTypes = Collections.unmodifiableList(mimeTypes);
+    }
+    
+    public String getEngineName() {
+        return "xpath";
+    }
+
+    public String getEngineVersion() {
+        return "1.0";
+    }
+
+    public List<String> getExtensions() {
+        return extensions;
+    }
+
+    public String getLanguageName() {
+        return "jaxp";
+    }
+
+    public String getLanguageVersion() {
+        return "1.4";
+    }
+
+    public String getMethodCallSyntax(String obj, String m, String... args) {
+        throw new UnsupportedOperationException("getMethodCallSyntax");
+    }
+
+    public List<String> getMimeTypes() {
+        return mimeTypes;
+    }
+
+    public List<String> getNames() {
+        return names;
+    }
+
+    public String getOutputStatement(String str) {
+        throw new UnsupportedOperationException("getOutputStatement");
+    }
+
+    public String getParameter(String key) {
+        if (key.equals(ScriptEngine.ENGINE)) {
+            return getEngineName();
+        } else if (key.equals(ScriptEngine.ENGINE_VERSION)) {
+            return getEngineVersion();
+        } else if (key.equals(ScriptEngine.NAME)) {
+            return getEngineName();
+        } else if (key.equals(ScriptEngine.LANGUAGE)) {
+            return getLanguageName();
+        } else if (key.equals(ScriptEngine.LANGUAGE_VERSION)) {
+            return getLanguageVersion();
+        } else if (key.equals("THREADING")) {
+            return "MULTITHREADED";
+        } else {
+            return null;
+        }
+    }
+
+    public String getProgram(String... statements) {
+        throw new UnsupportedOperationException("getProgram");
+    }
+
+    public ScriptEngine getScriptEngine() {
+        XPathScriptEngine engine = new XPathScriptEngine();
+        engine.setFactory(this);
+        return engine;
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd	2009-10-21 13:07:35 UTC (rev 29725)
@@ -2,10 +2,10 @@
 <xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"	
 	xmlns="http://schema.omg.org/spec/BPMN/2.0"
 	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
-	xmlns:di="http://www.omg.com/di/1.0.0"
+	xmlns:di="http://bpmndi.org"
 	targetNamespace="http://schema.omg.org/spec/BPMN/2.0">
 
-	<xsd:import namespace="http://www.omg.com/di/1.0.0" schemaLocation="DiagramInterchange.xsd"/>
+	<xsd:import namespace="http://bpmndi.org" schemaLocation="BPMNDI.xsd"/>
 	<xsd:include schemaLocation="Semantic.xsd"/>
 
 	<xsd:element name="definitions" type="tDefinitions"/>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,53 @@
+// We use MVEL to return a List of work definitions
+// The properties of the work definitions are specified as a Map<String, Object>
+// The allowed properties are name, parameters, displayName, icon and customEditor
+// The returned result should thus be of type List<Map<String, Object>>
+import org.drools.process.core.datatype.impl.type.StringDataType;
+
+[
+
+  [
+    "name" : "Manual Task",
+    "parameters" : [
+      "Description" : new StringDataType()
+    ],
+    "displayName" : "Manual Task",
+    "icon" : "icons/manual.gif"
+  ],
+  
+  [
+    "name" : "Service Task",
+    "parameters" : [
+      "Interface" : new StringDataType(),
+      "Operation" : new StringDataType()
+    ],
+    "displayName" : "Service Task",
+    "icon" : "icons/action.gif",
+    "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+  ],
+    
+  [
+    "name" : "Send Task",
+    "parameters" : [
+      "Implementation" : new StringDataType(),
+      "Operation" : new StringDataType(),
+      "Message" : new StringDataType()
+    ],
+    "displayName" : "Send Task",
+    "icon" : "icons/send.gif",
+    "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+  ],
+    
+  [
+    "name" : "Receive Task",
+    "parameters" : [
+      "Implementation" : new StringDataType(),
+      "Operation" : new StringDataType(),
+      "Message" : new StringDataType()
+    ],
+    "displayName" : "Receive Task",
+    "icon" : "icons/receive.gif",
+    "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+  ]
+    
+]
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2009 sp1 (http://www.altova.com) by Bruce Silver (private) -->
+<xs:schema xmlns="http://bpmndi.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://bpmndi.org" elementFormDefault="qualified" attributeFormDefault="unqualified">
+	<xs:element name="bpmndi">
+		<xs:annotation>
+			<xs:documentation>Comment describing your root element</xs:documentation>
+		</xs:annotation>
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="diagram" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="diagram" type="diagramType"/>
+	<xs:complexType name="diagramType">
+		<xs:attribute name="id" type="xs:ID" use="required"/>
+		<xs:attribute name="name" type="xs:string"/>
+		<xs:anyAttribute namespace="##other"/>
+	</xs:complexType>
+	<xs:element name="processDiagram" type="processDiagramType" substitutionGroup="diagram"/>
+	<xs:complexType name="processDiagramType">
+		<xs:complexContent>
+			<xs:extension base="diagramType">
+				<xs:sequence>
+					<xs:element ref="laneCompartment" maxOccurs="unbounded"/>
+					<xs:element ref="sequenceFlowConnector" minOccurs="0" maxOccurs="unbounded"/>
+					<xs:element ref="associationConnector" minOccurs="0" maxOccurs="unbounded"/>
+					<xs:element ref="dataAssociationConnector" minOccurs="0" maxOccurs="unbounded"/>
+				</xs:sequence>
+				<xs:attribute name="processRef" type="xs:IDREF"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="collaborationDiagram" type="collaborationDiagramType" substitutionGroup="diagram"/>
+	<xs:complexType name="collaborationDiagramType">
+		<xs:complexContent>
+			<xs:extension base="diagramType">
+				<xs:sequence>
+					<xs:element name="pool" type="poolCompartmentType" minOccurs="2" maxOccurs="unbounded"/>
+					<xs:element ref="messageFlowConnector" minOccurs="0" maxOccurs="unbounded"/>
+				</xs:sequence>
+				<xs:attribute name="collaborationRef" type="xs:IDREF"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="bpmnNode" type="bpmnNodeType"/>
+	<xs:complexType name="bpmnNodeType">
+		<xs:attribute name="id" type="xs:ID" use="required"/>
+		<xs:attribute name="name" type="xs:string"/>
+		<xs:attribute name="x"/>
+		<xs:attribute name="y"/>
+		<xs:attribute name="width"/>
+		<xs:attribute name="height"/>
+	</xs:complexType>
+	<xs:element name="bpmnCompartment" type="bpmnCompartmentType" substitutionGroup="bpmnNode"/>
+	<xs:complexType name="bpmnCompartmentType">
+		<xs:complexContent>
+			<xs:extension base="bpmnNodeType">
+				<xs:attribute name="isVisible" type="xs:boolean"/>
+				<xs:attribute name="orientation">
+					<xs:simpleType>
+						<xs:restriction base="xs:string">
+							<xs:enumeration value="horizontal"/>
+							<xs:enumeration value="vertical"/>
+						</xs:restriction>
+					</xs:simpleType>
+				</xs:attribute>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="laneCompartment" type="laneCompartmentType_1" substitutionGroup="bpmnCompartment"/>
+	<xs:complexType name="laneCompartmentType">
+		<xs:complexContent>
+			<xs:extension base="bpmnCompartmentType">
+				<xs:sequence>
+					<xs:element ref="bpmnShape" minOccurs="0" maxOccurs="unbounded"/>
+					<xs:element name="subLane" type="laneCompartmentType_1" minOccurs="0" maxOccurs="unbounded"/>
+				</xs:sequence>
+				<xs:attribute name="laneRef" type="xs:IDREF"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="poolCompartment" type="poolCompartmentType" substitutionGroup="bpmnCompartment"/>
+	<xs:complexType name="poolCompartmentType">
+		<xs:complexContent>
+			<xs:extension base="bpmnCompartmentType">
+				<xs:sequence>
+					<xs:element name="laneCompRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+				</xs:sequence>
+				<xs:attribute name="participantRef" type="xs:IDREF"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="bpmnShape" type="bpmnNodeType" substitutionGroup="bpmnNode"/>
+	<xs:element name="bpmnLabel" substitutionGroup="bpmnNode"/>
+	<xs:element name="activityShape" type="activityShapeType_1" substitutionGroup="bpmnShape"/>
+	<xs:complexType name="activityShapeType">
+		<xs:attribute name="activityRef" type="xs:IDREF"/>
+	</xs:complexType>
+	<xs:complexType name="activityShapeType_1">
+		<xs:complexContent>
+			<xs:extension base="bpmnNodeType">
+				<xs:attribute name="activityRef"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="subprocessShape" type="subprocessShapeType" substitutionGroup="activityShape"/>
+	<xs:complexType name="subprocessShapeType">
+		<xs:complexContent>
+			<xs:extension base="activityShapeType_1">
+				<xs:sequence>
+					<xs:element name="laneCompRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+				</xs:sequence>
+				<xs:attribute name="isExpanded" type="xs:boolean"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="calledSubprocessShape" type="calledSubprocessShapeType" substitutionGroup="activityShape"/>
+	<xs:complexType name="calledSubprocessShapeType">
+		<xs:complexContent>
+			<xs:extension base="activityShapeType_1">
+				<xs:attribute name="isExpanded" type="xs:boolean"/>
+				<xs:attribute name="diagramLink" type="xs:IDREF"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="taskShape" type="activityShapeType_1" substitutionGroup="activityShape"/>
+	<xs:element name="gatewayShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="gatewayRef"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="eventShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="eventRef"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dataObjectShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="dataObjectRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dataStoreShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="dataStoreRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dataInputShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="dataInputRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dataOutputShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="dataOutputRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="messageShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="messageRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="groupShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="categoryRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="textAnnotationShape" substitutionGroup="bpmnShape">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnNodeType">
+					<xs:attribute name="annotationRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="bpmnConnector" type="bpmnConnectorType"/>
+	<xs:complexType name="bpmnConnectorType">
+		<xs:sequence>
+			<xs:element name="bendpoint" minOccurs="0" maxOccurs="unbounded">
+				<xs:complexType>
+					<xs:attribute name="x" type="xs:double"/>
+					<xs:attribute name="y" type="xs:double"/>
+				</xs:complexType>
+			</xs:element>
+		</xs:sequence>
+		<xs:attribute name="id" type="xs:ID" use="required"/>
+		<xs:attribute name="sourceRef" type="xs:IDREF" use="required"/>
+		<xs:attribute name="targetRef" type="xs:IDREF" use="required"/>
+		<xs:attribute name="label" type="xs:string"/>
+	</xs:complexType>
+	<xs:element name="sequenceFlowConnector" substitutionGroup="bpmnConnector">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnConnectorType">
+					<xs:attribute name="sequenceFlowRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="messageFlowConnector">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="bpmnConnectorType">
+					<xs:attribute name="messageFlowRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="dataAssociationConnector" substitutionGroup="bpmnConnector">
+		<xs:complexType>
+			<xs:complexContent>
+				<xs:extension base="associationConnectorType">
+					<xs:attribute name="dataAssociationRef" type="xs:IDREF"/>
+				</xs:extension>
+			</xs:complexContent>
+		</xs:complexType>
+	</xs:element>
+	<xs:element name="associationConnector" type="associationConnectorType_1" substitutionGroup="bpmnConnector"/>
+	<xs:complexType name="associationConnectorType">
+		<xs:complexContent>
+			<xs:extension base="bpmnConnectorType">
+				<xs:attribute name="isDirectional" type="xs:boolean"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:element name="compensationFlowConnector" type="associationConnectorType_1" substitutionGroup="associationConnector"/>
+	<xs:element name="lane" type="laneCompartmentType"/>
+	<xs:complexType name="laneCompartmentType_1">
+		<xs:complexContent>
+			<xs:extension base="laneCompartmentType"/>
+		</xs:complexContent>
+	</xs:complexType>
+	<xs:complexType name="associationConnectorType_1">
+		<xs:complexContent>
+			<xs:extension base="associationConnectorType">
+				<xs:attribute name="associationRef" type="xs:IDREF"/>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
+</xs:schema>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,9 @@
+package org.drools.bpmn2;
+
+public class HelloService {
+    
+    public String hello(String name) {
+        return "Hello " + 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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,12 +1,26 @@
 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;
 import org.drools.KnowledgeBaseFactory;
+import org.drools.bpmn2.handler.ReceiveTaskHandler;
+import org.drools.bpmn2.handler.SendTaskHandler;
+import org.drools.bpmn2.handler.ServiceTaskHandler;
+import org.drools.bpmn2.xml.BPMN2SemanticModule;
+import org.drools.bpmn2.xml.BPMNDISemanticModule;
+import org.drools.bpmn2.xml.BPMNSemanticModule;
+import org.drools.bpmn2.xml.XmlBPMNProcessDumper;
+import org.drools.bpmn2.xpath.XPathDialectConfiguration;
 import org.drools.builder.KnowledgeBuilder;
 import org.drools.builder.KnowledgeBuilderConfiguration;
 import org.drools.builder.KnowledgeBuilderError;
@@ -14,13 +28,24 @@
 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.instance.RuleFlowProcessInstance;
+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;
+import org.drools.runtime.process.WorkItemHandler;
+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 {
 
 	public void testMinimalProcess() throws Exception {
@@ -68,6 +93,20 @@
 		ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
+	
+    public void testUserTask() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-UserTask.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+        ProcessInstance processInstance = ksession.startProcess("UserTask");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        WorkItem workItem = workItemHandler.getWorkItem();
+        assertNotNull(workItem);
+        assertEquals("john", workItem.getParameter("ActorId"));
+        ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
 
 	public void testExclusiveSplit() throws Exception {
 		KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplit.xml");
@@ -79,11 +118,27 @@
 		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();
+        ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
+        Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder()
+            .parse(new ByteArrayInputStream(
+                "<myDocument><chapter1>BlaBla</chapter1><chapter2>MoreBlaBla</chapter2></myDocument>".getBytes()));
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", document);
+        params.put("y", "SomeString");
+        ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
 
 	public void testCallActivity() throws Exception {
 		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
 		((PackageBuilderConfiguration) conf).initSemanticModules();
-		((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
 		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
 		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.xml"), ResourceType.DRF);
 		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.xml"), ResourceType.DRF);
@@ -109,8 +164,21 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
-	public void testIntermediateCatchEvent() throws Exception {
-		KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEvent.xml");
+    public void testAdHocSubProcess() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocSubProcess.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+        ProcessInstance processInstance = ksession.startProcess("AdHocSubProcess");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        WorkItem workItem = workItemHandler.getWorkItem();
+        assertNotNull(workItem);
+        ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
+	public void testIntermediateCatchEventSignal() throws Exception {
+		KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventSignal.xml");
 		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 		ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
 		ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
@@ -120,12 +188,116 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 
+    public void testIntermediateCatchEventTimer() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimer.xml");
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
+        new Thread(new Runnable() {
+            public void run() {
+                ksession.fireUntilHalt();
+            }
+        }).start();
+        ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+        // now wait for 1 second for timer to trigger
+        Thread.sleep(1000);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        ksession.halt();
+    }
+
+    public void testErrorEventProcess() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorEndEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("ErrorEndEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
+    }
+
+    public void testGraphicalInformation() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+        ProcessInstance processInstance = ksession.startProcess("testProzess");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
+    public void testServiceTask() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-ServiceProcess.xml");
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Service Task", new ServiceTaskHandler());
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("s", "john");
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+            ksession.startProcess("ServiceProcess", params);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        assertEquals("Hello john!", processInstance.getVariable("s"));
+    }
+
+    public void testSendTask() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-SendTask.xml");
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ksession.getWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("s", "john");
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+            ksession.startProcess("SendTask", params);
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+    }
+
+    public void testReceiveTask() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-ReceiveTask.xml");
+        final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ReceiveTaskHandler receiveTaskHandler = new ReceiveTaskHandler(ksession);
+        ksession.getWorkItemManager().registerWorkItemHandler("Receive Task", receiveTaskHandler);
+        WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+            ksession.startProcess("ReceiveTask");
+        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+        receiveTaskHandler.messageReceived("java.lang.String", "Hello john!");
+        assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+        assertEquals("Hello john!", processInstance.getVariable("s"));
+    }
+
+    public void testPersistence() throws Exception {
+        setupDataSource();
+        EntityManagerFactory emf = Persistence.createEntityManagerFactory(
+            "org.drools.persistence.jpa");
+        Environment env = KnowledgeBaseFactory.newEnvironment();
+        env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+        env.set(EnvironmentName.TRANSACTION_MANAGER,
+             TransactionManagerServices.getTransactionManager());
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-UserTask.xml");
+        StatefulKnowledgeSession ksession =
+            JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
+        int sessionId = ksession.getId();
+        TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+        ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+        ProcessInstance processInstance = ksession.startProcess("UserTask");
+        assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+        WorkItem workItem = workItemHandler.getWorkItem();
+        assertNotNull(workItem);
+        assertEquals("john", workItem.getParameter("ActorId"));
+        ksession.dispose();
+        ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(
+            sessionId, kbase, null, env);
+        assertNotNull(ksession.getProcessInstance(processInstance.getId()));
+        ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+        assertNull(ksession.getProcessInstance(processInstance.getId()));
+    }
+
 	private KnowledgeBase createKnowledgeBase(String process) throws Exception {
 		KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
 		((PackageBuilderConfiguration) conf).initSemanticModules();
-		((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+		((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+        ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
+        ((PackageBuilderConfiguration) conf).addDialect("XPath", new XPathDialectConfiguration());
+		XmlProcessReader processReader = new XmlProcessReader(
+	        ((PackageBuilderConfiguration) conf).getSemanticModules());
+		RuleFlowProcess p = (RuleFlowProcess)
+		    processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/" + process));
 		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
-		kbuilder.add(ResourceFactory.newClassPathResource(process), ResourceType.DRF);
+//		System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+		kbuilder.add(ResourceFactory.newReaderResource(
+            new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
 		if (!kbuilder.getErrors().isEmpty()) {
 			for (KnowledgeBuilderError error: kbuilder.getErrors()) {
 				System.err.println(error);
@@ -136,4 +308,34 @@
 		kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
 		return kbase;
 	}
+	
+	private static void setupDataSource() {
+	    PoolingDataSource ds1 = new PoolingDataSource();
+        ds1.setUniqueName( "jdbc/testDS1" );
+        ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+        ds1.setMaxPoolSize( 3 );
+        ds1.setAllowLocalTransactions( true );
+        ds1.getDriverProperties().put( "user",
+                                       "sa" );
+        ds1.getDriverProperties().put( "password",
+                                       "sasa" );
+        ds1.getDriverProperties().put( "URL",
+                                       "jdbc:h2:mem:mydb" );
+        ds1.init();
+	}
+	
+	private static class TestWorkItemHandler implements WorkItemHandler {
+	    private WorkItem workItem;
+        public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+            this.workItem = workItem;
+        }
+        public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+        }
+        public WorkItem getWorkItem() {
+            WorkItem result = this.workItem;
+            this.workItem = null;
+            return result;
+        }
+        
+	}
 }

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -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">
+
+  <process id="AdHocSubProcess" name="AdHoc SubProcess">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <adHocSubProcess id="_2" name="Hello" >
+      <scriptTask id="_2-1" name="Hello1">
+        <script>System.out.println("Hello World 1");</script>
+      </scriptTask>
+      <scriptTask id="_2-2" name="Hello2">
+        <script>System.out.println("Hello World 2");</script>
+      </scriptTask>
+      <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+      <userTask id="_2-3" name="Hello"/>
+    </adHocSubProcess>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <scriptTask id="_3" name="Goodbye">
+      <script>System.out.println("Goodbye World");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_3" targetRef="_4"/>
+    <endEvent id="_4" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -37,6 +37,8 @@
       </dataOutputAssociation>
     </callActivity>
     <sequenceFlow sourceRef="_2" targetRef="_3"/>
-    <endEvent id="_3" name="EndProcess"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
   </process>
 </definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -21,6 +21,8 @@
 kcontext.setVariable("subY", "new value");</script>
     </scriptTask>
     <sequenceFlow sourceRef="_2" targetRef="_3"/>
-    <endEvent id="_3" name="EndProcess"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
   </process>
 </definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -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="ErrorEndEvent" name="Error End Event Process">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <endEvent id="_2" name="ErrorEvent">
+      <errorEventDefinition errorCode="error"/>
+    </endEvent>
+  </process>
+</definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -42,7 +42,9 @@
     <userTask id="_5" name="Two">
     </userTask>
     <parallelGateway id="_6" name="Converge" gatewayDirection="converging"/>
-    <endEvent id="_7" name="EndProcess"/>
+    <endEvent id="_7" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
     
     <!-- connections -->
     <sequenceFlow sourceRef="_1" targetRef="_2"/>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -226,7 +226,9 @@
       </potentialOwner>
     </userTask>
     <parallelGateway id="_6" name="Converge" g:x="463" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
-    <endEvent id="_7" name="EndProcess" g:x="547" g:y="56" g:width="48" g:height="48" />
+    <endEvent id="_7" name="EndProcess" g:x="547" g:y="56" g:width="48" g:height="48" >
+      <terminateEventDefinition/>
+    </endEvent>
 
     <!-- connections -->
     <sequenceFlow sourceRef="_6" targetRef="_7" />

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -59,7 +59,9 @@
     <userTask id="_5" name="Two">
     </userTask>
     <exclusiveGateway id="_6" name="Converge" gatewayDirection="converging"/>
-    <endEvent id="_7" name="EndProcess"/>
+    <endEvent id="_7" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
     
     <!-- connections -->
     <sequenceFlow sourceRef="_1" targetRef="_2"/>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -80,7 +80,9 @@
         <targetRef>_6_BodyInput</targetRef>
       </dataInputAssociation>
     </task>
-    <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" />
+    <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" >
+      <terminateEventDefinition/>
+    </endEvent>
 
     <!-- connections -->
     <sequenceFlow sourceRef="_1" targetRef="_2" />

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,102 @@
+<?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.Object" />
+  <itemDefinition id="yItem" structureRef="java.lang.Object" />
+
+  <process id="com.sample.test" name="Test" >
+
+    <!-- process variables -->
+    <property id="x" itemSubjectRef="tns:xItem"/>
+    <property id="y" itemSubjectRef="tns:yItem"/>
+
+    <!-- nodes -->
+    <startEvent id="_1" name="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
+    <exclusiveGateway id="_2" name="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
+    <scriptTask id="_3" name="Script1" g:x="177" g:y="16" g:width="80" g:height="48">
+      <script>System.out.println("x=" + x);</script>
+    </scriptTask>
+    <scriptTask id="_4" name="Script2" g:x="177" g:y="96" g:width="80" g:height="48">
+      <script>System.out.println("y=" + y);</script>
+    </scriptTask>
+    <exclusiveGateway id="_5" name="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+    <task id="_6" name="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
+      <ioSpecification>
+        <dataInput id="_6_FromInput" name="From" />
+        <dataInput id="_6_ToInput" name="To" />
+        <dataInput id="_6_SubjectInput" name="Subject" />
+        <dataInput id="_6_BodyInput" name="Body" />
+        <inputSet>
+          <dataInputRefs>_6_FromInput</dataInputRefs>
+          <dataInputRefs>_6_ToInput</dataInputRefs>
+          <dataInputRefs>_6_SubjectInput</dataInputRefs>
+          <dataInputRefs>_6_BodyInput</dataInputRefs>
+        </inputSet>
+        <outputSet>
+        </outputSet>
+      </ioSpecification>
+      <property id="_6_From" />
+      <property id="_6_Subject" />
+      <property id="_6_To" />
+      <property id="_6_Body" />
+      <dataInputAssociation>
+        <assignment>
+          <from xs:type="tFormalExpression">me at mail.com</from>
+          <to xs:type="tFormalExpression">_6_From</to>
+        </assignment>
+        <sourceRef>_6_From</sourceRef>
+        <targetRef>_6_FromInput</targetRef>
+      </dataInputAssociation>
+      <dataInputAssociation>
+        <assignment>
+          <from xs:type="tFormalExpression">Urgent email !</from>
+          <to xs:type="tFormalExpression">_6_Subject</to>
+        </assignment>
+        <sourceRef>_6_Subject</sourceRef>
+        <targetRef>_6_SubjectInput</targetRef>
+      </dataInputAssociation>
+      <dataInputAssociation>
+        <assignment>
+          <from xs:type="tFormalExpression">you at mail.com</from>
+          <to xs:type="tFormalExpression">_6_To</to>
+        </assignment>
+        <sourceRef>_6_To</sourceRef>
+        <targetRef>_6_ToInput</targetRef>
+      </dataInputAssociation>
+      <dataInputAssociation>
+        <assignment>
+          <from xs:type="tFormalExpression">This is an urgent email #{x}</from>
+          <to xs:type="tFormalExpression">_6_Body</to>
+        </assignment>
+        <sourceRef>_6_Body</sourceRef>
+        <targetRef>_6_BodyInput</targetRef>
+      </dataInputAssociation>
+    </task>
+    <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" >
+      <terminateEventDefinition/>
+    </endEvent>
+
+    <!-- connections -->
+    <sequenceFlow sourceRef="_1" targetRef="_2" />
+    <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[120,40]" >
+      <conditionExpression xs:type="tFormalExpression" language="http://www.w3.org/1999/XPath">getProcessProperty("x")/myDocument/chapter1/text()="BlaBla"</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" >
+      <conditionExpression>return true;</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_3" targetRef="_5" g:bendpoints="[313,40]" />
+    <sequenceFlow sourceRef="_4" targetRef="_5" g:bendpoints="[314,119]" />
+    <sequenceFlow sourceRef="_5" targetRef="_6" />
+    <sequenceFlow sourceRef="_6" targetRef="_7" />
+
+  </process>
+
+</definitions>
\ No newline at end of file

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

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -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">
+      <timerEventDefinition>
+        <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+      </timerEventDefinition>
+    </intermediateCatchEvent>
+    <sequenceFlow sourceRef="_3" targetRef="_4"/>
+    <scriptTask id="_4" name="Event">
+      <script>System.out.println("Timer triggered");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_4" targetRef="_5"/>
+    <endEvent id="_5" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+    
+  </process>
+</definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -8,13 +8,15 @@
              xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
              xmlns:tns="http://www.example.org/MinimalExample">
 
-  <process id="Minimal" name="Minimal Process">
+  <process id="Minimal" name="Minimal Process" processType="executable">
     <startEvent id="_1" name="StartProcess"/>
     <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"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
   </process>
 </definitions>

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml	2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -17,7 +17,9 @@
       <script>System.out.println("Hello World");</script>
     </scriptTask>
     <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[10,10]" />
-    <endEvent id="_3" name="EndProcess"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
   </process>
 
 </definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.omg.org/bpmn20" xmlns="http://www.omg.org/bpmn20" xmlns:bpmndi="http://bpmndi.org">
+    <process id="testProzess">
+        <laneSet process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_34c205c4-7aa8-4711-a22f-1305ad74f61d">
+            <lane name="DefaultLane" laneSet="oryx_34c205c4-7aa8-4711-a22f-1305ad74f61d" id="oryx_fff7ca92-9b4f-4875-b194-044f093705f0">
+                <flowElementRef>oryx_51760C33-890E-4D79-97AF-06F17119004F</flowElementRef>
+                <flowElementRef>oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0</flowElementRef>
+                <flowElementRef>oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF</flowElementRef>
+                <flowElementRef>oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B</flowElementRef>
+                <flowElementRef>oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E</flowElementRef>
+                <flowElementRef>oryx_7BC67626-4762-4547-8C3E-514B415938CD</flowElementRef>
+                <flowElementRef>oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF</flowElementRef>
+            </lane>
+        </laneSet>
+        <startEvent name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_51760C33-890E-4D79-97AF-06F17119004F">
+            <outgoing>oryx_2B4B9F00-745A-49D5-A409-B0308C963893</outgoing>
+        </startEvent>
+        <userTask name="Self Evaluation" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0">
+            <incoming>oryx_2B4B9F00-745A-49D5-A409-B0308C963893</incoming>
+            <outgoing>oryx_AE244892-DEB6-42CE-B766-0331903EFB82</outgoing>
+        </userTask>
+        <parallelGateway gatewayDirection="diverging" name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF">
+            <incoming>oryx_AE244892-DEB6-42CE-B766-0331903EFB82</incoming>
+            <outgoing>oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A</outgoing>
+            <outgoing>oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4</outgoing>
+        </parallelGateway>
+        <userTask name="PM Evaluation" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B">
+            <incoming>oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A</incoming>
+            <outgoing>oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396</outgoing>
+        </userTask>
+        <parallelGateway gatewayDirection="converging" name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E">
+            <incoming>oryx_3D6B23E8-5173-4984-A059-649FA46C7404</incoming>
+            <incoming>oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396</incoming>
+            <outgoing>oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC</outgoing>
+        </parallelGateway>
+        <userTask name="HR Evaluation" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_7BC67626-4762-4547-8C3E-514B415938CD">
+            <incoming>oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4</incoming>
+            <outgoing>oryx_3D6B23E8-5173-4984-A059-649FA46C7404</outgoing>
+        </userTask>
+        <endEvent name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF">
+            <incoming>oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC</incoming>
+        </endEvent>
+        <sequenceFlow targetRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0" sourceRef="oryx_51760C33-890E-4D79-97AF-06F17119004F" name="" id="oryx_2B4B9F00-745A-49D5-A409-B0308C963893"/>
+        <sequenceFlow targetRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" sourceRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0" name="" id="oryx_AE244892-DEB6-42CE-B766-0331903EFB82"/>
+        <sequenceFlow targetRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" name="" id="oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A"/>
+        <sequenceFlow targetRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" name="" id="oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4"/>
+        <sequenceFlow targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" sourceRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD" name="" id="oryx_3D6B23E8-5173-4984-A059-649FA46C7404"/>
+        <sequenceFlow targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" sourceRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B" name="" id="oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396"/>
+        <sequenceFlow targetRef="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF" sourceRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" name="" id="oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC"/>
+    </process>
+    <bpmndi:processDiagram processRef="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b_gui">
+        <bpmndi:laneCompartment isVisible="false" height="0.0" width="0.0" y="0.0" x="0.0" name="DefaultLane" id="oryx_fff7ca92-9b4f-4875-b194-044f093705f0_gui">
+            <bpmndi:eventShape eventRef="oryx_51760C33-890E-4D79-97AF-06F17119004F" height="30.0" width="30.0" y="163.0" x="24.0" name="" id="oryx_51760C33-890E-4D79-97AF-06F17119004F_gui"/>
+            <bpmndi:activityShape activityRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0" height="80.0" width="100.0" y="138.0" x="90.0" name="Self Evaluation" id="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0_gui"/>
+            <bpmndi:gatewayShape gatewayRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" height="40.0" width="40.0" y="158.0" x="225.0" name="" id="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui"/>
+            <bpmndi:activityShape activityRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B" height="80.0" width="100.0" y="90.0" x="285.0" name="PM Evaluation" id="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B_gui"/>
+            <bpmndi:gatewayShape gatewayRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" height="40.0" width="40.0" y="158.0" x="405.0" name="" id="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui"/>
+            <bpmndi:activityShape activityRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD" height="80.0" width="100.0" y="180.0" x="285.0" name="HR Evaluation" id="oryx_7BC67626-4762-4547-8C3E-514B415938CD_gui"/>
+            <bpmndi:eventShape eventRef="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF" height="28.0" width="28.0" y="164.0" x="495.0" name="" id="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF_gui"/>
+        </bpmndi:laneCompartment>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_2B4B9F00-745A-49D5-A409-B0308C963893" label="" targetRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0_gui" sourceRef="oryx_51760C33-890E-4D79-97AF-06F17119004F_gui" id="oryx_2B4B9F00-745A-49D5-A409-B0308C963893_gui"/>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_AE244892-DEB6-42CE-B766-0331903EFB82" label="" targetRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui" sourceRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0_gui" id="oryx_AE244892-DEB6-42CE-B766-0331903EFB82_gui"/>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A" label="" targetRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B_gui" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui" id="oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A_gui">
+            <bpmndi:bendpoint y="130.0" x="245.5"/>
+        </bpmndi:sequenceFlowConnector>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4" label="" targetRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD_gui" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui" id="oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4_gui">
+            <bpmndi:bendpoint y="220.0" x="245.5"/>
+        </bpmndi:sequenceFlowConnector>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_3D6B23E8-5173-4984-A059-649FA46C7404" label="" targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui" sourceRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD_gui" id="oryx_3D6B23E8-5173-4984-A059-649FA46C7404_gui">
+            <bpmndi:bendpoint y="220.0" x="425.52668172117495"/>
+        </bpmndi:sequenceFlowConnector>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396" label="" targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui" sourceRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B_gui" id="oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396_gui">
+            <bpmndi:bendpoint y="130.0" x="425.5046319508967"/>
+        </bpmndi:sequenceFlowConnector>
+        <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC" label="" targetRef="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF_gui" sourceRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui" id="oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC_gui"/>
+    </bpmndi:processDiagram>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -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">
+
+  <itemDefinition id="StringType" structureRef="java.lang.String" />
+  <message id="HelloMessage" structureRef="StringType"/>
+  
+  <process id="ReceiveTask" name="Receive Task">
+    <!-- process variables -->
+    <property id="s" itemSubjectRef="tns:StringType" />
+  
+    <!-- nodes -->  
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <receiveTask id="_2" name="Hello" messageRef="HelloMessage">
+      <ioSpecification>
+        <dataOutput id="_2_param" name="Message" itemSubjectRef="HelloMessage"/>
+        <inputSet/>
+        <outputSet>
+          <dataOutputRefs>_2_param</dataOutputRefs>
+        </outputSet>
+      </ioSpecification>
+      <dataOutputAssociation>
+        <sourceRef>_2_param</sourceRef>
+        <targetRef>s</targetRef>
+      </dataOutputAssociation>
+    </receiveTask>
+    <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-SendTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -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">
+
+  <itemDefinition id="StringType" structureRef="java.lang.String" />
+  <message id="HelloMessage" structureRef="StringType"/>
+  
+  <process id="SendTask" name="Send Task">
+    <!-- process variables -->
+    <property id="s" itemSubjectRef="tns:StringType" />
+  
+    <!-- nodes -->  
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <sendTask id="_2" name="Hello" messageRef="HelloMessage">
+      <ioSpecification>
+        <dataInput id="_2_param" name="Message" itemSubjectRef="HelloMessage"/>
+        <inputSet>
+          <dataInputRefs>_2_param</dataInputRefs>
+        </inputSet>
+        <outputSet/>
+      </ioSpecification>
+      <dataInputAssociation>
+        <sourceRef>s</sourceRef>
+        <targetRef>_2_param</targetRef>
+      </dataInputAssociation>
+    </sendTask>
+    <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-ServiceProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,53 @@
+<?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="StringType" structureRef="java.lang.String" />
+  <message id="HelloService.hello.in" structureRef="StringType"/>
+  <message id="HelloService.hello.out" structureRef="StringType"/>
+  <interface id="HelloService" name="org.drools.bpmn2.HelloService">
+    <operation id="HelloService.hello" name="hello">
+      <inMessageRef>HelloService.hello.in</inMessageRef>
+      <outMessageRef>HelloService.hello.out</outMessageRef>
+    </operation>
+  </interface>
+  
+  <process id="ServiceProcess" name="Service Process">
+    <!-- process variables -->
+    <property id="s" itemSubjectRef="tns:StringType" />
+  
+    <!-- nodes -->  
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <serviceTask id="_2" name="Hello" operationRef="HelloService.hello">
+      <ioSpecification>
+        <dataInput id="_2_param" name="Parameter" itemSubjectRef="HelloService.hello.in" />
+        <dataOutput id="_2_result" name="Result" />
+        <inputSet>
+          <dataInputRefs>_2_param</dataInputRefs>
+        </inputSet>
+        <outputSet>
+          <dataOutputRefs>_2_result</dataOutputRefs>
+        </outputSet>
+      </ioSpecification>
+      <dataInputAssociation>
+        <sourceRef>s</sourceRef>
+        <targetRef>_2_param</targetRef>
+      </dataInputAssociation>
+      <dataOutputAssociation>
+        <sourceRef>_2_result</sourceRef>
+        <targetRef>s</targetRef>
+      </dataOutputAssociation>
+    </serviceTask>
+    <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-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -21,6 +21,12 @@
       <endEvent id="_2-3" name="EndSubProcess"/>
     </subProcess>
     <sequenceFlow sourceRef="_2" targetRef="_3"/>
-    <endEvent id="_3" name="EndProcess"/>
+    <scriptTask id="_3" name="Goodbye">
+      <script>System.out.println("Goodbye World");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_3" targetRef="_4"/>
+    <endEvent id="_4" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
   </process>
 </definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml	2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,28 @@
+<?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">
+
+  <resource id="Actor" name="Human Actor" />
+  
+  <process id="UserTask" name="User Task">
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <userTask id="_2" name="Hello">
+      <potentialOwner resourceRef="tns:Actor" >
+        <resourceAssignmentExpression>
+          <formalExpression>john</formalExpression>
+        </resourceAssignmentExpression>
+      </potentialOwner>
+    </userTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>



More information about the jboss-svn-commits mailing list