[jboss-svn-commits] JBL Code SVN: r31962 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/process/builder and 12 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 5 11:07:17 EST 2010


Author: KrisVerlaenen
Date: 2010-03-05 11:07:12 -0500 (Fri, 05 Mar 2010)
New Revision: 31962

Added:
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Definitions.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2Test.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CompensateEndEvent.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitDefault.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplitDefault.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SimpleXMLProcess.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerStart.xml
Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java
   labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java
   labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java
   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/ActionNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CompositeContextNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.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/ForEachNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.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/ProcessHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StateNodeHandler.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/UserTaskHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java
   labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
 - improved BPMN2 implementation (new node types, parser, etc.)

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -230,6 +230,7 @@
         } catch ( FactoryConfigurationError e1 ) {
             this.errors.add( new RuleFlowLoadError( "FactoryConfigurationError ", e1.getException()) );
         } catch ( Exception e2 ) {
+        	e2.printStackTrace();
             this.errors.add( new RuleFlowLoadError( "unable to parse xml", e2 ) );
         } finally {
             Thread.currentThread().setContextClassLoader( oldLoader );
@@ -392,6 +393,7 @@
                                              ConstraintTrigger trigger) {
         String result = 
         	"rule \"RuleFlow-Start-" + process.getId() + "\" \n" + 
+        	(trigger.getHeader() == null ? "" : "        " + trigger.getHeader() + " \n") + 
         	"    when\n" + 
         	"        " + trigger.getConstraint() + "\n" + 
         	"    then\n";

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -52,12 +52,14 @@
                 ruleConstraint.setDialect( constraint.getDialect() );
                 ruleConstraint.setName( constraint.getName() );
                 ruleConstraint.setPriority( constraint.getPriority() );
+                ruleConstraint.setDefault( constraint.isDefault() );
                 splitNode.setConstraint( outgoingConnection, ruleConstraint );
             } else if ( "code".equals( constraint.getType() ) ) {
                 ReturnValueConstraintEvaluator returnValueConstraint = new ReturnValueConstraintEvaluator();
                 returnValueConstraint.setDialect( constraint.getDialect() );
                 returnValueConstraint.setName( constraint.getName() );
                 returnValueConstraint.setPriority( constraint.getPriority() );
+                returnValueConstraint.setDefault( constraint.isDefault() );
                 splitNode.setConstraint( outgoingConnection, returnValueConstraint );            
                 
                 ReturnValueDescr returnValueDescr = new ReturnValueDescr();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Constraint.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -94,6 +94,10 @@
      */
     void setDialect(String dialect);
     
+    public boolean isDefault();
+
+	public void setDefault(boolean isDefault);
+	
     void setMetaData(String name, Object value);
     
     Object getMetaData(String name);

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -38,6 +38,7 @@
     private int                priority;
     private String             dialect = "mvel";
     private String             type = "rule";
+    private boolean            isDefault = false;
 
     public String getConstraint() {
         return this.constraint;
@@ -83,7 +84,15 @@
         this.type = type;
     }
 
-    public void setMetaData(String name, Object value) {
+    public boolean isDefault() {
+		return isDefault;
+	}
+
+	public void setDefault(boolean isDefault) {
+		this.isDefault = isDefault;
+	}
+
+	public void setMetaData(String name, Object value) {
         this.metaData.put(name, value);
     }
     

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -8,6 +8,7 @@
 	private static final long serialVersionUID = 4L;
 
 	private String constraint;
+	private String header;
 
 	public String getConstraint() {
 		return constraint;
@@ -17,7 +18,15 @@
 		this.constraint = constraint;
 	}
 
-    public void addConstraint(ConnectionRef connection, Constraint constraint) {
+    public String getHeader() {
+		return header;
+	}
+
+	public void setHeader(String header) {
+		this.header = header;
+	}
+
+	public void addConstraint(ConnectionRef connection, Constraint constraint) {
     	if (connection != null) {
     		throw new IllegalArgumentException(
 				"A constraint trigger only accepts one simple constraint");

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/ReturnValueConstraintEvaluator.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -49,6 +49,7 @@
     private int               priority;
     private String            dialect;
     private String            type;
+    private boolean           isDefault = false;
 
     public ReturnValueConstraintEvaluator() {
     }
@@ -99,7 +100,15 @@
         this.type = type;
     }
 
-    public void wire(Object object) {
+    public boolean isDefault() {
+		return isDefault;
+	}
+
+	public void setDefault(boolean isDefault) {
+		this.isDefault = isDefault;
+	}
+
+	public void wire(Object object) {
         setEvaluator( (ReturnValueEvaluator) object );
     }
 

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -40,7 +40,8 @@
     private String             constraint;
     private int                priority;
     private String             dialect;
-    private String             type;       
+    private String             type;
+    private boolean            isDefault;
     
     public String getConstraint() {
         return this.constraint;
@@ -86,7 +87,15 @@
         this.type = type;
     }
     
-    public boolean evaluate(SplitInstance instance,
+    public boolean isDefault() {
+		return isDefault;
+	}
+
+	public void setDefault(boolean isDefault) {
+		this.isDefault = isDefault;
+	}
+
+	public boolean evaluate(SplitInstance instance,
                             Connection connection,
                             Constraint constraint) {
         WorkflowProcessInstance processInstance = instance.getProcessInstance();

Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SplitInstance.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -58,7 +58,7 @@
                 for ( final Iterator<Connection> iterator = outgoing.iterator(); iterator.hasNext(); ) {
                     final Connection connection = (Connection) iterator.next();
                     ConstraintEvaluator constraint = (ConstraintEvaluator) split.getConstraint( connection );
-                    if ( constraint != null && constraint.getPriority() < priority ) {
+                    if ( constraint != null && constraint.getPriority() < priority && !constraint.isDefault()) {
                         if ( constraint.evaluate( this,
                                                   connection,
                                                   constraint ) ) {
@@ -69,8 +69,18 @@
                 }
                 ((NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
                 if ( selected == null ) {
-                    throw new IllegalArgumentException( "XOR split could not find at least one valid outgoing connection for split " + getSplit().getName() );
+                	for ( final Iterator<Connection> iterator = outgoing.iterator(); iterator.hasNext(); ) {
+                        final Connection connection = (Connection) iterator.next();
+                        ConstraintEvaluator constraint = (ConstraintEvaluator) split.getConstraint( connection );
+                        if ( constraint.isDefault() ) {
+                            selected = connection;
+                            break;
+                        }
+                    }
                 }
+                if ( selected == null ) {
+                	throw new IllegalArgumentException( "XOR split could not find at least one valid outgoing connection for split " + getSplit().getName() );
+                }
                 triggerConnection(selected);
                 break;
             case Split.TYPE_OR :
@@ -87,12 +97,16 @@
                         ConstraintEvaluator constraint = (ConstraintEvaluator) split.getConstraint( connection );
     
                         if ( constraint != null  
-                                && constraint.getPriority() < priority ) {
+                                && constraint.getPriority() < priority
+                                && !constraint.isDefault() ) {
                             priority = constraint.getPriority();
                             selectedConnection = connection;
                             selectedConstraint = constraint;
                         }
                     }
+                    if (selectedConstraint == null) {
+                    	break;
+                    }
                     if (selectedConstraint.evaluate( this,
                                                      selectedConnection,
                                                      selectedConstraint ) ) {
@@ -102,6 +116,17 @@
                     outgoingCopy.remove(selectedConnection);
                 }
                 if ( !found ) {
+                	for ( final Iterator<Connection> iterator = outgoing.iterator(); iterator.hasNext(); ) {
+                        final Connection connection = (Connection) iterator.next();
+                        ConstraintEvaluator constraint = (ConstraintEvaluator) split.getConstraint( connection );
+                        if ( constraint.isDefault() ) {
+                        	triggerConnection(connection);
+                        	found = true;
+                            break;
+                        }
+                    }
+                }
+                if ( !found ) {
                     throw new IllegalArgumentException( "OR split could not find at least one valid outgoing connection for split " + getSplit().getName() );
                 }                
                 break;

Modified: labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml
===================================================================
--- labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -19,11 +19,11 @@
         <listitem>Events
           <itemizedlist>
             <listitem>Start Event (None, Conditional, Signal)</listitem>
-            <listitem>End Event (None, Terminate, Error, Escalation, Signal)</listitem>
-            <listitem>Intermediate Catch Event (Signal, Timer)</listitem>
-            <listitem>Intermediate Throw Event (None, Signal)</listitem>
+            <listitem>End Event (None, Terminate, Error, Escalation, Signal, Message)</listitem>
+            <listitem>Intermediate Catch Event (Signal, Timer, Conditional, Message)</listitem>
+            <listitem>Intermediate Throw Event (None, Signal, Escalation, Message)</listitem>
             <listitem>Non-interrupting Boundary Event (Escalation, Timer)</listitem>
-            <listitem>Interrupting Boundary Event ()</listitem>
+            <listitem>Interrupting Boundary Event (Escalation, Error, Timer)</listitem>
           </itemizedlist>
         </listitem>
         <listitem>Activities

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,107 +1,112 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <artifactId>drools</artifactId>
-    <groupId>org.drools</groupId>
-    <version>5.1.0.SNAPSHOT</version>
-  </parent>
-
-  <artifactId>drools-bpmn2</artifactId>
-  <packaging>jar</packaging>
-  <name>Drools :: Process :: BPMN2</name>
-
-   <build>
-      <plugins>
-         <plugin>
-            <artifactId>maven-jar-plugin</artifactId>
-            <configuration>
-               <archive>
-                  <manifestFile>META-INF/MANIFEST.MF</manifestFile>
-               </archive>
-            </configuration>
-         </plugin>
-         <plugin>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>maven-bundle-plugin</artifactId>
-            <version>2.0.1</version>
-            <extensions>true</extensions>
-            <executions>
-               <execution>
-                  <id>manifest</id>
-                  <phase>process-classes</phase>
-                  <goals>
-                     <goal>manifest</goal>
-                  </goals>
-               </execution>
-            </executions>
-            <configuration>
-               <manifestLocation>META-INF</manifestLocation>
-               <instructions>
-                  <Bundle-SymbolicName>org.drools.bpmn2;singleton:=true</Bundle-SymbolicName>
-                  <_removeheaders>Ignore-Package</_removeheaders> 
-                  <Require-Bundle>org.drools.core;bundle-version="${pom.version}", org.drools.compiler;bundle-version="${pom.version}", org.drools.persistence-jpa;optional="true";bundle-version="${pom.version}"</Require-Bundle>
-                  <Import-Package>!org.drools.*, *</Import-Package>
-                  <Export-Package> org.drools.*</Export-Package>
-                  <DynamicImport-Package>*</DynamicImport-Package>
-                  <Bundle-Activator>org.drools.osgi.bpmn2.Activator</Bundle-Activator>
-               </instructions>
-            </configuration>
-         </plugin>
-      </plugins>
-   </build>    
-
-  <dependencies>
-  
-    <!-- Internal dependencies -->
-    <dependency>
-      <groupId>org.drools</groupId>
-      <artifactId>drools-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.drools</groupId>
-      <artifactId>drools-core</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.drools</groupId>
-      <artifactId>drools-compiler</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.drools</groupId>
-      <artifactId>drools-persistence-jpa</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <!-- External dependencies -->
-    <dependency>
-      <groupId>org.apache.felix</groupId>
-      <artifactId>org.osgi.core</artifactId>
-      <scope>provided</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.3</version>    	
-      <scope>test</scope>
-    </dependency>    	
-    
-      <dependency>
-         <groupId>org.apache.felix</groupId>
-         <artifactId>org.osgi.core</artifactId>
-         <scope>provided</scope>
-      </dependency>
-      <dependency>
-         <groupId>org.apache.felix</groupId>
-         <artifactId>org.osgi.compendium</artifactId>
-         <scope>provided</scope>
-      </dependency>    
-
-  </dependencies>
-
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>drools</artifactId>
+    <groupId>org.drools</groupId>
+    <version>5.1.0.SNAPSHOT</version>
+  </parent>
+
+  <artifactId>drools-bpmn2</artifactId>
+  <packaging>jar</packaging>
+  <name>Drools :: Process :: BPMN2</name>
+
+   <build>
+      <plugins>
+         <plugin>
+            <artifactId>maven-jar-plugin</artifactId>
+            <configuration>
+               <archive>
+                  <manifestFile>META-INF/MANIFEST.MF</manifestFile>
+               </archive>
+            </configuration>
+         </plugin>
+         <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <version>2.0.1</version>
+            <extensions>true</extensions>
+            <executions>
+               <execution>
+                  <id>manifest</id>
+                  <phase>process-classes</phase>
+                  <goals>
+                     <goal>manifest</goal>
+                  </goals>
+               </execution>
+            </executions>
+            <configuration>
+               <manifestLocation>META-INF</manifestLocation>
+               <instructions>
+                  <Bundle-SymbolicName>org.drools.bpmn2;singleton:=true</Bundle-SymbolicName>
+                  <_removeheaders>Ignore-Package</_removeheaders> 
+                  <Require-Bundle>org.drools.core;bundle-version="${pom.version}", org.drools.compiler;bundle-version="${pom.version}", org.drools.persistence-jpa;optional="true";bundle-version="${pom.version}"</Require-Bundle>
+                  <Import-Package>!org.drools.*, *</Import-Package>
+                  <Export-Package> org.drools.*</Export-Package>
+                  <DynamicImport-Package>*</DynamicImport-Package>
+                  <Bundle-Activator>org.drools.osgi.bpmn2.Activator</Bundle-Activator>
+               </instructions>
+            </configuration>
+         </plugin>
+      </plugins>
+   </build>    
+
+  <dependencies>
+  
+    <!-- Internal dependencies -->
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-compiler</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.drools</groupId>
+      <artifactId>drools-persistence-jpa</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <!-- External dependencies -->
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</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.3</version>    	
+      <scope>test</scope>
+    </dependency>    	
+    <dependency>
+      <groupId>xmlunit</groupId>
+      <artifactId>xmlunit</artifactId>
+      <version>1.3</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.felix</groupId>
+      <artifactId>org.osgi.compendium</artifactId>
+      <scope>provided</scope>
+    </dependency>    
+
+  </dependencies>
+
+</project>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Definitions.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Definitions.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Definitions.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,15 @@
+package org.drools.bpmn2.core;
+
+public class Definitions {
+	
+	private String targetNamespace;
+
+	public String getTargetNamespace() {
+		return targetNamespace;
+	}
+
+	public void setTargetNamespace(String targetNamespace) {
+		this.targetNamespace = targetNamespace;
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/SequenceFlow.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -6,6 +6,7 @@
 
 	private static final long serialVersionUID = 4L;
 	
+	private String id;
 	private String sourceRef;
 	private String targetRef;
 	private String bendpoints;
@@ -14,11 +15,16 @@
 	private String language;
 	private String name;
 	
-	public SequenceFlow(String sourceRef, String targetRef) {
+	public SequenceFlow(String id, String sourceRef, String targetRef) {
+		this.id = id;
 		this.sourceRef = sourceRef;
 		this.targetRef = targetRef;
 	}
 	
+	public String getId() {
+		return id;
+	}
+	
 	public String getSourceRef() {
 		return sourceRef;
 	}

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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -123,7 +123,7 @@
     protected void writeNode(final String name, final Node node, 
     		                 final StringBuilder xmlDump, boolean includeMeta) {
     	xmlDump.append("    <" + name + " "); 
-        xmlDump.append("id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "\" ");
+        xmlDump.append("id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "\" ");
         if (node.getName() != null) {
             xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(node.getName()) + "\" ");
         }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -29,16 +29,16 @@
                 String variable = (String) actionNode.getMetaData("MappingVariable");
                 if (variable != null) {
                     xmlDump.append(
-                        "      <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input\" />" + EOL + 
+                        "      <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input\" />" + EOL + 
                         "      <dataInputAssociation>" + EOL + 
-                        "        <sourceRef>" + variable + "</sourceRef>" + EOL + 
-                        "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</targetRef>" + EOL + 
+                        "        <sourceRef>" + XmlDumper.replaceIllegalChars(variable) + "</sourceRef>" + EOL + 
+                        "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</targetRef>" + EOL + 
                         "      </dataInputAssociation>" + EOL + 
                         "      <inputSet>" + EOL + 
-                        "        <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</dataInputRefs>" + EOL + 
+                        "        <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</dataInputRefs>" + EOL + 
                         "      </inputSet>" + EOL);
                 }
-                xmlDump.append("      <messageEventDefinition messageRef=\"" + "_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Message\"/>" + EOL);
+                xmlDump.append("      <messageEventDefinition messageRef=\"" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Message\"/>" + EOL);
                 endNode("intermediateThrowEvent", xmlDump);
             } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
                 writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
@@ -50,19 +50,19 @@
                 if (!s.startsWith("null")) {
                     variable = s.substring(0, s.indexOf(")"));
                     xmlDump.append(
-                        "      <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input\" />" + EOL + 
+                        "      <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input\" />" + EOL + 
                         "      <dataInputAssociation>" + EOL + 
-                        "        <sourceRef>" + variable + "</sourceRef>" + EOL + 
-                        "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</targetRef>" + EOL + 
+                        "        <sourceRef>" + XmlDumper.replaceIllegalChars(variable) + "</sourceRef>" + EOL + 
+                        "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</targetRef>" + EOL + 
                         "      </dataInputAssociation>" + EOL + 
                         "      <inputSet>" + EOL + 
-                        "        <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</dataInputRefs>" + EOL + 
+                        "        <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(actionNode) + "_Input</dataInputRefs>" + EOL + 
                         "      </inputSet>" + EOL);
                 }
                 if (type.startsWith("Compensate-")) {
-	                xmlDump.append("      <compensateEventDefinition activityRef=\"" + type.substring(11) + "\"/>" + EOL);
+	                xmlDump.append("      <compensateEventDefinition activityRef=\"" + XmlDumper.replaceIllegalChars(type.substring(11)) + "\"/>" + EOL);
                 } else {
-	                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+	                xmlDump.append("      <signalEventDefinition signalRef=\"" + XmlDumper.replaceIllegalChars(type) + "\"/>" + EOL);
                 }
                 endNode("intermediateThrowEvent", xmlDump);
             } else if (s.startsWith("kcontext.getProcessInstance().signalEvent(\"")) {
@@ -70,7 +70,7 @@
                 xmlDump.append(">" + EOL);
                 s = s.substring(43);
                 String type = s.substring(0, s.indexOf("\""));
-                xmlDump.append("      <compensateEventDefinition activityRef=\"" + type.substring(11) + "\"/>" + EOL);
+                xmlDump.append("      <compensateEventDefinition activityRef=\"" + XmlDumper.replaceIllegalChars(type.substring(11)) + "\"/>" + EOL);
                 endNode("intermediateThrowEvent", xmlDump);
             } else if (s.startsWith("org.drools.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"")) {
                 writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
@@ -78,7 +78,7 @@
                 s = s.substring(327);
                 String type = s.substring(0, s.indexOf("\""));
                 s = s.substring(s.indexOf(",") + 2);
-                xmlDump.append("      <escalationEventDefinition escalationCode=\"" + type + "\"/>" + EOL);
+                xmlDump.append("      <escalationEventDefinition escalationCode=\"" + XmlDumper.replaceIllegalChars(type) + "\"/>" + EOL);
                 endNode("intermediateThrowEvent", xmlDump);
             } else if ("IntermediateThrowEvent-None".equals(actionNode.getMetaData("NodeType"))) {
             	writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -18,6 +18,8 @@
 	public BPMN2SemanticModule() {
 		super("http://www.omg.org/bpmn20");
 		
+        addHandler("definitions", new DefinitionsHandler());
+        
 		addHandler("process", new ProcessHandler());
 		
 		addHandler("property", new PropertyHandler());

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -20,6 +20,8 @@
 	public BPMNSemanticModule() {
 		super(BPMN2_URI);
 		
+        addHandler("definitions", new DefinitionsHandler());
+        
         addHandler("process", new ProcessHandler());
         
         addHandler("property", new PropertyHandler());

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.RuleSetNode;
 import org.drools.xml.ExtensibleXmlParser;
@@ -32,7 +33,7 @@
 		RuleSetNode ruleSetNode = (RuleSetNode) node;
 		writeNode("businessRuleTask", ruleSetNode, xmlDump, includeMeta);
 		if (ruleSetNode.getRuleFlowGroup() != null) {
-			xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" ");
+			xmlDump.append("g:ruleFlowGroup=\"" + XmlDumper.replaceIllegalChars(ruleSetNode.getRuleFlowGroup()) + "\" ");
 		}
 		endNode(xmlDump);
 	}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -3,6 +3,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.SubProcessNode;
 import org.drools.xml.ExtensibleXmlParser;
@@ -94,7 +95,7 @@
 		SubProcessNode subProcessNode = (SubProcessNode) node;
 		writeNode("callActivity", subProcessNode, xmlDump, includeMeta);
 		if (subProcessNode.getProcessId() != null) {
-			xmlDump.append("calledElement=\"" + subProcessNode.getProcessId() + "\" ");
+			xmlDump.append("calledElement=\"" + XmlDumper.replaceIllegalChars(subProcessNode.getProcessId()) + "\" ");
 		}
 		if (!subProcessNode.isWaitForCompletion()) {
 			xmlDump.append("tns:waitForCompletion=\"false\" ");
@@ -110,33 +111,33 @@
 	protected void writeIO(SubProcessNode subProcessNode, StringBuilder xmlDump) {
 		xmlDump.append("      <ioSpecification>" + EOL);
 		for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
-			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input\" name=\"" + XmlDumper.replaceIllegalChars(entry.getKey()) + "\" />" + EOL);
 		}
 		for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
-			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Output\" name=\"" + XmlDumper.replaceIllegalChars(entry.getKey()) + "\" />" + EOL);
 		}
 		xmlDump.append("        <inputSet>" + EOL);
 		for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
-			xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+			xmlDump.append("          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input</dataInputRefs>" + EOL);
 		}
 		xmlDump.append("        </inputSet>" + EOL);
 		xmlDump.append("        <outputSet>" + EOL);
 		for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
-			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+			xmlDump.append("          <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Output</dataOutputRefs>" + EOL);
 		}
 		xmlDump.append("        </outputSet>" + EOL);
 		xmlDump.append("      </ioSpecification>" + EOL);
 		for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
 			xmlDump.append("      <dataInputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+				"        <sourceRef>" + XmlDumper.replaceIllegalChars(entry.getValue()) + "</sourceRef>" + EOL +
+				"        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input</targetRef>" + EOL);
 			xmlDump.append("      </dataInputAssociation>" + EOL);
 		}
 		for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
 			xmlDump.append("      <dataOutputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+				"        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + XmlDumper.replaceIllegalChars(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/CompositeContextNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CompositeContextNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CompositeContextNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.definition.process.Connection;
 import org.drools.process.core.context.variable.Variable;
 import org.drools.process.core.context.variable.VariableScope;
@@ -36,9 +37,9 @@
 		if (variableScope != null && !variableScope.getVariables().isEmpty()) {
             xmlDump.append("    <!-- variables -->" + EOL);
             for (Variable variable: variableScope.getVariables()) {
-                xmlDump.append("    <property id=\"" + variable.getName() + "\" ");
+                xmlDump.append("    <property id=\"" + XmlDumper.replaceIllegalChars(variable.getName()) + "\" ");
                 if (variable.getType() != null) {
-                    xmlDump.append("itemSubjectRef=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(compositeNode) + "-" + variable.getName() + "Item\"" );
+                    xmlDump.append("itemSubjectRef=\"" + XmlBPMNProcessDumper.getUniqueNodeId(compositeNode) + "-" + XmlDumper.replaceIllegalChars(variable.getName()) + "Item\"" );
                 }
                 // TODO: value
                 xmlDump.append("/>" + EOL);

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DefinitionsHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,55 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.core.Definitions;
+import org.drools.compiler.xml.ProcessBuildData;
+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 DefinitionsHandler extends BaseAbstractHandler implements Handler {
+	
+	public static final String CONNECTIONS = "BPMN.Connections";
+
+	@SuppressWarnings("unchecked")
+	public DefinitionsHandler() {
+		if ((this.validParents == null) && (this.validPeers == null)) {
+			this.validParents = new HashSet();
+			this.validParents.add(null);
+
+			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 new Definitions();
+	}
+
+	public Object end(final String uri, final String localName,
+			          final ExtensibleXmlParser parser) throws SAXException {
+		final Element element = parser.endElementBuilder();
+		Definitions definitions = (Definitions) parser.getCurrent();
+        RuleFlowProcess process = (RuleFlowProcess)
+			((ProcessBuildData) parser.getData()).getProcess();
+		String namespace = element.getAttribute("targetNamespace");
+		process.setMetaData("TargetNamespace", namespace);
+		definitions.setTargetNamespace(namespace);
+		return definitions;
+	}
+
+	public Class<?> generateNodeFor() {
+		return null;
+	}
+	
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -69,6 +69,10 @@
                 super.handleNode(node, element, uri, localName, parser);
                 handleEscalationNode(node, element, uri, localName, parser);
                 break;
+            } else if ("compensateEventDefinition".equals(nodeName)) {
+                // reuse already created ActionNode
+                handleCompensationNode(node, element, uri, localName, parser);
+                break;
             }
             xmlNode = xmlNode.getNextSibling();
         }
@@ -197,6 +201,31 @@
         faultNode.setFaultVariable(faultVariable);
     }
 
+    public void handleCompensationNode(final Node node, final Element element, final String uri, 
+            final String localName, final ExtensibleXmlParser parser) throws SAXException {
+        EndNode actionNode = (EndNode) node;
+        org.w3c.dom.Node xmlNode = element.getFirstChild();
+        while (xmlNode != null) {
+            String nodeName = xmlNode.getNodeName();
+            if ("compensateEventDefinition".equals(nodeName)) {
+                String activityRef = ((Element) xmlNode).getAttribute("activityRef");
+                if (activityRef != null && activityRef.trim().length() > 0) {
+                	actionNode.setMetaData("Compensate", activityRef);
+                	List<DroolsAction> actions = new ArrayList<DroolsAction>();
+                    actions.add(new DroolsConsequenceAction("java", 
+            			"kcontext.getProcessInstance().signalEvent(\"Compensate-" + activityRef + "\", null);"));
+                    actionNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
+                }
+//                boolean waitForCompletion = true;
+//                String waitForCompletionString = ((Element) xmlNode).getAttribute("waitForCompletion");
+//                if ("false".equals(waitForCompletionString)) {
+//                    waitForCompletion = false;
+//                }
+            }
+            xmlNode = xmlNode.getNextSibling();
+        }
+    }
+    
     public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
         throw new IllegalArgumentException("Writing out should be handled by specific handlers");
     }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.DroolsAction;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.impl.DroolsConsequenceAction;
@@ -37,16 +38,16 @@
                         String variable = (String) endNode.getMetaData("MappingVariable");
                         if (variable != null) {
                             xmlDump.append(
-                                "      <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input\" />" + EOL + 
+                                "      <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input\" />" + EOL + 
                                 "      <dataInputAssociation>" + EOL + 
-                                "        <sourceRef>" + variable + "</sourceRef>" + EOL + 
-                                "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</targetRef>" + EOL + 
+                                "        <sourceRef>" + XmlDumper.replaceIllegalChars(variable) + "</sourceRef>" + EOL + 
+                                "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</targetRef>" + EOL + 
                                 "      </dataInputAssociation>" + EOL + 
                                 "      <inputSet>" + EOL + 
-                                "        <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</dataInputRefs>" + EOL + 
+                                "        <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</dataInputRefs>" + EOL + 
                                 "      </inputSet>" + EOL);
                         }
-                        xmlDump.append("      <messageEventDefinition messageRef=\"" + "_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Message\"/>" + EOL);
+                        xmlDump.append("      <messageEventDefinition messageRef=\"" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Message\"/>" + EOL);
                         endNode("endEvent", xmlDump);
 		            } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
                         xmlDump.append(">" + EOL);
@@ -57,17 +58,27 @@
 		                if (!s.startsWith("null")) {
 		                    variable = s.substring(0, s.indexOf(")"));
 	                        xmlDump.append(
-                                "      <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input\" />" + EOL + 
+                                "      <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input\" />" + EOL + 
                                 "      <dataInputAssociation>" + EOL + 
-                                "        <sourceRef>" + variable + "</sourceRef>" + EOL + 
-                                "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</targetRef>" + EOL + 
+                                "        <sourceRef>" + XmlDumper.replaceIllegalChars(variable) + "</sourceRef>" + EOL + 
+                                "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</targetRef>" + EOL + 
                                 "      </dataInputAssociation>" + EOL + 
                                 "      <inputSet>" + EOL + 
-                                "        <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</dataInputRefs>" + EOL + 
+                                "        <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(endNode) + "_Input</dataInputRefs>" + EOL + 
                                 "      </inputSet>" + EOL);
 	                    }
-		                xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+		                if (type.startsWith("Compensate-")) {
+			                xmlDump.append("      <compensateEventDefinition activityRef=\"" + XmlDumper.replaceIllegalChars(type.substring(11)) + "\"/>" + EOL);
+		                } else {
+		                	xmlDump.append("      <signalEventDefinition signalRef=\"" + XmlDumper.replaceIllegalChars(type) + "\"/>" + EOL);
+		                }
 		                endNode("endEvent", xmlDump);
+		            } else if (s.startsWith("kcontext.getProcessInstance().signalEvent(\"")) {
+		            	xmlDump.append(">" + EOL);
+		            	s = s.substring(43);
+		                String type = s.substring(0, s.indexOf("\""));
+		                xmlDump.append("      <compensateEventDefinition activityRef=\"" + XmlDumper.replaceIllegalChars(type.substring(11)) + "\"/>" + EOL);
+		                endNode("endEvent", xmlDump);
 		            } else {
 		                throw new IllegalArgumentException("Unknown action " + s);
 		            }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.process.core.event.EventTypeFilter;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.EventNode;
@@ -23,23 +24,23 @@
     		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("      <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);
+    				"      <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
+    				"      <targetRef>" + XmlDumper.replaceIllegalChars(eventNode.getVariableName()) + "</targetRef>" + EOL);
     			xmlDump.append("      </dataOutputAssociation>" + EOL);
     			xmlDump.append("      <outputSet>" + EOL);
-    			xmlDump.append("        <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + 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();
     			if (type.startsWith("Message-")) {
     			    type = type.substring(8);
-    			    xmlDump.append("      <messageEventDefinition messageRef=\"" + type + "\"/>" + EOL);
+    			    xmlDump.append("      <messageEventDefinition messageRef=\"" + XmlDumper.replaceIllegalChars(type) + "\"/>" + EOL);
                 } else {
-                    xmlDump.append("      <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+                    xmlDump.append("      <signalEventDefinition signalRef=\"" + XmlDumper.replaceIllegalChars(type) + "\"/>" + EOL);
                 }
     		}
     		endNode("intermediateCatchEvent", xmlDump);
@@ -54,14 +55,14 @@
     		        xmlDump.append("cancelActivity=\"false\" ");
     		    }
     		    xmlDump.append(">" + EOL);
-    		    xmlDump.append("      <escalationEventDefinition escalationCode=\"" + type + "\" />" + EOL);
+    		    xmlDump.append("      <escalationEventDefinition escalationCode=\"" + XmlDumper.replaceIllegalChars(type) + "\" />" + EOL);
     		    endNode("boundaryEvent", xmlDump);
 		    } else if (type.startsWith("Error-")) {
                 type = type.substring(attachedTo.length() + 7);
                 writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
                 xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
                 xmlDump.append(">" + EOL);
-                xmlDump.append("      <errorEventDefinition errorCode=\"" + type + "\" />" + EOL);
+                xmlDump.append("      <errorEventDefinition errorCode=\"" + XmlDumper.replaceIllegalChars(type) + "\" />" + EOL);
                 endNode("boundaryEvent", xmlDump);
             } else if (type.startsWith("Timer-")) {
                 type = type.substring(attachedTo.length() + 7);
@@ -74,7 +75,7 @@
                 xmlDump.append(">" + EOL);
                 xmlDump.append(
                     "      <timerEventDefinition>" + EOL +
-                    "        <timeCycle xs:type=\"tFormalExpression\">" + eventNode.getMetaData("TimeCycle") + "</timeCycle>" + EOL +
+                    "        <timeCycle xs:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars((String) eventNode.getMetaData("TimeCycle")) + "</timeCycle>" + EOL +
                     "      </timerEventDefinition>" + EOL);
                 endNode("boundaryEvent", xmlDump);
             } else if (type.startsWith("Compensate-")) {

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ExclusiveGatewayHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -16,6 +16,8 @@
         } else if ("diverging".equals(type)) {
         	Split split = new Split();
         	split.setType(Split.TYPE_XOR);
+        	String isDefault = attrs.getValue("default");
+        	split.setMetaData("Default", isDefault);
         	return split;
         } else {
         	throw new IllegalArgumentException(

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.FaultNode;
 import org.xml.sax.Attributes;
@@ -20,20 +21,20 @@
 		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("      <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);
+                "        <sourceRef>" + XmlDumper.replaceIllegalChars(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("        <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</dataInputRefs>" + EOL);
             xmlDump.append("      </inputSet>" + EOL);
         }
         if (faultNode.isTerminateParent()) {
-            xmlDump.append("      <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+            xmlDump.append("      <errorEventDefinition errorCode=\"" + XmlDumper.replaceIllegalChars(faultNode.getFaultName()) + "\" />" + EOL);
         } else {
-            xmlDump.append("      <escalationEventDefinition escalationCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+            xmlDump.append("      <escalationEventDefinition escalationCode=\"" + XmlDumper.replaceIllegalChars(faultNode.getFaultName()) + "\" />" + EOL);
         }
 		endNode("endEvent", xmlDump);
 	}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ForEachNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ForEachNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ForEachNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.definition.process.Connection;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.CompositeNode;
@@ -27,9 +28,9 @@
 		// ioSpecification and dataInputAssociation 
         xmlDump.append(
             "      <ioSpecification>" + EOL +
-            "        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input\" name=\"MultiInstanceInput\" />" + EOL +
+            "        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input\" name=\"MultiInstanceInput\" />" + EOL +
             "        <inputSet>" + EOL +
-            "          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</dataInputRefs>" + EOL +
+            "          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</dataInputRefs>" + EOL +
             "        </inputSet>" + EOL +
             "        <outputSet/>" + EOL +
             "      </ioSpecification>" + EOL);
@@ -37,17 +38,17 @@
         if (collectionExpression != null) {
             xmlDump.append(
                 "      <dataInputAssociation>" + EOL +
-                "        <sourceRef>" + collectionExpression + "</sourceRef>" + EOL +
-                "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</targetRef>" + EOL +
+                "        <sourceRef>" + XmlDumper.replaceIllegalChars(collectionExpression) + "</sourceRef>" + EOL +
+                "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</targetRef>" + EOL +
                 "      </dataInputAssociation>" + EOL);
         }
         // multiInstanceLoopCharacteristics
         xmlDump.append(
     		"      <multiInstanceLoopCharacteristics>" + EOL +
-            "        <loopDataInputRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</loopDataInputRef>" + EOL);
+            "        <loopDataInputRef>" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_input</loopDataInputRef>" + EOL);
         String parameterName = forEachNode.getVariableName();
         if (parameterName != null) {
-        	xmlDump.append("        <inputDataItem id=\"" + parameterName + "\" itemSubjectRef=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_multiInstanceItemType\"/>" + EOL);
+        	xmlDump.append("        <inputDataItem id=\"" + XmlDumper.replaceIllegalChars(parameterName) + "\" itemSubjectRef=\"" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_multiInstanceItemType\"/>" + EOL);
         }
         xmlDump.append("      </multiInstanceLoopCharacteristics>" + EOL);
 		// nodes

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -11,6 +11,8 @@
         if ("diverging".equals(type)) {
         	Split split = new Split();
         	split.setType(Split.TYPE_OR);
+        	String isDefault = attrs.getValue("default");
+        	split.setMetaData("Default", isDefault);
         	return split;
         } else {
         	throw new IllegalArgumentException(

Modified: 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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -4,6 +4,7 @@
 import java.util.HashSet;
 import java.util.List;
 
+import org.drools.bpmn2.core.Definitions;
 import org.drools.bpmn2.core.Interface;
 import org.drools.bpmn2.core.ItemDefinition;
 import org.drools.bpmn2.core.Message;
@@ -20,7 +21,7 @@
 	public InterfaceHandler() {
 		if ((this.validParents == null) && (this.validPeers == null)) {
 			this.validParents = new HashSet();
-			this.validParents.add(null);
+			this.validParents.add(Definitions.class);
 
 			this.validPeers = new HashSet();
 			this.validPeers.add(null);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,18 +1,13 @@
 package org.drools.bpmn2.xml;
 
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Map;
 
 import org.drools.bpmn2.core.Message;
 import org.drools.compiler.xml.ProcessBuildData;
-import org.drools.process.core.event.EventFilter;
-import org.drools.process.core.event.EventTypeFilter;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.NodeContainer;
 import org.drools.workflow.core.impl.DroolsConsequenceAction;
 import org.drools.workflow.core.node.ActionNode;
-import org.drools.workflow.core.node.EventNode;
 import org.drools.xml.ExtensibleXmlParser;
 import org.w3c.dom.Element;
 import org.xml.sax.Attributes;

Modified: 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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -4,6 +4,7 @@
 import java.util.HashSet;
 import java.util.Map;
 
+import org.drools.bpmn2.core.Definitions;
 import org.drools.bpmn2.core.ItemDefinition;
 import org.drools.bpmn2.core.Message;
 import org.drools.compiler.xml.ProcessBuildData;
@@ -19,7 +20,7 @@
 	public ItemDefinitionHandler() {
 		if ((this.validParents == null) && (this.validPeers == null)) {
 			this.validParents = new HashSet();
-			this.validParents.add(null);
+			this.validParents.add(Definitions.class);
 
 			this.validPeers = new HashSet();
 			this.validPeers.add(null);

Modified: 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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -4,6 +4,7 @@
 import java.util.HashSet;
 import java.util.Map;
 
+import org.drools.bpmn2.core.Definitions;
 import org.drools.bpmn2.core.ItemDefinition;
 import org.drools.bpmn2.core.Message;
 import org.drools.compiler.xml.ProcessBuildData;
@@ -19,7 +20,7 @@
 	public MessageHandler() {
 		if ((this.validParents == null) && (this.validPeers == null)) {
 			this.validParents = new HashSet();
-			this.validParents.add(null);
+			this.validParents.add(Definitions.class);
 
 			this.validPeers = new HashSet();
 			this.validPeers.add(null);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.drools.bpmn2.core.Definitions;
 import org.drools.bpmn2.core.Interface;
 import org.drools.bpmn2.core.ItemDefinition;
 import org.drools.bpmn2.core.Lane;
@@ -17,7 +18,6 @@
 import org.drools.process.core.context.exception.ActionExceptionHandler;
 import org.drools.process.core.context.exception.ExceptionScope;
 import org.drools.process.core.context.swimlane.Swimlane;
-import org.drools.process.core.event.EventFilter;
 import org.drools.process.core.event.EventTypeFilter;
 import org.drools.process.core.timer.Timer;
 import org.drools.ruleflow.core.RuleFlowProcess;
@@ -47,7 +47,7 @@
 	public ProcessHandler() {
 		if ((this.validParents == null) && (this.validPeers == null)) {
 			this.validParents = new HashSet();
-			this.validParents.add(null);
+			this.validParents.add(Definitions.class);
 
 			this.validPeers = new HashSet();
             this.validPeers.add(Interface.class);
@@ -115,12 +115,9 @@
 				try {
     				// remove starting _
     				sourceRef = sourceRef.substring(1);
-    				targetRef = targetRef.substring(1);
-    		        // remove ids of parent nodes
+    				// 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()) {
@@ -129,15 +126,24 @@
 				            break;
 				        }
 				    }
+                    if (source == null) {
+                        throw new IllegalArgumentException("Could not find source node for connection:" + connection.getSourceRef());
+                    }
+				}
+				try {
+    				// remove starting _
+    				targetRef = targetRef.substring(1);
+    		        // remove ids of parent nodes
+    				targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
+    				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.getTargetRef().equals(node.getMetaData("UniqueId"))) {
                             target = node;
                             break;
                         }
                     }
-                    if (source == null) {
-                        throw new IllegalArgumentException("Could not find source node for connection:" + connection.getSourceRef());
-                    }
                     if (target == null) {
                         throw new IllegalArgumentException("Could not find target node for connection:" + connection.getTargetRef());
                     }
@@ -146,9 +152,13 @@
 					source, NodeImpl.CONNECTION_DEFAULT_TYPE, 
 					target, NodeImpl.CONNECTION_DEFAULT_TYPE);
 				result.setMetaData("bendpoints", connection.getBendpoints());
-				if (connection.getExpression() != null) {
+				if (source instanceof Split) {
 					Split split = (Split) source;
 					Constraint constraint = new ConstraintImpl();
+					String defaultConnection = (String) split.getMetaData("Default");
+					if (defaultConnection != null && defaultConnection.equals(connection.getId())) {
+						constraint.setDefault(true);
+					}
 					if (connection.getName() != null) {
 						constraint.setName(connection.getName());
 					} else {
@@ -162,7 +172,9 @@
 					if (connection.getLanguage() != null) {
 						constraint.setDialect(connection.getLanguage());
 					}
-					constraint.setConstraint(connection.getExpression());
+					if (connection.getExpression() != null) {
+						constraint.setConstraint(connection.getExpression());
+					}
 					split.addConstraint(
 						new ConnectionRef(target.getId(), NodeImpl.CONNECTION_DEFAULT_TYPE),
 						constraint);
@@ -238,13 +250,8 @@
                             (cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
                             "kcontext.getProcessInstance().signalEvent(\"Timer-" + attachedTo + "-" + timeCycle + "\", null);"));
                     } else if (type.startsWith("Compensate-")) {
-                        String eventType = "Compensate-";
-                        String uniqueId = (String) node.getMetaData("UniqueId");
-            	        if (uniqueId == null) {
-            	        	eventType += "_" + XmlBPMNProcessDumper.getUniqueNodeId(attachedNode);
-            	        } else {
-            	        	eventType += uniqueId;
-            	        }
+                    	String uniqueId = (String) node.getMetaData("UniqueId");
+            	        String eventType = "Compensate-" + uniqueId;
             	        ((EventTypeFilter) ((EventNode) node).getEventFilters().get(0)).setType(eventType);
                     }
                 }

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -44,6 +44,7 @@
 			throws SAXException {
 		parser.startElementBuilder(localName, attrs);
 
+		final String id = attrs.getValue("id");
 		final String sourceRef = attrs.getValue("sourceRef");
 		final String targetRef = attrs.getValue("targetRef");
 		final String bendpoints = attrs.getValue("g:bendpoints");
@@ -66,7 +67,7 @@
 				((CompositeNode) nodeContainer).setMetaData(ProcessHandler.CONNECTIONS, connections);
 			}
 		}
-		SequenceFlow connection = new SequenceFlow(sourceRef, targetRef);
+		SequenceFlow connection = new SequenceFlow(id, sourceRef, targetRef);
 		connection.setBendpoints(bendpoints);
 		
 		connections.add(connection);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,6 +1,10 @@
 package org.drools.bpmn2.xml;
 
+import java.util.Map;
+
+import org.drools.workflow.core.Constraint;
 import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionRef;
 import org.drools.workflow.core.node.Split;
 import org.xml.sax.Attributes;
 
@@ -23,9 +27,27 @@
 				break;
 			case Split.TYPE_XOR:
 				writeNode("exclusiveGateway", node, xmlDump, includeMeta);
+				for (Map.Entry<ConnectionRef, Constraint> entry: split.getConstraints().entrySet()) {
+					if (entry.getValue().isDefault()) {
+						xmlDump.append("default=\"" +
+							XmlBPMNProcessDumper.getUniqueNodeId(split) + "-" +
+							XmlBPMNProcessDumper.getUniqueNodeId(node.getNodeContainer().getNode(entry.getKey().getNodeId())) + 
+							"\" ");
+						break;
+					}
+				}
 				break;
 			case Split.TYPE_OR:
                 writeNode("inclusiveGateway", node, xmlDump, includeMeta);
+				for (Map.Entry<ConnectionRef, Constraint> entry: split.getConstraints().entrySet()) {
+					if (entry.getValue().isDefault()) {
+						xmlDump.append("default=\"" +
+							XmlBPMNProcessDumper.getUniqueNodeId(split) + "-" +
+							XmlBPMNProcessDumper.getUniqueNodeId(node.getNodeContainer().getNode(entry.getKey().getNodeId())) + 
+							"\" ");
+						break;
+					}
+				}
                 break;
             default:
 				writeNode("complexGateway", node, xmlDump, includeMeta);

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -86,7 +86,23 @@
                     trigger.addInMapping(mapping, "event");
                 }
                 startNode.addTrigger(trigger);
-            }
+            } else if ("timerEventDefinition".equals(nodeName)) {
+            	org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+                while (subNode instanceof Element) {
+                    String subNodeName = subNode.getNodeName();
+                    if ("timeCycle".equals(subNodeName)) {
+                        String period = subNode.getTextContent();
+                        if (period != null && period.trim().length() > 0) {
+	                        ConstraintTrigger trigger = new ConstraintTrigger();
+	                        trigger.setConstraint("");
+	                        trigger.setHeader("timer (int:" + period + " " + period + ")");
+	                        startNode.addTrigger(trigger);
+	                        break;
+                        }
+                    }
+                    subNode = subNode.getNextSibling();
+               }
+            } 
             xmlNode = xmlNode.getNextSibling();
         }
     }
@@ -111,9 +127,19 @@
 		    }
 		    Trigger trigger = triggers.get(0);
 		    if (trigger instanceof ConstraintTrigger) {
-		        xmlDump.append("      <conditionalEventDefinition>" + EOL);
-                xmlDump.append("        <condition xs:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + ((ConstraintTrigger) trigger).getConstraint() + "</condition>" + EOL);
-                xmlDump.append("      </conditionalEventDefinition>" + EOL);
+		    	ConstraintTrigger constraintTrigger = (ConstraintTrigger) trigger;
+		    	if (constraintTrigger.getHeader() == null) {
+			        xmlDump.append("      <conditionalEventDefinition>" + EOL);
+	                xmlDump.append("        <condition xs:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + constraintTrigger.getConstraint() + "</condition>" + EOL);
+	                xmlDump.append("      </conditionalEventDefinition>" + EOL);
+		    	} else {
+		    		String header = constraintTrigger.getHeader();
+		    		int lenght = (header.length() - 13)/2;
+		    		String period = header.substring(11, 11 + lenght);
+			        xmlDump.append("      <timerEventDefinition>" + EOL);
+	                xmlDump.append("        <timeCycle xs:type=\"tFormalExpression\">" + period + "</timeCycle>" + EOL);
+	                xmlDump.append("      </timerEventDefinition>" + EOL);
+		    	}
 		    } else if (trigger instanceof EventTrigger) {
 		        EventTrigger eventTrigger = (EventTrigger) trigger;
 		        if (!trigger.getInMappings().isEmpty()) {

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StateNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StateNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StateNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.StateNode;
 import org.xml.sax.Attributes;
@@ -21,7 +22,7 @@
 		writeNode("intermediateCatchEvent", stateNode, xmlDump, includeMeta);
 		xmlDump.append(">" + EOL);
         xmlDump.append("      <conditionalEventDefinition>" + EOL);
-        xmlDump.append("        <condition xs:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + condition + "</condition>" + EOL);
+        xmlDump.append("        <condition xs:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + XmlDumper.replaceIllegalChars(condition) + "</condition>" + EOL);
         xmlDump.append("      </conditionalEventDefinition>" + EOL);
 		endNode("intermediateCatchEvent", xmlDump);
 	}

Modified: 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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -1,5 +1,6 @@
 package org.drools.bpmn2.xml;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.TimerNode;
 import org.xml.sax.Attributes;
@@ -21,7 +22,7 @@
 		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("        <timeCycle>" + XmlDumper.replaceIllegalChars(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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -86,30 +86,30 @@
 	protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
 		xmlDump.append("      <ioSpecification>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
-				xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+				xmlDump.append("        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
 			}
 		}
 		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
 		}
 		xmlDump.append("        <inputSet>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+			xmlDump.append("          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
-				xmlDump.append("          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+				xmlDump.append("          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
 			}
 		}
 		xmlDump.append(
 			"        </inputSet>" + EOL);
 		xmlDump.append("        <outputSet>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
-			xmlDump.append("          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+			xmlDump.append("          <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
 		}
 		xmlDump.append(
 			"        </outputSet>" + EOL);
@@ -118,14 +118,14 @@
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (!"ActorId".equals(entry.getKey()) && entry.getValue() != null) {
 				xmlDump.append(
-					"      <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
+					"      <property id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
 			}
 		}
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
 			xmlDump.append("      <dataInputAssociation>" + EOL);
 			xmlDump.append(
-				"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</targetRef>" + EOL);
+				"        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</sourceRef>" + EOL +
+				"        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</targetRef>" + EOL);
 			xmlDump.append("      </dataInputAssociation>" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
@@ -134,18 +134,18 @@
 				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 +
+					"          <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);
+					"        <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() + "</sourceRef>" + EOL +
-				"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</targetRef>" + EOL);
+				"        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+				"        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</targetRef>" + EOL);
 			xmlDump.append("      </dataOutputAssociation>" + EOL);
 		}
 	}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -2,6 +2,7 @@
 
 import java.util.Map;
 
+import org.drools.compiler.xml.XmlDumper;
 import org.drools.workflow.core.Node;
 import org.drools.workflow.core.node.WorkItemNode;
 import org.xml.sax.Attributes;
@@ -27,33 +28,33 @@
 		} 
         if ("Service Task".equals(type)) {
             writeNode("serviceTask", workItemNode, xmlDump, includeMeta);
-            xmlDump.append("operationRef=\"_" + 
+            xmlDump.append("operationRef=\"" + 
                 XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_ServiceOperation\" implementation=\"Other\" >" + EOL);
             xmlDump.append(
                 "      <ioSpecification>" + EOL +
-                "        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param\" name=\"Parameter\" />" + EOL +
-                "        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result\" name=\"Result\" />" + EOL +
+                "        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param\" name=\"Parameter\" />" + EOL +
+                "        <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result\" name=\"Result\" />" + EOL +
                 "        <inputSet>" + EOL +
-                "          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</dataInputRefs>" + EOL +
+                "          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</dataInputRefs>" + EOL +
                 "        </inputSet>" + EOL +
                 "        <outputSet>" + EOL +
-                "          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</dataOutputRefs>" + EOL +
+                "          <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</dataOutputRefs>" + EOL +
                 "        </outputSet>" + EOL +
                 "      </ioSpecification>" + EOL);
             String inMapping = workItemNode.getInMapping("Parameter");
             if (inMapping != null) {
                 xmlDump.append(
                     "      <dataInputAssociation>" + EOL +
-                    "        <sourceRef>" + inMapping + "</sourceRef>" + EOL +
-                    "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</targetRef>" + EOL +
+                    "        <sourceRef>" + XmlDumper.replaceIllegalChars(inMapping) + "</sourceRef>" + EOL +
+                    "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</targetRef>" + EOL +
                     "      </dataInputAssociation>" + EOL);
             }
             String outMapping = workItemNode.getOutMapping("Result");
             if (outMapping != null) {
                 xmlDump.append(
                     "      <dataOutputAssociation>" + EOL +
-                    "        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</sourceRef>" + EOL +
-                    "        <targetRef>" + outMapping + "</targetRef>" + EOL +
+                    "        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</sourceRef>" + EOL +
+                    "        <targetRef>" + XmlDumper.replaceIllegalChars(outMapping) + "</targetRef>" + EOL +
                     "      </dataOutputAssociation>" + EOL);
             }
             endNode("serviceTask", xmlDump);
@@ -61,13 +62,13 @@
         } 
         if ("Send Task".equals(type)) {
             writeNode("sendTask", workItemNode, xmlDump, includeMeta);
-            xmlDump.append("messageRef=\"_" + 
+            xmlDump.append("messageRef=\"" + 
                     XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" implementation=\"Other\" >" + EOL);
                 xmlDump.append(
                     "      <ioSpecification>" + EOL +
-                    "        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param\" name=\"Message\" />" + EOL +
+                    "        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param\" name=\"Message\" />" + EOL +
                     "        <inputSet>" + EOL +
-                    "          <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</dataInputRefs>" + EOL +
+                    "          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</dataInputRefs>" + EOL +
                     "        </inputSet>" + EOL +
                     "        <outputSet/>" + EOL +
                     "      </ioSpecification>" + EOL);
@@ -75,8 +76,8 @@
                 if (inMapping != null) {
                     xmlDump.append(
                         "      <dataInputAssociation>" + EOL +
-                        "        <sourceRef>" + inMapping + "</sourceRef>" + EOL +
-                        "        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</targetRef>" + EOL +
+                        "        <sourceRef>" + XmlDumper.replaceIllegalChars(inMapping) + "</sourceRef>" + EOL +
+                        "        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_param</targetRef>" + EOL +
                         "      </dataInputAssociation>" + EOL);
                 }
             endNode("sendTask", xmlDump);
@@ -84,29 +85,29 @@
         } 
         if ("Receive Task".equals(type)) {
             writeNode("receiveTask", workItemNode, xmlDump, includeMeta);
-            xmlDump.append("messageRef=\"_" + 
+            xmlDump.append("messageRef=\"" + 
                     XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" implementation=\"Other\" >" + EOL);
                 xmlDump.append(
                     "      <ioSpecification>" + EOL +
-                    "        <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result\" name=\"Message\" />" + EOL +
+                    "        <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result\" name=\"Message\" />" + EOL +
                     "        <inputSet/>" + EOL +
                     "        <outputSet>" + EOL +
-                    "          <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</dataOutputRefs>" + EOL +
+                    "          <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</dataOutputRefs>" + EOL +
                     "        </outputSet>" + EOL +
                     "      </ioSpecification>" + EOL);
                 String outMapping = workItemNode.getOutMapping("Message");
                 if (outMapping != null) {
                     xmlDump.append(
                         "      <dataOutputAssociation>" + EOL +
-                        "        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</sourceRef>" + EOL +
-                        "        <targetRef>" + outMapping + "</targetRef>" + EOL +
+                        "        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_result</sourceRef>" + EOL +
+                        "        <targetRef>" + XmlDumper.replaceIllegalChars(outMapping) + "</targetRef>" + EOL +
                         "      </dataOutputAssociation>" + EOL);
                 }
             endNode("receiveTask", xmlDump);
             return;
         } 
 		writeNode("task", workItemNode, xmlDump, includeMeta);
-		xmlDump.append("tns:taskName=\"" + type + "\" >" + EOL);
+		xmlDump.append("tns:taskName=\"" + XmlDumper.replaceIllegalChars(type) + "\" >" + EOL);
 		writeIO(workItemNode, xmlDump);
 		endNode("task", xmlDump);
 	}
@@ -114,30 +115,30 @@
 	protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
 		xmlDump.append("      <ioSpecification>" + EOL);
 		for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
-			xmlDump.append("        <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+			xmlDump.append("        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input\" name=\"" + XmlDumper.replaceIllegalChars(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);
+				xmlDump.append("        <dataInput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input\" name=\"" + XmlDumper.replaceIllegalChars(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("        <dataOutput id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Output\" name=\"" + XmlDumper.replaceIllegalChars(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);
+			xmlDump.append("          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(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("          <dataInputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(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("          <dataOutputRefs>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Output</dataOutputRefs>" + EOL);
 		}
 		xmlDump.append(
 			"        </outputSet>" + EOL);
@@ -146,7 +147,7 @@
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
 			if (entry.getValue() != null) {
 				xmlDump.append(
-					"      <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
+					"      <property id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "\" />" + EOL);
 			}
 		}
 		writeInputAssociation(workItemNode, xmlDump);
@@ -157,8 +158,8 @@
 		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);
+				"        <sourceRef>" + XmlDumper.replaceIllegalChars(entry.getValue()) + "</sourceRef>" + EOL +
+				"        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input</targetRef>" + EOL);
 			xmlDump.append("      </dataInputAssociation>" + EOL);
 		}
 		for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
@@ -166,11 +167,11 @@
 				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 +
+					"          <from xs:type=\"tFormalExpression\">" + XmlDumper.replaceIllegalChars(entry.getValue().toString()) + "</from>" + EOL +
+					"          <to xs:type=\"tFormalExpression\">" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input</to>" + EOL +
 					"        </assignment>" + EOL +
-					"        <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
-					"        <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+					"        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "</sourceRef>" + EOL +
+					"        <targetRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + XmlDumper.replaceIllegalChars(entry.getKey()) + "Input</targetRef>" + EOL);
 				xmlDump.append("      </dataInputAssociation>" + EOL);
 			}
 		}
@@ -180,8 +181,8 @@
 		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);
+				"        <sourceRef>" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+				"        <targetRef>" + XmlDumper.replaceIllegalChars(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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -20,7 +20,6 @@
 import org.drools.process.core.event.EventTypeFilter;
 import org.drools.rule.builder.dialect.java.JavaDialect;
 import org.drools.workflow.core.Constraint;
-import org.drools.workflow.core.impl.NodeImpl;
 import org.drools.workflow.core.node.ActionNode;
 import org.drools.workflow.core.node.CompositeNode;
 import org.drools.workflow.core.node.EndNode;
@@ -62,10 +61,14 @@
     }
     
     protected void visitProcess(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
-        xmlDump.append(
+        String targetNamespace = (String) process.getMetaData("TargetNamespace");
+        if (targetNamespace == null) {
+        	targetNamespace = "http://www.jboss.org/drools";
+        }
+    	xmlDump.append(
     		"<?xml version=\"1.0\" encoding=\"UTF-8\"?> " + EOL +
             "<definitions id=\"Definition\"" + EOL +
-            "             targetNamespace=\"http://www.jboss.org/drools\"" + EOL +
+            "             targetNamespace=\"" + targetNamespace + "\"" + EOL +
             "             typeLanguage=\"http://www.java.com/javaTypes\"" + EOL +
             "             expressionLanguage=\"http://www.mvel.org/2.0\"" + EOL +
             "             xmlns=\"http://schema.omg.org/spec/BPMN/2.0\"" + EOL +
@@ -88,14 +91,14 @@
 	    // the process itself
 		xmlDump.append("  <process processType=\"executable\" ");
         if (process.getId() != null) {
-            xmlDump.append("id=\"" + process.getId() + "\" ");
+            xmlDump.append("id=\"" + XmlDumper.replaceIllegalChars(process.getId()) + "\" ");
         }
         if (process.getName() != null) {
-            xmlDump.append("name=\"" + process.getName() + "\" ");
+            xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(process.getName()) + "\" ");
         }
         String packageName = process.getPackageName();
         if (packageName != null && !"org.drools.bpmn2".equals(packageName)) {
-            xmlDump.append("tns:packageName=\"" + packageName + "\" ");
+            xmlDump.append("tns:packageName=\"" + XmlDumper.replaceIllegalChars(packageName) + "\" ");
         }
         // TODO: package, version
         xmlDump.append(">" + EOL + EOL);
@@ -111,9 +114,9 @@
         if (variableScope != null && !variableScope.getVariables().isEmpty()) {
             for (Variable variable: variableScope.getVariables()) {
                 xmlDump.append(
-                    "  <itemDefinition id=\"" + prefix + variable.getName() + "Item\" ");
+                    "  <itemDefinition id=\"" + XmlDumper.replaceIllegalChars(prefix + variable.getName()) + "Item\" ");
                 if (variable.getType() != null) {
-                    xmlDump.append("structureRef=\"" + variable.getType().getStringType() + "\" ");
+                    xmlDump.append("structureRef=\"" + XmlDumper.replaceIllegalChars(variable.getType().getStringType()) + "\" ");
                 }
                 xmlDump.append("/>" + EOL);
             }
@@ -127,7 +130,7 @@
                 VariableScope variableScope = (VariableScope) 
                     ((ContextContainer) node).getDefaultContext(VariableScope.VARIABLE_SCOPE);
                 if (variableScope != null) {
-                    visitVariableScope(variableScope, "_" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "-", xmlDump);
+                    visitVariableScope(variableScope, XmlBPMNProcessDumper.getUniqueNodeId(node) + "-", xmlDump);
                 }
             }
             if (node instanceof NodeContainer) {
@@ -144,7 +147,7 @@
         if (!swimlanes.isEmpty()) {
             xmlDump.append("    <laneSet>" + EOL);
             for (Swimlane swimlane: swimlanes) {
-                xmlDump.append("      <lane name=\"" + swimlane.getName() + "\" >" + EOL);
+                xmlDump.append("      <lane name=\"" + XmlDumper.replaceIllegalChars(swimlane.getName()) + "\" >" + EOL);
                 visitLane(process, swimlane.getName(), xmlDump);
                 xmlDump.append("      </lane>" + EOL);
             }
@@ -157,12 +160,12 @@
             if (node instanceof HumanTaskNode) {
                 String swimlane = ((HumanTaskNode) node).getSwimlane();
                 if (lane.equals(swimlane)) {
-                    xmlDump.append("        <flowElementRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "</flowElementRef>" + EOL);
+                    xmlDump.append("        <flowElementRef>" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "</flowElementRef>" + EOL);
                 }
             } else {
                 String swimlane = (String) node.getMetaData("Lane");
                 if (lane.equals(swimlane)) {
-                    xmlDump.append("        <flowElementRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "</flowElementRef>" + EOL);
+                    xmlDump.append("        <flowElementRef>" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "</flowElementRef>" + EOL);
                 }
             }
             if (node instanceof NodeContainer) {
@@ -188,9 +191,9 @@
             xmlDump.append("    <!-- process variables -->" + EOL);
             for (Variable variable: variables) {
                 if (variable.getMetaData("DataObject") == null) {
-                    xmlDump.append("    <property id=\"" + variable.getName() + "\" ");
+                    xmlDump.append("    <property id=\"" + XmlDumper.replaceIllegalChars(variable.getName()) + "\" ");
                     if (variable.getType() != null) {
-                    	xmlDump.append("itemSubjectRef=\"_" + variable.getName() + "Item\"" );
+                    	xmlDump.append("itemSubjectRef=\"_" + XmlDumper.replaceIllegalChars(variable.getName()) + "Item\"" );
                     }
                     // TODO: value?
                     xmlDump.append("/>" + EOL);
@@ -198,9 +201,9 @@
             }
             for (Variable variable: variables) {
                 if (variable.getMetaData("DataObject") != null) {
-                    xmlDump.append("    <dataObject id=\"" + variable.getName() + "\" ");
+                    xmlDump.append("    <dataObject id=\"" + XmlDumper.replaceIllegalChars(variable.getName()) + "\" ");
                     if (variable.getType() != null) {
-                        xmlDump.append("itemSubjectRef=\"_" + variable.getName() + "Item\"" );
+                        xmlDump.append("itemSubjectRef=\"_" + XmlDumper.replaceIllegalChars(variable.getName()) + "Item\"" );
                     }
                     // TODO: value?
                     xmlDump.append("/>" + EOL);
@@ -229,11 +232,11 @@
                             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 +
+                            "  <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())) {
@@ -242,39 +245,39 @@
                             messageType = "";
                         }
                         xmlDump.append(
-                            "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
-                            "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                            "  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + XmlDumper.replaceIllegalChars(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);
+                            "  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + XmlDumper.replaceIllegalChars(messageType) + "\"/>" + EOL +
+                            "  <message id=\"" + getUniqueNodeId(node) + "_Message\" structureRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
                     }
                 }
             } else if (node instanceof EndNode) {
                 String messageType = (String) node.getMetaData("MessageType");
                 if (messageType != null) {
                     xmlDump.append(
-                        "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
-                        "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                        "  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + XmlDumper.replaceIllegalChars(messageType) + "\"/>" + EOL +
+                        "  <message id=\"" + getUniqueNodeId(node) + "_Message\" structureRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
                 }
             } else if (node instanceof ActionNode) {
                 String messageType = (String) node.getMetaData("MessageType");
                 if (messageType != null) {
                     xmlDump.append(
-                        "  <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
-                        "  <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+                        "  <itemDefinition id=\"" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + XmlDumper.replaceIllegalChars(messageType) + "\"/>" + EOL +
+                        "  <message id=\"" + getUniqueNodeId(node) + "_Message\" structureRef=\"" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
                 }
             } else if (node instanceof EventNode) {
                 String messageRef = ((EventTypeFilter) ((EventNode) node).getEventFilters().get(0)).getType();
                 messageRef = messageRef.substring(8);
                 String messageType = (String) node.getMetaData("MessageType");
                 xmlDump.append(
-                    "  <itemDefinition id=\"" + messageRef + "Type\" structureRef=\"" + messageType + "\"/>" + EOL +
-                    "  <message id=\"" + messageRef + "\" structureRef=\"" + messageRef + "Type\" />" + EOL + EOL);
+                    "  <itemDefinition id=\"" + XmlDumper.replaceIllegalChars(messageRef) + "Type\" structureRef=\"" + XmlDumper.replaceIllegalChars(messageType) + "\"/>" + EOL +
+                    "  <message id=\"" + XmlDumper.replaceIllegalChars(messageRef) + "\" structureRef=\"" + XmlDumper.replaceIllegalChars(messageRef) + "Type\" />" + EOL + EOL);
             } else if (node instanceof StartNode) {
                 StartNode startNode = (StartNode) node;
                 if (startNode.getTriggers() != null && !startNode.getTriggers().isEmpty()) {
@@ -285,15 +288,15 @@
                             eventType = eventType.substring(8);
                             String messageType = (String) node.getMetaData("MessageType");
                             xmlDump.append(
-                                "  <itemDefinition id=\"" + eventType + "Type\" structureRef=\"" + messageType + "\"/>" + EOL +
-                                "  <message id=\"" + eventType + "\" structureRef=\"" + eventType + "Type\" />" + EOL + EOL);
+                                "  <itemDefinition id=\"" + XmlDumper.replaceIllegalChars(eventType) + "Type\" structureRef=\"" + XmlDumper.replaceIllegalChars(messageType) + "\"/>" + EOL +
+                                "  <message id=\"" + XmlDumper.replaceIllegalChars(eventType) + "\" structureRef=\"" + XmlDumper.replaceIllegalChars(eventType) + "Type\" />" + EOL + EOL);
                         }
                     }
                 }
             } else if (node instanceof ForEachNode) {
             	ForEachNode forEachNode = (ForEachNode) node;
                 xmlDump.append(
-                    "  <itemDefinition id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_multiInstanceItemType\" structureRef=\"" + ((ObjectDataType) forEachNode.getVariableType()).getClassName() + "\"/>" + EOL + EOL);
+                    "  <itemDefinition id=\"" + XmlBPMNProcessDumper.getUniqueNodeId(forEachNode) + "_multiInstanceItemType\" structureRef=\"" + XmlDumper.replaceIllegalChars(((ObjectDataType) forEachNode.getVariableType()).getClassName()) + "\"/>" + EOL + EOL);
             } 
         }
     }
@@ -331,9 +334,12 @@
     }
     
     public void visitConnection(Connection connection, StringBuilder xmlDump, boolean includeMeta) {
-        xmlDump.append("    <sequenceFlow sourceRef=\"_" + getUniqueNodeId(connection.getFrom()) + "\" ");
+        xmlDump.append("    <sequenceFlow id=\"" +
+    		getUniqueNodeId(connection.getFrom()) + "-" + 
+    		getUniqueNodeId(connection.getTo()) + 
+    		"\" sourceRef=\"" + getUniqueNodeId(connection.getFrom()) + "\" ");
         // TODO fromType, toType
-        xmlDump.append("targetRef=\"_" + getUniqueNodeId(connection.getTo()) + "\" ");
+        xmlDump.append("targetRef=\"" + getUniqueNodeId(connection.getTo()) + "\" ");
         if (includeMeta) {
             String bendpoints = (String) connection.getMetaData("bendpoints");
             if (bendpoints != null) {
@@ -378,14 +384,18 @@
     }
     
     public static String getUniqueNodeId(Node node) {
-    	String result = node.getId() + "";
+    	String result = (String) node.getMetaData("UniqueId");
+    	if (result != null) {
+    		return result;
+    	}
+    	result = node.getId() + "";
     	NodeContainer nodeContainer = node.getNodeContainer();
     	while (nodeContainer instanceof CompositeNode) {
     		CompositeNode composite = (CompositeNode) nodeContainer;
     		result = composite.getId() + "-" + result;
     		nodeContainer = composite.getNodeContainer();
     	}
-    	return result;
+    	return "_" + result;
     }
     
 }

Modified: 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	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.drools.bpmn2.core.Definitions;
 import org.drools.bpmn2.xml.di.SequenceFlowConnectorHandler.ConnectionInfo;
 import org.drools.bpmn2.xml.di.ShapeHandler.NodeInfo;
 import org.drools.compiler.xml.ProcessBuildData;
@@ -29,7 +30,7 @@
     
     protected void initValidParents() {
         this.validParents = new HashSet<Class<?>>();
-        this.validParents.add(null);
+        this.validParents.add(Definitions.class);
     }
     
     protected void initValidPeers() {

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2Test.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2Test.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2Test.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,22 @@
+package org.drools.bpmn2;
+
+import junit.framework.TestCase;
+
+import org.drools.KnowledgeBase;
+import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.KnowledgeBuilderFactory;
+import org.drools.builder.ResourceType;
+import org.drools.io.ResourceFactory;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+public class BPMN2Test extends TestCase {
+	
+	public void testResourceType() {
+		KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+		kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-MinimalProcess.xml"), ResourceType.BPMN2);
+		KnowledgeBase kbase = kbuilder.newKnowledgeBase();
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		ksession.startProcess("Minimal");
+	}
+
+}

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,52 @@
+package org.drools.bpmn2;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.custommonkey.xmlunit.XMLTestCase;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.drools.bpmn2.xml.BPMNSemanticModule;
+import org.drools.bpmn2.xml.XmlBPMNProcessDumper;
+import org.drools.compiler.xml.XmlProcessReader;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.xml.SemanticModules;
+import org.xml.sax.SAXException;
+
+public class BPMN2XMLTest extends XMLTestCase {
+	
+	private static final String[] processes = {
+		"BPMN2-SimpleXMLProcess.xml"
+	};
+	
+	public void setUp() throws Exception {
+		super.setUp();
+		XMLUnit.setIgnoreWhitespace(true);
+		XMLUnit.setIgnoreComments(true);
+	}
+	
+	public void testXML() throws IOException, SAXException {
+		SemanticModules modules = new SemanticModules();
+		modules.addSemanticModule(new BPMNSemanticModule());
+        XmlProcessReader processReader = new XmlProcessReader(modules);
+        for (String processName: processes) {
+			String original = slurp(BPMN2XMLTest.class.getResourceAsStream("/" + processName));
+			RuleFlowProcess p = (RuleFlowProcess)
+		    	processReader.read(BPMN2XMLTest.class.getResourceAsStream("/" + processName));
+			String result = XmlBPMNProcessDumper.INSTANCE.dump(p);
+			System.out.println(original);
+			System.out.println("---------------------------------------------------------------");
+			System.out.println(result);
+			assertXMLEqual("Comparing original with result process", original, result);
+		}
+	}
+	
+	public static String slurp(InputStream in) throws IOException {
+	    StringBuffer out = new StringBuffer();
+	    byte[] b = new byte[4096];
+	    for (int n; (n = in.read(b)) != -1;) {
+	        out.append(new String(b, 0, n));
+	    }
+	    return out.toString();
+	}
+
+}

Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-03-05 15:12:16 UTC (rev 31961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java	2010-03-05 16:07:12 UTC (rev 31962)
@@ -120,6 +120,17 @@
 		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
 	}
 	
+	public void testExclusiveSplitDefault() throws Exception {
+		KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplitDefault.xml");
+		StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+		ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
+		Map<String, Object> params = new HashMap<String, Object>();
+		params.put("x", "NotFirst");
+		params.put("y", "Second");
+		ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
+		assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+	}
+	
     public void testInclusiveSplit() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-InclusiveSplit.xml");
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -129,6 +140,15 @@
         assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
     }
     
+    public void testInclusiveSplitDefault() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-InclusiveSplitDefault.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Map<String, Object> params = new HashMap<String, Object>();
+        params.put("x", -5);
+        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();
@@ -325,6 +345,13 @@
         assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
     }
 
+    public void testCompensateEndEventProcess() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-CompensateEndEvent.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        ProcessInstance processInstance = ksession.startProcess("CompensateEndEvent");
+        assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+    }
+
     public void testGraphicalInformation() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
         final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -382,6 +409,16 @@
         ksession.fireAllRules();
     }
     
+    public void testTimerStart() throws Exception {
+        KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerStart.xml");
+        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+        Thread.sleep(600);
+        for (int i = 0; i < 5; i++) {
+	        ksession.fireAllRules();
+	        Thread.sleep(500);
+        }
+    }
+    
     public void testSignalStart() throws Exception {
         KnowledgeBase kbase = createKnowledgeBase("BPMN2-SignalStart.xml");
         StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CompensateEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CompensateEndEvent.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CompensateEndEvent.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.example.org/MinimalExample">
+
+  <itemDefinition id="xType" structureRef="java.lang.String" />
+
+  <process id="CompensateEndEvent" name="Compensate End Event Process">
+  
+    <property id="x" itemSubjectRef="tns:xType" />
+
+    <startEvent id="_1" name="StartProcess"/>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <scriptTask id="_2" name="Task">
+      <script>System.out.println("Executing task");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="CompensateEvent">
+      <compensateEventDefinition activityRef="_2"/>
+    </endEvent>
+    <boundaryEvent id="_5" name="CompensateEvent" attachedToRef="_2">
+      <compensateEventDefinition />
+    </boundaryEvent>
+    <sequenceFlow sourceRef="_5" targetRef="_6"/>
+    <scriptTask id="_6" name="Compensate">
+      <script>System.out.println("Compensating task");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_6" targetRef="_7"/>
+    <endEvent id="_7" name="EndEvent"/>
+    
+  </process>
+</definitions>

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitDefault.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitDefault.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitDefault.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,100 @@
+<?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" default="_2-4"/>
+    <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>return x == "First";</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="_2-4" sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" />
+    <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-InclusiveSplitDefault.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplitDefault.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplitDefault.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?> 
+<definitions id="Definition"
+             targetNamespace="http://www.jboss.org/drools"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:g="http://www.jboss.org/drools/flow/gpd"
+             xmlns:tns="http://www.jboss.org/drools">
+
+  <itemDefinition id="xItem" structureRef="java.lang.Integer" />
+
+  <process id="com.sample.test" name="Test" >
+
+    <!-- process variables -->
+    <property id="x" itemSubjectRef="tns:xItem"/>
+
+    <!-- nodes -->
+    <startEvent id="_1" name="Start" />
+    <inclusiveGateway id="_2" name="Split" gatewayDirection="diverging" default="_2-5" />
+    <scriptTask id="_3" name="Script1" >
+      <script>System.out.println("path1");</script>
+    </scriptTask>
+    <scriptTask id="_4" name="Script2" >
+      <script>System.out.println("path2");</script>
+    </scriptTask>
+    <scriptTask id="_5" name="Script3" >
+      <script>System.out.println("path3");</script>
+    </scriptTask>
+    <endEvent id="_6" name="End" />
+    <endEvent id="_7" name="End" />
+    <endEvent id="_8" name="End" />
+
+    <!-- connections -->
+    <sequenceFlow sourceRef="_1" targetRef="_2" />
+    <sequenceFlow sourceRef="_2" targetRef="_3" >
+      <conditionExpression>return x > 0;</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow sourceRef="_2" targetRef="_4" >
+      <conditionExpression>return x > 10;</conditionExpression>
+    </sequenceFlow>
+    <sequenceFlow id="_2-5" sourceRef="_2" targetRef="_5" />
+    <sequenceFlow sourceRef="_3" targetRef="_6" />
+    <sequenceFlow sourceRef="_4" targetRef="_7" />
+    <sequenceFlow sourceRef="_5" targetRef="_8" />
+
+  </process>
+
+</definitions>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SimpleXMLProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SimpleXMLProcess.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SimpleXMLProcess.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions
+  id="Definition"
+  targetNamespace="http://www.example.org/MinimalExample"
+  typeLanguage="http://www.java.com/javaTypes"
+  expressionLanguage="http://www.mvel.org/2.0"
+  xmlns="http://schema.omg.org/spec/BPMN/2.0"
+  xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+  xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+  xmlns:tns="http://www.jboss.org/drools">
+
+  <resource id="Actor" name="Human Actor" />
+  <process id="Minimal" name="&lt; &amp; &gt;" processType="executable" tns:packageName="com.sample">
+    <startEvent id="Node1" name="StartProcess"/>
+    <sequenceFlow id="Node1-_2" sourceRef="Node1" targetRef="_2"/>
+    <scriptTask id="_2" name="Hello">
+      <script>System.out.println("Hello World");</script>
+    </scriptTask>
+    <sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerStart.xml	                        (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerStart.xml	2010-03-05 16:07:12 UTC (rev 31962)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+             targetNamespace="http://www.example.org/MinimalExample"
+             typeLanguage="http://www.java.com/javaTypes"
+             expressionLanguage="http://www.mvel.org/2.0"
+             xmlns="http://schema.omg.org/spec/BPMN/2.0"
+             xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+             xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+             xmlns:tns="http://www.jboss.org/drools">
+
+  <process id="Minimal" name="Minimal Process" processType="executable" tns:packageName="com.sample">
+    <startEvent id="_1" name="StartProcess">
+      <timerEventDefinition>
+        <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+      </timerEventDefinition>
+    </startEvent>
+    <sequenceFlow sourceRef="_1" targetRef="_2"/>
+    <scriptTask id="_2" name="Hello">
+      <script>System.out.println("Triggered ...");</script>
+    </scriptTask>
+    <sequenceFlow sourceRef="_2" targetRef="_3"/>
+    <endEvent id="_3" name="EndProcess">
+      <terminateEventDefinition/>
+    </endEvent>
+  </process>
+</definitions>



More information about the jboss-svn-commits mailing list