[jboss-svn-commits] JBL Code SVN: r29725 - in labs/jbossrules/trunk/drools-process/drools-bpmn2: src/main/java/org/drools/bpmn2 and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 21 09:07:37 EDT 2009
Author: KrisVerlaenen
Date: 2009-10-21 09:07:35 -0400 (Wed, 21 Oct 2009)
New Revision: 29725
Added:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventSignal.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml
Modified:
labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
Log:
- adding bpmn2 implementations
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,23 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/main/java"/>
- <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/test/java" output="target/test-classes"/>
- <classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
- <classpathentry kind="src" path="/drools-api"/>
- <classpathentry kind="src" path="/drools-compiler"/>
- <classpathentry kind="src" path="/drools-core"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.12/mvel2-2.0.12.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
-</classpath>
\ No newline at end of file
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry excluding="**/*.java" kind="src" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**/*.java" including="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk1.6.0_14"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/drools-api"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/drools-compiler"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/drools-core"/>
+ <classpathentry combineaccessrules="false" kind="src" path="/drools-persistence-jpa"/>
+ <classpathentry kind="var" path="M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/btm/btm/1.3.2/btm-1.3.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/geronimo-jms_1.1_spec-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/geronimo-jta_1.0.1B_spec-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.1.117/h2-1.1.117.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-commons-annotations/3.1.0.GA/hibernate-commons-annotations-3.1.0.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.12/mvel2-2.0.12.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.5.0/slf4j-api-1.5.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-jdk14/1.5.2/slf4j-jdk14-1.5.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.project 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.project 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,11 +1,7 @@
<projectDescription>
<name>drools-bpmn2</name>
<comment>A rule production system</comment>
- <projects>
- <project>drools-api</project>
- <project>drools-compiler</project>
- <project>drools-core</project>
- </projects>
+ <projects/>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/pom.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -29,6 +29,23 @@
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.drools</groupId>
+ <artifactId>drools-persistence-jpa</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>h2</artifactId>
+ <version>1.1.117</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.btm</groupId>
+ <artifactId>btm</artifactId>
+ <version>1.3.2</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Interface.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,66 @@
+package org.drools.bpmn2.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Interface {
+
+ private String id;
+ private String name;
+ private Map<String, Operation> operations = new HashMap<String, Operation>();
+
+ public Interface(String id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Operation addOperation(String id, String name) {
+ Operation operation = new Operation(id, name);
+ operations.put(id, operation);
+ return operation;
+ }
+
+ public Operation getOperation(String name) {
+ return operations.get(name);
+ }
+
+ public class Operation {
+ private String id;
+ private String name;
+ private Message message;
+ public Operation(String id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+ public String getId() {
+ return id;
+ }
+ public void setId(String id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+ public Message getMessage() {
+ return message;
+ }
+ public void setMessage(Message message) {
+ this.message = message;
+ }
+ public Interface getInterface() {
+ return Interface.this;
+ }
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/ItemDefinition.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.core;
+
+public class ItemDefinition {
+
+ private String id;
+ private String structureRef;
+
+ public ItemDefinition(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getStructureRef() {
+ return structureRef;
+ }
+
+ public void setStructureRef(String structureRef) {
+ this.structureRef = structureRef;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Lane.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,36 @@
+package org.drools.bpmn2.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Lane {
+
+ private String id;
+ private String name;
+ private List<String> flowElementIds = new ArrayList<String>();
+
+ public Lane(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List<String> getFlowElements() {
+ return flowElementIds;
+ }
+
+ public void addFlowElement(String id) {
+ flowElementIds.add(id);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/core/Message.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,24 @@
+package org.drools.bpmn2.core;
+
+public class Message {
+
+ private String id;
+ private String type;
+
+ public Message(String id) {
+ this.id = id;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ReceiveTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.handler;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.runtime.KnowledgeRuntime;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ReceiveTaskHandler implements WorkItemHandler {
+
+ // TODO: use correlation instead of message type
+ private Map<String, Long> waiting = new HashMap<String, Long>();
+ private KnowledgeRuntime ksession;
+
+ public ReceiveTaskHandler(KnowledgeRuntime ksession) {
+ this.ksession = ksession;
+ }
+
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ String messageType = (String) workItem.getParameter("MessageType");
+ waiting.put(messageType, workItem.getId());
+ }
+
+ public void messageReceived(String messageType, Object message) {
+ Long workItemId = waiting.get(messageType);
+ if (workItemId == null) {
+ return;
+ }
+ Map<String, Object> results = new HashMap<String, Object>();
+ results.put("Message", message);
+ ksession.getWorkItemManager().completeWorkItem(workItemId, results);
+ }
+
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ // Do nothing, cannot be aborted
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/SendTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,19 @@
+package org.drools.bpmn2.handler;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class SendTaskHandler implements WorkItemHandler {
+
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ String message = (String) workItem.getParameter("Message");
+ System.out.println("Sending message: " + message);
+ manager.completeWorkItem(workItem.getId(), null);
+ }
+
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ // Do nothing, cannot be aborted
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/handler/ServiceTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,54 @@
+package org.drools.bpmn2.handler;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ServiceTaskHandler implements WorkItemHandler {
+
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ String i = (String) workItem.getParameter("Interface");
+ String operation = (String) workItem.getParameter("Operation");
+ String parameterType = (String) workItem.getParameter("ParameterType");
+ Object parameter = workItem.getParameter("Parameter");
+ try {
+ Class<?> c = Class.forName(i);
+ Object instance = c.newInstance();
+ Class<?>[] classes = null;
+ Object[] params = null;
+ if (parameterType != null) {
+ classes = new Class<?>[] {
+ Class.forName(parameterType)
+ };
+ params = new Object[] {
+ parameter
+ };
+ }
+ Method method = c.getMethod(operation, classes);
+ Object result = method.invoke(instance, params);
+ Map<String, Object> results = new HashMap<String, Object>();
+ results.put("Result", result);
+ manager.completeWorkItem(workItem.getId(), results);
+ } catch (ClassNotFoundException e) {
+ System.err.println(e);
+ } catch (InstantiationException e) {
+ System.err.println(e);
+ } catch (IllegalAccessException e) {
+ System.err.println(e);
+ } catch (NoSuchMethodException e) {
+ System.err.println(e);
+ } catch (InvocationTargetException e) {
+ System.err.println(e);
+ }
+ }
+
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ // Do nothing, cannot be aborted
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -2,6 +2,7 @@
import java.util.HashSet;
+import org.drools.bpmn2.core.Lane;
import org.drools.bpmn2.core.SequenceFlow;
import org.drools.process.core.context.variable.Variable;
import org.drools.workflow.core.Node;
@@ -33,6 +34,7 @@
protected void initValidPeers() {
this.validPeers = new HashSet<Class<?>>();
this.validPeers.add(null);
+ this.validPeers.add(Lane.class);
this.validPeers.add(Variable.class);
this.validPeers.add(Node.class);
this.validPeers.add(SequenceFlow.class);
@@ -41,17 +43,28 @@
public Object start(final String uri, final String localName, final Attributes attrs,
final ExtensibleXmlParser parser) throws SAXException {
parser.startElementBuilder( localName, attrs );
- NodeContainer nodeContainer = (NodeContainer) parser.getParent();
final Node node = createNode(attrs);
String id = attrs.getValue("id");
- // remove starting _
- id = id.substring(1);
- // remove ids of parent nodes
- id = id.substring(id.lastIndexOf("-") + 1);
- final String name = attrs.getValue("name");
- node.setName(name);
- node.setId(new Integer(id));
- nodeContainer.addNode(node);
+ try {
+ // remove starting _
+ id = id.substring(1);
+ // remove ids of parent nodes
+ id = id.substring(id.lastIndexOf("-") + 1);
+ final String name = attrs.getValue("name");
+ node.setName(name);
+ node.setId(new Integer(id));
+ } catch (NumberFormatException e) {
+ // id is not in the expected format, generating a new one
+ long newId = 0;
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+ for (org.drools.definition.process.Node n: nodeContainer.getNodes()) {
+ if (n.getId() > newId) {
+ newId = n.getId();
+ }
+ }
+ ((org.drools.workflow.core.Node) node).setId(++newId);
+ node.setMetaData("UniqueId", attrs.getValue("id"));
+ }
return node;
}
@@ -62,6 +75,8 @@
final Element element = parser.endElementBuilder();
Node node = (Node) parser.getCurrent();
handleNode(node, element, uri, localName, parser);
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+ nodeContainer.addNode(node);
return node;
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.xml;
+
+import java.util.List;
+
+import org.drools.definition.process.Connection;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.DynamicNode;
+import org.xml.sax.Attributes;
+
+public class AdHocSubProcessHandler extends SubProcessHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new DynamicNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return DynamicNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ DynamicNode dynamicNode = (DynamicNode) node;
+ writeNode("adHocSubProcess", dynamicNode, xmlDump, includeMeta);
+ xmlDump.append(" ordering=\"parallel\" >" + EOL);
+ // nodes
+ List<Node> subNodes = getSubNodes(dynamicNode);
+ xmlDump.append(" <!-- nodes -->" + EOL);
+ for (Node subNode: subNodes) {
+ XmlBPMNProcessDumper.INSTANCE.visitNode(subNode, xmlDump, includeMeta);
+ }
+ // connections
+ List<Connection> connections = getSubConnections(dynamicNode);
+ xmlDump.append(" <!-- connections -->" + EOL);
+ for (Connection connection: connections) {
+ XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
+ }
+ endNode("adHocSubProcess", xmlDump);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,57 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.FaultNode;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.DefaultSemanticModule;
+
+public class BPMN2SemanticModule extends DefaultSemanticModule {
+
+ public BPMN2SemanticModule() {
+ super("http://www.omg.org/bpmn20");
+
+ addHandler("process", new ProcessHandler());
+
+ addHandler("property", new PropertyHandler());
+ addHandler("lane", new LaneHandler());
+
+ addHandler("startEvent", new StartEventHandler());
+ addHandler("endEvent", new EndEventHandler());
+ addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+ addHandler("parallelGateway", new ParallelGatewayHandler());
+ addHandler("complexGateway", new ComplexGatewayHandler());
+ addHandler("scriptTask", new ScriptTaskHandler());
+ addHandler("task", new TaskHandler());
+ addHandler("userTask", new UserTaskHandler());
+ addHandler("manualTask", new ManualTaskHandler());
+ addHandler("serviceTask", new ServiceTaskHandler());
+ addHandler("sendTask", new SendTaskHandler());
+ addHandler("receiveTask", new ReceiveTaskHandler());
+ addHandler("businessRuleTask", new BusinessRuleTaskHandler());
+ addHandler("callActivity", new CallActivityHandler());
+ addHandler("subProcess", new SubProcessHandler());
+ addHandler("adHocSubProcess", new AdHocSubProcessHandler());
+ addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
+
+ addHandler("sequenceFlow", new SequenceFlowHandler());
+
+ addHandler("itemDefinition", new ItemDefinitionHandler());
+ addHandler("message", new MessageHandler());
+ addHandler("interface", new InterfaceHandler());
+ addHandler("operation", new OperationHandler());
+ addHandler("inMessageRef", new InMessageRefHandler());
+
+ handlersByClass.put(Split.class, new SplitHandler());
+ handlersByClass.put(Join.class, new JoinHandler());
+ handlersByClass.put(EventNode.class, new EventNodeHandler());
+ handlersByClass.put(TimerNode.class, new TimerNodeHandler());
+ handlersByClass.put(EndNode.class, new EndNodeHandler());
+ handlersByClass.put(FaultNode.class, new FaultNodeHandler());
+ handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNDISemanticModule.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,22 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.bpmn2.xml.di.ActivityShapeHandler;
+import org.drools.bpmn2.xml.di.EventShapeHandler;
+import org.drools.bpmn2.xml.di.GatewayShapeHandler;
+import org.drools.bpmn2.xml.di.ProcessDiagramHandler;
+import org.drools.bpmn2.xml.di.SequenceFlowConnectorHandler;
+import org.drools.xml.DefaultSemanticModule;
+
+public class BPMNDISemanticModule extends DefaultSemanticModule {
+
+ public BPMNDISemanticModule() {
+ super("http://bpmndi.org");
+
+ addHandler("processDiagram", new ProcessDiagramHandler());
+ addHandler("eventShape", new EventShapeHandler());
+ addHandler("gatewayShape", new GatewayShapeHandler());
+ addHandler("activityShape", new ActivityShapeHandler());
+ addHandler("sequenceFlowConnector", new SequenceFlowConnectorHandler());
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,7 +1,12 @@
package org.drools.bpmn2.xml;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.FaultNode;
import org.drools.workflow.core.node.Join;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.TimerNode;
+import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.DefaultSemanticModule;
public class BPMNSemanticModule extends DefaultSemanticModule {
@@ -9,27 +14,44 @@
public BPMNSemanticModule() {
super("http://schema.omg.org/spec/BPMN/2.0");
- addHandler("process", new ProcessHandler());
-
- addHandler("property", new PropertyHandler());
+ addHandler("process", new ProcessHandler());
+
+ addHandler("property", new PropertyHandler());
+ addHandler("lane", new LaneHandler());
- addHandler("startEvent", new StartEventHandler());
- addHandler("endEvent", new EndEventHandler());
- addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
- addHandler("parallelGateway", new ParallelGatewayHandler());
- addHandler("complexGateway", new ComplexGatewayHandler());
- addHandler("scriptTask", new ScriptTaskHandler());
- addHandler("task", new TaskHandler());
- addHandler("userTask", new UserTaskHandler());
- addHandler("businessRuleTask", new BusinessRuleTaskHandler());
- addHandler("callActivity", new CallActivityHandler());
- addHandler("subProcess", new SubProcessHandler());
- addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
+ addHandler("startEvent", new StartEventHandler());
+ addHandler("endEvent", new EndEventHandler());
+ addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+ addHandler("parallelGateway", new ParallelGatewayHandler());
+ addHandler("complexGateway", new ComplexGatewayHandler());
+ addHandler("scriptTask", new ScriptTaskHandler());
+ addHandler("task", new TaskHandler());
+ addHandler("userTask", new UserTaskHandler());
+ addHandler("manualTask", new ManualTaskHandler());
+ addHandler("serviceTask", new ServiceTaskHandler());
+ addHandler("sendTask", new SendTaskHandler());
+ addHandler("receiveTask", new ReceiveTaskHandler());
+ addHandler("businessRuleTask", new BusinessRuleTaskHandler());
+ addHandler("callActivity", new CallActivityHandler());
+ addHandler("subProcess", new SubProcessHandler());
+ addHandler("adHocSubProcess", new AdHocSubProcessHandler());
+ addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
- addHandler("sequenceFlow", new SequenceFlowHandler());
-
- handlersByClass.put(Split.class, new SplitHandler());
- handlersByClass.put(Join.class, new JoinHandler());
+ addHandler("sequenceFlow", new SequenceFlowHandler());
+
+ addHandler("itemDefinition", new ItemDefinitionHandler());
+ addHandler("message", new MessageHandler());
+ addHandler("interface", new InterfaceHandler());
+ addHandler("operation", new OperationHandler());
+ addHandler("inMessageRef", new InMessageRefHandler());
+
+ handlersByClass.put(Split.class, new SplitHandler());
+ handlersByClass.put(Join.class, new JoinHandler());
+ handlersByClass.put(EventNode.class, new EventNodeHandler());
+ handlersByClass.put(TimerNode.class, new TimerNodeHandler());
+ handlersByClass.put(EndNode.class, new EndNodeHandler());
+ handlersByClass.put(FaultNode.class, new FaultNodeHandler());
+ handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,13 +1,20 @@
package org.drools.bpmn2.xml;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.FaultNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
public class EndEventHandler extends AbstractNodeHandler {
protected Node createNode(Attributes attrs) {
- return new EndNode();
+ EndNode node = new EndNode();
+ node.setTerminate(false);
+ return node;
}
@SuppressWarnings("unchecked")
@@ -15,10 +22,69 @@
return EndNode.class;
}
- public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- EndNode endNode = (EndNode) node;
- writeNode("endEvent", endNode, xmlDump, includeMeta);
- endNode(xmlDump);
- }
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ final Element element = parser.endElementBuilder();
+ Node node = (Node) parser.getCurrent();
+ // determine type of event definition, so the correct type of node
+ // can be generated
+ super.handleNode(node, element, uri, localName, parser);
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("terminateEventDefinition".equals(nodeName)) {
+ // reuse already create EventNode
+ handleTerminateNode(node, element, uri, localName, parser);
+ break;
+ } else if ("errorEventDefinition".equals(nodeName)) {
+ // create new timerNode
+ FaultNode faultNode = new FaultNode();
+ faultNode.setId(node.getId());
+ faultNode.setName(node.getName());
+ node = faultNode;
+ super.handleNode(node, element, uri, localName, parser);
+ handleErrorNode(node, element, uri, localName, parser);
+ break;
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+ nodeContainer.addNode(node);
+ return node;
+ }
+
+ public void handleTerminateNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ ((EndNode) node).setTerminate(true);
+ }
+
+ public void handleErrorNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ FaultNode faultNode = (FaultNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataInputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, faultNode);
+ } else if ("errorEventDefinition".equals(nodeName)) {
+ String faultName = ((Element) xmlNode).getAttribute("errorCode");
+ if (faultName != null && faultName.trim().length() > 0) {
+ faultNode.setFaultName(faultName);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, FaultNode faultNode) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ String faultVariable = subNode.getTextContent();
+ faultNode.setFaultVariable(faultVariable);
+ }
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException("Writing out should be handled by specific handlers");
+ }
+
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.EndNode;
+import org.xml.sax.Attributes;
+
+public class EndNodeHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by end event handler");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return EndNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ EndNode endNode = (EndNode) node;
+ writeNode("endEvent", endNode, xmlDump, includeMeta);
+ if (endNode.isTerminate()) {
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <terminateEventDefinition/>" + EOL);
+ endNode("endEvent", xmlDump);
+ } else {
+ endNode(xmlDump);
+ }
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,42 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.EventNode;
+import org.xml.sax.Attributes;
+
+public class EventNodeHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by intermediate catch event handler");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return EventNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ EventNode eventNode = (EventNode) node;
+ writeNode("intermediateCatchEvent", eventNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ if (eventNode.getVariableName() != null) {
+ xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL);
+ xmlDump.append(" <dataOutputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
+ " <targetRef>" + eventNode.getVariableName() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataOutputAssociation>" + EOL);
+ xmlDump.append(" <outputSet>" + EOL);
+ xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL);
+ xmlDump.append(" </outputSet>" + EOL);
+ }
+ if (eventNode.getEventFilters().size() > 0) {
+ String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
+ xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+
+ }
+ endNode("intermediateCatchEvent", xmlDump);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,37 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.FaultNode;
+import org.xml.sax.Attributes;
+
+public class FaultNodeHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by end event handler");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return FaultNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ FaultNode faultNode = (FaultNode) node;
+ writeNode("endEvent", faultNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ if (faultNode.getFaultVariable() != null) {
+ xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input\" name=\"error\" />" + EOL);
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + faultNode.getFaultVariable() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ xmlDump.append(" <inputSet>" + EOL);
+ xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</dataInputRefs>" + EOL);
+ xmlDump.append(" </inputSet>" + EOL);
+ }
+ xmlDump.append(" <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+ endNode("endEvent", xmlDump);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InMessageRefHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,61 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+import java.util.Map;
+
+import org.drools.bpmn2.core.Message;
+import org.drools.bpmn2.core.Interface.Operation;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class InMessageRefHandler extends BaseAbstractHandler implements Handler {
+
+ @SuppressWarnings("unchecked")
+ public InMessageRefHandler() {
+ if ((this.validParents == null) && (this.validPeers == null)) {
+ this.validParents = new HashSet();
+ this.validParents.add(Operation.class);
+
+ this.validPeers = new HashSet();
+ this.validPeers.add(null);
+
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+ return null;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ Element element = parser.endElementBuilder();
+ String messageId = element.getTextContent();
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageId);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageId);
+ }
+ Operation operation = (Operation) parser.getParent();
+ operation.setMessage(message);
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return Message.class;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InterfaceHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,65 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.Message;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class InterfaceHandler extends BaseAbstractHandler implements Handler {
+
+ @SuppressWarnings("unchecked")
+ public InterfaceHandler() {
+ if ((this.validParents == null) && (this.validPeers == null)) {
+ this.validParents = new HashSet();
+ this.validParents.add(null);
+
+ this.validPeers = new HashSet();
+ this.validPeers.add(null);
+ this.validPeers.add(ItemDefinition.class);
+ this.validPeers.add(Message.class);
+ this.validPeers.add(Interface.class);
+
+ this.allowNesting = false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ String id = attrs.getValue("id");
+ String name = attrs.getValue("name");
+
+ ProcessBuildData buildData = (ProcessBuildData) parser.getData();
+ List<Interface> interfaces = (List<Interface>) buildData.getMetaData("Interfaces");
+ if (interfaces == null) {
+ interfaces = new ArrayList<Interface>();
+ buildData.setMetaData("Interfaces", interfaces);
+ }
+ Interface i = new Interface(id, name);
+ interfaces.add(i);
+ return i;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return Interface.class;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -5,8 +5,11 @@
import org.drools.process.core.event.EventFilter;
import org.drools.process.core.event.EventTypeFilter;
+import org.drools.process.core.timer.Timer;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.TimerNode;
import org.drools.xml.ExtensibleXmlParser;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
@@ -23,29 +26,83 @@
return EventNode.class;
}
- protected void handleNode(final Node node, final Element element, final String uri,
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ final Element element = parser.endElementBuilder();
+ Node node = (Node) parser.getCurrent();
+ // determine type of event definition, so the correct type of node
+ // can be generated
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("signalEventDefinition".equals(nodeName)) {
+ // reuse already create EventNode
+ handleSignalNode(node, element, uri, localName, parser);
+ break;
+ } else if ("timerEventDefinition".equals(nodeName)) {
+ // create new timerNode
+ TimerNode timerNode = new TimerNode();
+ timerNode.setId(node.getId());
+ timerNode.setName(node.getName());
+ node = timerNode;
+ handleTimerNode(node, element, uri, localName, parser);
+ break;
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+ nodeContainer.addNode(node);
+ return node;
+ }
+
+ protected void handleSignalNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser) throws SAXException {
- super.handleNode(node, element, uri, localName, parser);
- EventNode eventNode = (EventNode) node;
- org.w3c.dom.Node xmlNode = element.getFirstChild();
+ super.handleNode(node, element, uri, localName, parser);
+ EventNode eventNode = (EventNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
while (xmlNode != null) {
- String nodeName = xmlNode.getNodeName();
- if ("dataOutputAssociation".equals(nodeName)) {
- readDataOutputAssociation(xmlNode, eventNode);
- } else if ("signalEventDefinition".equals(nodeName)) {
- String type = ((Element) xmlNode).getAttribute("signalRef");
- if (type != null && type.trim().length() > 0) {
- List<EventFilter> eventFilters = new ArrayList<EventFilter>();
- EventTypeFilter eventFilter = new EventTypeFilter();
- eventFilter.setType(type);
- eventFilters.add(eventFilter);
+ String nodeName = xmlNode.getNodeName();
+ if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, eventNode);
+ } else if ("signalEventDefinition".equals(nodeName)) {
+ String type = ((Element) xmlNode).getAttribute("signalRef");
+ if (type != null && type.trim().length() > 0) {
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType(type);
+ eventFilters.add(eventFilter);
eventNode.setEventFilters(eventFilters);
- }
- }
- xmlNode = xmlNode.getNextSibling();
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
}
- }
+ }
+ protected void handleTimerNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ TimerNode timerNode = (TimerNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("timerEventDefinition".equals(nodeName)) {
+ Timer timer = new Timer();
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ while (subNode instanceof Element) {
+ String subNodeName = subNode.getNodeName();
+ if ("timeCycle".equals(subNodeName)) {
+ String period = subNode.getTextContent();
+ timer.setDelay(period);
+ break;
+ }
+ subNode = subNode.getNextSibling();
+ }
+ timerNode.setTimer(timer);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, EventNode eventNode) {
// sourceRef
org.w3c.dom.Node subNode = xmlNode.getFirstChild();
@@ -56,26 +113,7 @@
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- EventNode eventNode = (EventNode) node;
- writeNode("intermediateCatchEvent", eventNode, xmlDump, includeMeta);
- xmlDump.append(">" + EOL);
- if (eventNode.getVariableName() != null) {
- xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL);
- xmlDump.append(" <dataOutputAssociation>" + EOL);
- xmlDump.append(
- " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
- " <targetRef>" + eventNode.getVariableName() + "</targetRef>" + EOL);
- xmlDump.append(" </dataOutputAssociation>" + EOL);
- xmlDump.append(" <outputSet>" + EOL);
- xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL);
- xmlDump.append(" </outputSet>" + EOL);
- }
- if (eventNode.getEventFilters().size() > 0) {
- String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
- xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
-
- }
- endNode("intermediateCatchEvent", xmlDump);
- }
+ throw new IllegalArgumentException("Writing out should be handled by specific handlers");
+ }
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ItemDefinitionHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,63 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ItemDefinitionHandler extends BaseAbstractHandler implements Handler {
+
+ @SuppressWarnings("unchecked")
+ public ItemDefinitionHandler() {
+ if ((this.validParents == null) && (this.validPeers == null)) {
+ this.validParents = new HashSet();
+ this.validParents.add(null);
+
+ this.validPeers = new HashSet();
+ this.validPeers.add(null);
+ this.validPeers.add(ItemDefinition.class);
+
+ this.allowNesting = false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ String id = attrs.getValue("id");
+ String type = attrs.getValue("structureRef");
+
+ ProcessBuildData buildData = (ProcessBuildData) parser.getData();
+ Map<String, ItemDefinition> itemDefintions = (Map<String, ItemDefinition>)
+ ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
+ if (itemDefintions == null) {
+ itemDefintions = new HashMap<String, ItemDefinition>();
+ buildData.setMetaData("ItemDefinitions", itemDefintions);
+ }
+ ItemDefinition itemDefinition = new ItemDefinition(id);
+ itemDefinition.setStructureRef(type);
+ itemDefintions.put(id, itemDefinition);
+ return itemDefinition;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return ItemDefinition.class;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/LaneHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,78 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+
+import org.drools.bpmn2.core.Lane;
+import org.drools.definition.process.WorkflowProcess;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class LaneHandler extends BaseAbstractHandler implements Handler {
+
+ public static final String LANES = "BPMN.Lanes";
+
+ @SuppressWarnings("unchecked")
+ public LaneHandler() {
+ if ((this.validParents == null) && (this.validPeers == null)) {
+ this.validParents = new HashSet();
+ this.validParents.add(RuleFlowProcess.class);
+
+ this.validPeers = new HashSet();
+ this.validPeers.add(null);
+
+ this.allowNesting = false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ String id = attrs.getValue("id");
+ String name = attrs.getValue("name");
+
+ WorkflowProcess process = (WorkflowProcess) parser.getParent();
+
+ List<Lane> lanes = (List<Lane>)
+ ((RuleFlowProcess) process).getMetaData(LaneHandler.LANES);
+ if (lanes == null) {
+ lanes = new ArrayList<Lane>();
+ ((RuleFlowProcess) process).setMetaData(LaneHandler.LANES, lanes);
+ }
+ Lane lane = new Lane(id);
+ lane.setName(name);
+ lanes.add(lane);
+ return lane;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ final Element element = parser.endElementBuilder();
+ Lane lane = (Lane) parser.getCurrent();
+
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("flowElementRef".equals(nodeName)) {
+ String flowElementRef = xmlNode.getTextContent();
+ lane.addFlowElement(flowElementRef);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ return lane;
+ }
+
+ public Class<?> generateNodeFor() {
+ return Lane.class;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ManualTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,26 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+
+public class ManualTaskHandler extends TaskHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new WorkItemNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Node.class;
+ }
+
+ protected String getTaskName(final Element element) {
+ return "Manual Task";
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/MessageHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,75 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.Message;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class MessageHandler extends BaseAbstractHandler implements Handler {
+
+ @SuppressWarnings("unchecked")
+ public MessageHandler() {
+ if ((this.validParents == null) && (this.validPeers == null)) {
+ this.validParents = new HashSet();
+ this.validParents.add(null);
+
+ this.validPeers = new HashSet();
+ this.validPeers.add(null);
+ this.validPeers.add(ItemDefinition.class);
+ this.validPeers.add(Message.class);
+
+ this.allowNesting = false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ String id = attrs.getValue("id");
+ String structureRef = attrs.getValue("structureRef");
+
+ Map<String, ItemDefinition> itemDefinitions = (Map<String, ItemDefinition>)
+ ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
+ if (itemDefinitions == null) {
+ throw new IllegalArgumentException("No item definitions found");
+ }
+ ItemDefinition itemDefinition = itemDefinitions.get(structureRef);
+ if (itemDefinition == null) {
+ throw new IllegalArgumentException("Could not find itemDefinition " + structureRef);
+ }
+
+ ProcessBuildData buildData = (ProcessBuildData) parser.getData();
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ messages = new HashMap<String, Message>();
+ buildData.setMetaData("Messages", messages);
+ }
+ Message message = new Message(id);
+ message.setType(itemDefinition.getStructureRef());
+ messages.put(id, message);
+ return message;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return Message.class;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/OperationHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,51 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.Interface.Operation;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class OperationHandler extends BaseAbstractHandler implements Handler {
+
+ @SuppressWarnings("unchecked")
+ public OperationHandler() {
+ if ((this.validParents == null) && (this.validPeers == null)) {
+ this.validParents = new HashSet();
+ this.validParents.add(Interface.class);
+
+ this.validPeers = new HashSet();
+ this.validPeers.add(null);
+
+ this.allowNesting = false;
+ }
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ String id = attrs.getValue("id");
+ String name = attrs.getValue("name");
+
+ Interface i = (Interface) parser.getParent();
+ Operation operation = i.addOperation(id, name);
+ return operation;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return Operation.class;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ParallelGatewayHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -29,13 +29,7 @@
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- writeNode("exclusiveGateway", node, xmlDump, includeMeta);
- if (node instanceof Split) {
- xmlDump.append("gatewayDirection=\"diverging\" ");
- } else if (node instanceof Join) {
- xmlDump.append("gatewayDirection=\"converging\" ");
- }
- endNode(xmlDump);
+ throw new IllegalArgumentException("Writing out should be handled by split / join handler");
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,11 +1,19 @@
package org.drools.bpmn2.xml;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.Lane;
+import org.drools.bpmn2.core.Message;
import org.drools.bpmn2.core.SequenceFlow;
import org.drools.definition.process.Node;
import org.drools.definition.process.NodeContainer;
+import org.drools.process.core.context.swimlane.Swimlane;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Connection;
import org.drools.workflow.core.Constraint;
@@ -13,6 +21,7 @@
import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.ConstraintImpl;
import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.HumanTaskNode;
import org.drools.workflow.core.node.Split;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
@@ -32,6 +41,9 @@
this.validParents.add(null);
this.validPeers = new HashSet();
+ this.validPeers.add(Interface.class);
+ this.validPeers.add(Message.class);
+ this.validPeers.add(ItemDefinition.class);
this.validPeers.add(null);
this.allowNesting = false;
@@ -43,11 +55,15 @@
throws SAXException {
parser.startElementBuilder(localName, attrs);
- final String id = attrs.getValue("id");
- final String name = attrs.getValue("name");
+ String id = attrs.getValue("id");
+ String name = attrs.getValue("name");
RuleFlowProcess process = new RuleFlowProcess();
+ process.setAutoComplete(true);
process.setId(id);
+ if (name == null) {
+ name = id;
+ }
process.setName(name);
process.setType("RuleFlow");
process.setPackageName("org.drools.bpmn2");
@@ -64,6 +80,9 @@
List<SequenceFlow> connections = (List<SequenceFlow>)
process.getMetaData(CONNECTIONS);
linkConnections(process, connections);
+ List<Lane> lanes = (List<Lane>)
+ process.getMetaData(LaneHandler.LANES);
+ assignLanes(process, lanes);
return process;
}
@@ -76,14 +95,38 @@
for (SequenceFlow connection: connections) {
String sourceRef = connection.getSourceRef();
String targetRef = connection.getTargetRef();
- // remove starting _
- sourceRef = sourceRef.substring(1);
- targetRef = targetRef.substring(1);
- // remove ids of parent nodes
- sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
- targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
- Node source = nodeContainer.getNode(new Integer(sourceRef));
- Node target = nodeContainer.getNode(new Integer(targetRef));
+ Node source = null;
+ Node target = null;
+ try {
+ // remove starting _
+ sourceRef = sourceRef.substring(1);
+ targetRef = targetRef.substring(1);
+ // remove ids of parent nodes
+ sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
+ targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
+ source = nodeContainer.getNode(new Integer(sourceRef));
+ target = nodeContainer.getNode(new Integer(targetRef));
+ } catch (NumberFormatException e) {
+ // try looking for a node with same "UniqueId" (in metadata)
+ for (Node node: nodeContainer.getNodes()) {
+ if (connection.getSourceRef().equals(node.getMetaData("UniqueId"))) {
+ source = node;
+ break;
+ }
+ }
+ for (Node node: nodeContainer.getNodes()) {
+ if (connection.getTargetRef().equals(node.getMetaData("UniqueId"))) {
+ target = node;
+ break;
+ }
+ }
+ if (source == null) {
+ throw new IllegalArgumentException("Could not find source node for connection:" + sourceRef);
+ }
+ if (target == null) {
+ throw new IllegalArgumentException("Could not find target node for connection:" + targetRef);
+ }
+ }
Connection result = new ConnectionImpl(
source, NodeImpl.CONNECTION_DEFAULT_TYPE,
target, NodeImpl.CONNECTION_DEFAULT_TYPE);
@@ -112,5 +155,46 @@
}
}
}
+
+ private void assignLanes(RuleFlowProcess process, List<Lane> lanes) {
+ List<String> laneNames = new ArrayList<String>();
+ Map<String, String> laneMapping = new HashMap<String, String>();
+ if (lanes != null) {
+ for (Lane lane: lanes) {
+ String name = lane.getName();
+ if (name != null) {
+ Swimlane swimlane = new Swimlane();
+ swimlane.setName(name);
+ process.getSwimlaneContext().addSwimlane(swimlane);
+ laneNames.add(name);
+ for (String flowElementRef: lane.getFlowElements()) {
+ laneMapping.put(flowElementRef, name);
+ }
+ }
+ }
+ }
+ assignLanes(process, laneMapping);
+ }
+
+ private void assignLanes(NodeContainer nodeContainer, Map<String, String> laneMapping) {
+ for (Node node: nodeContainer.getNodes()) {
+ String lane = null;
+ String uniqueId = (String) node.getMetaData("UniqueId");
+ if (uniqueId != null) {
+ lane = laneMapping.get(uniqueId);
+ } else {
+ lane = laneMapping.get(((NodeImpl) node).getUniqueId());
+ }
+ if (lane != null) {
+ ((NodeImpl) node).setMetaData("Lane", lane);
+ if (node instanceof HumanTaskNode) {
+ ((HumanTaskNode) node).setSwimlane(lane);
+ }
+ }
+ if (node instanceof NodeContainer) {
+ assignLanes((NodeContainer) node, laneMapping);
+ }
+ }
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -4,7 +4,6 @@
import java.util.List;
import org.drools.bpmn2.core.SequenceFlow;
-import org.drools.definition.process.WorkflowProcess;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.datatype.impl.type.ObjectDataType;
import org.drools.ruleflow.core.RuleFlowProcess;
@@ -45,7 +44,7 @@
parser.startElementBuilder(localName, attrs);
final String id = attrs.getValue("id");
- final String itemSubjectRef = attrs.getValue("itemSubjectRef");
+// final String itemSubjectRef = attrs.getValue("itemSubjectRef");
Object parent = parser.getParent();
if (parent instanceof RuleFlowProcess) {
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,50 @@
+package org.drools.bpmn2.xml;
+
+import java.util.Map;
+
+import org.drools.bpmn2.core.Message;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ReceiveTaskHandler extends TaskHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new WorkItemNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Node.class;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ WorkItemNode workItemNode = (WorkItemNode) node;
+ String messageRef = element.getAttribute("messageRef");
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageRef);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageRef);
+ }
+ workItemNode.getWork().setParameter("MessageType", message.getType());
+ }
+
+ protected String getTaskName(final Element element) {
+ return "Receive Task";
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+ }
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,50 @@
+package org.drools.bpmn2.xml;
+
+import java.util.Map;
+
+import org.drools.bpmn2.core.Message;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class SendTaskHandler extends TaskHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new WorkItemNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Node.class;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ WorkItemNode workItemNode = (WorkItemNode) node;
+ String messageRef = element.getAttribute("messageRef");
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageRef);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageRef);
+ }
+ workItemNode.getWork().setParameter("MessageType", message.getType());
+ }
+
+ protected String getTaskName(final Element element) {
+ return "Send Task";
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+ }
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -91,6 +91,10 @@
sequenceFlow.setLanguage("java");
} else if (XmlBPMNProcessDumper.RULE_LANGUAGE.equals(language)) {
sequenceFlow.setType("rule");
+ } else if (XmlBPMNProcessDumper.XPATH_LANGUAGE.equals(language)) {
+ sequenceFlow.setLanguage("XPath");
+ } else {
+ throw new IllegalArgumentException("Unknown language " + language);
}
}
org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
@@ -102,7 +106,7 @@
}
xmlNode = xmlNode.getNextSibling();
}
- return parser.getCurrent();
+ return sequenceFlow;
}
public Class<?> generateNodeFor() {
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ServiceTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,60 @@
+package org.drools.bpmn2.xml;
+
+import java.util.List;
+
+import org.drools.bpmn2.core.Interface;
+import org.drools.bpmn2.core.Interface.Operation;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ServiceTaskHandler extends TaskHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new WorkItemNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Node.class;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ WorkItemNode workItemNode = (WorkItemNode) node;
+ String operationRef = element.getAttribute("operationRef");
+ List<Interface> interfaces = (List<Interface>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Interfaces");
+ if (interfaces == null) {
+ throw new IllegalArgumentException("No interfaces found");
+ }
+ Operation operation = null;
+ for (Interface i: interfaces) {
+ operation = i.getOperation(operationRef);
+ if (operation != null) {
+ break;
+ }
+ }
+ if (operation == null) {
+ throw new IllegalArgumentException("Could not find operation " + operationRef);
+ }
+ workItemNode.getWork().setParameter("Interface", operation.getInterface().getName());
+ workItemNode.getWork().setParameter("Operation", operation.getName());
+ workItemNode.getWork().setParameter("ParameterType", operation.getMessage().getType());
+ }
+
+ protected String getTaskName(final Element element) {
+ return "Service Task";
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -20,14 +20,14 @@
@SuppressWarnings("unchecked")
public Class generateNodeFor() {
- return WorkItemNode.class;
+ return Node.class;
}
protected void handleNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser) throws SAXException {
super.handleNode(node, element, uri, localName, parser);
WorkItemNode workItemNode = (WorkItemNode) node;
- String name = element.getAttribute("taskName");
+ String name = getTaskName(element);
Work work = new WorkImpl();
work.setName(name);
workItemNode.setWork(work);
@@ -47,6 +47,10 @@
}
}
+ protected String getTaskName(final Element element) {
+ return element.getAttribute("taskName");
+ }
+
protected void readIoSpecification(org.w3c.dom.Node xmlNode, Map<String, String> dataInputs, Map<String, String> dataOutputs) {
org.w3c.dom.Node subNode = xmlNode.getFirstChild();
while (subNode instanceof Element) {
@@ -95,79 +99,10 @@
workItemNode.addOutMapping(dataOutputs.get(from), to);
}
- public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- WorkItemNode workItemNode = (WorkItemNode) node;
- writeNode("task", workItemNode, xmlDump, includeMeta);
- xmlDump.append("tns:taskName=\"" + workItemNode.getWork().getName() + "\" >" + EOL);
- writeIO(workItemNode, xmlDump);
- endNode("task", xmlDump);
- }
-
- protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
- xmlDump.append(" <ioSpecification>" + EOL);
- for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
- xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
- }
- for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
- if (entry.getValue() != null) {
- xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
- }
- }
- for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
- xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
- }
- xmlDump.append(" <inputSet>" + EOL);
- for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
- xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
- }
- for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
- if (entry.getValue() != null) {
- xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
- }
- }
- xmlDump.append(
- " </inputSet>" + EOL);
- xmlDump.append(" <outputSet>" + EOL);
- for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
- xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
- }
- xmlDump.append(
- " </outputSet>" + EOL);
- xmlDump.append(
- " </ioSpecification>" + EOL);
- for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
- if (entry.getValue() != null) {
- xmlDump.append(
- " <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
- }
- }
- for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
- xmlDump.append(" <dataInputAssociation>" + EOL);
- xmlDump.append(
- " <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
- " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
- xmlDump.append(" </dataInputAssociation>" + EOL);
- }
- for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
- if (entry.getValue() != null) {
- xmlDump.append(" <dataInputAssociation>" + EOL);
- xmlDump.append(
- " <assignment>" + EOL +
- " <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
- " <to xs:type=\"tFormalExpression\">_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</to>" + EOL +
- " </assignment>" + EOL +
- " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
- " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
- xmlDump.append(" </dataInputAssociation>" + EOL);
- }
- }
- for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
- xmlDump.append(" <dataOutputAssociation>" + EOL);
- xmlDump.append(
- " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
- " <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
- xmlDump.append(" </dataOutputAssociation>" + EOL);
- }
- }
+ @Override
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException(
+ "Writing out should be handled by the WorkItemNodeHandler");
+ }
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TimerNodeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.TimerNode;
+import org.xml.sax.Attributes;
+
+public class TimerNodeHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by intermediate catch event handler");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return TimerNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ TimerNode timerNode = (TimerNode) node;
+ writeNode("intermediateCatchEvent", timerNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <timerEventDefinition>" + EOL);
+ if (timerNode.getTimer() != null && timerNode.getTimer().getDelay() != null) {
+ xmlDump.append(" <timeCycle>" + timerNode.getTimer().getDelay() + "</timeCycle>" + EOL);
+ }
+ xmlDump.append(" </timerEventDefinition>" + EOL);
+ endNode("intermediateCatchEvent", xmlDump);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/UserTaskHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -66,7 +66,7 @@
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
HumanTaskNode humanTaskNode = (HumanTaskNode) node;
writeNode("userTask", humanTaskNode, xmlDump, includeMeta);
- xmlDump.append(">" + EOL);
+ xmlDump.append("implementation=\"humanTaskWebService\" >" + EOL);
writeIO(humanTaskNode, xmlDump);
String ownerString = (String) humanTaskNode.getWork().getParameter("ActorId");
if (ownerString != null) {
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,189 @@
+package org.drools.bpmn2.xml;
+
+import java.util.Map;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.WorkItemNode;
+import org.xml.sax.Attributes;
+
+public class WorkItemNodeHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by specific handlers");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return WorkItemNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ WorkItemNode workItemNode = (WorkItemNode) node;
+ String type = workItemNode.getWork().getName();
+ if ("Manual Task".equals(type)) {
+ writeNode("manualTask", workItemNode, xmlDump, includeMeta);
+ endNode(xmlDump);
+ return;
+ }
+ if ("Service Task".equals(type)) {
+ writeNode("serviceTask", workItemNode, xmlDump, includeMeta);
+ xmlDump.append("operationRef=\"_" +
+ XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_ServiceOperation\" implementation=\"Other\" >" + EOL);
+ xmlDump.append(
+ " <ioSpecification>" + EOL +
+ " <dataInput id=\"_2_param\" name=\"Parameter\" />" + EOL +
+ " <dataOutput id=\"_2_result\" name=\"Result\" />" + EOL +
+ " <inputSet>" + EOL +
+ " <dataInputRefs>_2_param</dataInputRefs>" + EOL +
+ " </inputSet>" + EOL +
+ " <outputSet>" + EOL +
+ " <dataOutputRefs>_2_result</dataOutputRefs>" + EOL +
+ " </outputSet>" + EOL +
+ " </ioSpecification>" + EOL);
+ String inMapping = workItemNode.getInMapping("Parameter");
+ if (inMapping != null) {
+ xmlDump.append(
+ " <dataInputAssociation>" + EOL +
+ " <sourceRef>" + inMapping + "</sourceRef>" + EOL +
+ " <targetRef>_2_param</targetRef>" + EOL +
+ " </dataInputAssociation>" + EOL);
+ }
+ String outMapping = workItemNode.getOutMapping("Result");
+ if (outMapping != null) {
+ xmlDump.append(
+ " <dataOutputAssociation>" + EOL +
+ " <sourceRef>_2_result</sourceRef>" + EOL +
+ " <targetRef>" + outMapping + "</targetRef>" + EOL +
+ " </dataOutputAssociation>" + EOL);
+ }
+ endNode("serviceTask", xmlDump);
+ return;
+ }
+ if ("Send Task".equals(type)) {
+ writeNode("sendTask", workItemNode, xmlDump, includeMeta);
+ xmlDump.append("messageRef=\"_" +
+ XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+ xmlDump.append(
+ " <ioSpecification>" + EOL +
+ " <dataInput id=\"_2_param\" name=\"Message\" />" + EOL +
+ " <inputSet>" + EOL +
+ " <dataInputRefs>_2_param</dataInputRefs>" + EOL +
+ " </inputSet>" + EOL +
+ " <outputSet/>" + EOL +
+ " </ioSpecification>" + EOL);
+ String inMapping = workItemNode.getInMapping("Message");
+ if (inMapping != null) {
+ xmlDump.append(
+ " <dataInputAssociation>" + EOL +
+ " <sourceRef>" + inMapping + "</sourceRef>" + EOL +
+ " <targetRef>_2_param</targetRef>" + EOL +
+ " </dataInputAssociation>" + EOL);
+ }
+ endNode("sendTask", xmlDump);
+ return;
+ }
+ if ("Receive Task".equals(type)) {
+ writeNode("receiveTask", workItemNode, xmlDump, includeMeta);
+ xmlDump.append("messageRef=\"_" +
+ XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+ xmlDump.append(
+ " <ioSpecification>" + EOL +
+ " <dataOutput id=\"_2_result\" name=\"Message\" />" + EOL +
+ " <inputSet/>" + EOL +
+ " <outputSet>" + EOL +
+ " <dataOutputRefs>_2_result</dataOutputRefs>" + EOL +
+ " </outputSet>" + EOL +
+ " </ioSpecification>" + EOL);
+ String outMapping = workItemNode.getOutMapping("Message");
+ if (outMapping != null) {
+ xmlDump.append(
+ " <dataOutputAssociation>" + EOL +
+ " <sourceRef>_2_result</sourceRef>" + EOL +
+ " <targetRef>" + outMapping + "</targetRef>" + EOL +
+ " </dataOutputAssociation>" + EOL);
+ }
+ endNode("receiveTask", xmlDump);
+ return;
+ }
+ writeNode("task", workItemNode, xmlDump, includeMeta);
+ xmlDump.append("tns:taskName=\"" + type + "\" >" + EOL);
+ writeIO(workItemNode, xmlDump);
+ endNode("task", xmlDump);
+ }
+
+ protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
+ xmlDump.append(" <ioSpecification>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ }
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ xmlDump.append(" <inputSet>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ }
+ xmlDump.append(
+ " </inputSet>" + EOL);
+ xmlDump.append(" <outputSet>" + EOL);
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+ }
+ xmlDump.append(
+ " </outputSet>" + EOL);
+ xmlDump.append(
+ " </ioSpecification>" + EOL);
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(
+ " <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
+ }
+ }
+ writeInputAssociation(workItemNode, xmlDump);
+ writeOutputAssociation(workItemNode, xmlDump);
+ }
+
+ protected void writeInputAssociation(WorkItemNode workItemNode, StringBuilder xmlDump) {
+ for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
+ if (entry.getValue() != null) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <assignment>" + EOL +
+ " <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
+ " <to xs:type=\"tFormalExpression\">_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</to>" + EOL +
+ " </assignment>" + EOL +
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ }
+ }
+
+ protected void writeOutputAssociation(WorkItemNode workItemNode, StringBuilder xmlDump) {
+ for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+ " <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataOutputAssociation>" + EOL);
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,18 +1,26 @@
package org.drools.bpmn2.xml;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
+import org.drools.bpmn2.xpath.XPathDialect;
import org.drools.definition.process.Connection;
import org.drools.definition.process.Node;
import org.drools.definition.process.NodeContainer;
import org.drools.definition.process.WorkflowProcess;
+import org.drools.process.core.Work;
+import org.drools.process.core.context.swimlane.Swimlane;
+import org.drools.process.core.context.swimlane.SwimlaneContext;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.context.variable.VariableScope;
import org.drools.rule.builder.dialect.java.JavaDialect;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.HumanTaskNode;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.Handler;
import org.drools.xml.SemanticModule;
import org.drools.xml.XmlDumper;
@@ -21,6 +29,7 @@
public static final String JAVA_LANGUAGE = "http://www.java.com/java";
public static final String RULE_LANGUAGE = "http://www.jboss.org/drools/rule";
+ public static final String XPATH_LANGUAGE = "http://www.w3.org/1999/XPath";
public static XmlBPMNProcessDumper INSTANCE = new XmlBPMNProcessDumper();
@@ -73,8 +82,10 @@
xmlDump.append(
" <resource id=\"Actor\" name=\"Human Actor\" />" + EOL + EOL);
+ visitInterfaces(process, xmlDump);
+
// the process itself
- xmlDump.append(" <process ");
+ xmlDump.append(" <process processType=\"executable\" ");
if (process.getId() != null) {
xmlDump.append("id=\"" + process.getId() + "\" ");
}
@@ -83,6 +94,7 @@
}
// TODO: package, version
xmlDump.append(">" + EOL + EOL);
+ visitLanes(process, xmlDump);
visitHeader(process, xmlDump, includeMeta);
visitNodes(process, xmlDump, includeMeta);
visitConnections(process.getNodes(), xmlDump, includeMeta);
@@ -90,6 +102,41 @@
xmlDump.append("</definitions>");
}
+ private void visitLanes(WorkflowProcess process, StringBuilder xmlDump) {
+ // lanes
+ Collection<Swimlane> swimlanes = ((SwimlaneContext)
+ ((org.drools.workflow.core.WorkflowProcess) process)
+ .getDefaultContext(SwimlaneContext.SWIMLANE_SCOPE)).getSwimlanes();
+ if (!swimlanes.isEmpty()) {
+ xmlDump.append(" <laneSet>" + EOL);
+ for (Swimlane swimlane: swimlanes) {
+ xmlDump.append(" <lane name=\"" + swimlane.getName() + "\" >" + EOL);
+ visitLane(process, swimlane.getName(), xmlDump);
+ xmlDump.append(" </lane>" + EOL);
+ }
+ xmlDump.append(" </laneSet>" + EOL);
+ }
+ }
+
+ private void visitLane(NodeContainer container, String lane, StringBuilder xmlDump) {
+ for (Node node: container.getNodes()) {
+ if (node instanceof HumanTaskNode) {
+ String swimlane = ((HumanTaskNode) node).getSwimlane();
+ if (lane.equals(swimlane)) {
+ xmlDump.append(" <flowElementRef>_" + ((NodeImpl) node).getUniqueId() + "</flowElementRef>" + EOL);
+ }
+ } else {
+ String swimlane = (String) node.getMetaData("Lane");
+ if (lane.equals(swimlane)) {
+ xmlDump.append(" <flowElementRef>_" + ((NodeImpl) node).getUniqueId() + "</flowElementRef>" + EOL);
+ }
+ }
+ if (node instanceof NodeContainer) {
+ visitLane((NodeContainer) node, lane, xmlDump);
+ }
+ }
+ }
+
protected void visitHeader(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
// TODO: imports, function imports
// TODO: globals
@@ -115,6 +162,54 @@
xmlDump.append(EOL);
}
+ protected void visitInterfaces(WorkflowProcess process, StringBuilder xmlDump) {
+ for (Node node: process.getNodes()) {
+ if (node instanceof WorkItemNode) {
+ Work work = ((WorkItemNode) node).getWork();
+ if (work != null) {
+ if ("Service Task".equals(work.getName())) {
+ String interfaceName = (String) work.getParameter("Interface");
+ if (interfaceName == null) {
+ interfaceName = "";
+ }
+ String operationName = (String) work.getParameter("Operation");
+ if (operationName == null) {
+ operationName = "";
+ }
+ String parameterType = (String) work.getParameter("ParameterType");
+ if (parameterType == null) {
+ parameterType = "";
+ }
+ xmlDump.append(
+ " <itemDefinition id=\"_" + getUniqueNodeId(node) + "_InMessageType\" structureRef=\"" + parameterType + "\"/>" + EOL +
+ " <message id=\"_" + getUniqueNodeId(node) + "_InMessage\" structureRef=\"_" + getUniqueNodeId(node) + "_InMessageType\" />" + EOL +
+ " <interface id=\"_" + getUniqueNodeId(node) + "_ServiceInterface\" name=\"" + interfaceName + "\">" + EOL +
+ " <operation id=\"_" + getUniqueNodeId(node) + "_ServiceOperation\" name=\"" + operationName + "\">" + EOL +
+ " <inMessageRef>_" + getUniqueNodeId(node) + "_InMessage</inMessageRef>" + EOL +
+ " </operation>" + EOL +
+ " </interface>" + EOL + EOL);
+ } else if ("Send Task".equals(work.getName())) {
+ String messageType = (String) work.getParameter("MessageType");
+ if (messageType == null) {
+ messageType = "";
+ }
+ xmlDump.append(
+ " <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+ " <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+ } else if ("Receive Task".equals(work.getName())) {
+ String messageType = (String) work.getParameter("MessageType");
+ if (messageType == null) {
+ messageType = "";
+ }
+ xmlDump.append(
+ " <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+ " <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+ }
+ }
+ }
+ }
+ }
+
private void visitNodes(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
xmlDump.append(" <!-- nodes -->" + EOL);
for (Node node: process.getNodes()) {
@@ -161,21 +256,31 @@
Split split = (Split) connection.getFrom();
if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
Constraint constraint = split.getConstraint(connection);
- String constraintString = constraint.getConstraint();
xmlDump.append(">" + EOL +
" <conditionExpression xs:type=\"tFormalExpression\" ");
- if ("code".equals(constraint.getType())) {
- if (JavaDialect.ID.equals(constraint.getDialect())) {
- xmlDump.append(" language=\"" + JAVA_LANGUAGE + "\" ");
- }
+ if (constraint == null) {
+ xmlDump.append("/>");
} else {
- xmlDump.append(" language=\"" + RULE_LANGUAGE + "\" ");
+ if ("code".equals(constraint.getType())) {
+ if (JavaDialect.ID.equals(constraint.getDialect())) {
+ xmlDump.append("language=\"" + JAVA_LANGUAGE + "\" ");
+ } else if (XPathDialect.ID.equals(constraint.getDialect())) {
+ xmlDump.append("language=\"" + XPATH_LANGUAGE + "\" ");
+ }
+ } else {
+ xmlDump.append("language=\"" + RULE_LANGUAGE + "\" ");
+ }
+ if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
+ xmlDump.append("tns:name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
+ }
+ String constraintString = constraint.getConstraint();
+ if (constraintString == null) {
+ constraintString = "";
+ }
+ xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</conditionExpression>");
}
- if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
- xmlDump.append("tns:name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
- }
- xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</conditionExpression>" + EOL +
- " </sequenceFlow>" + EOL);
+ xmlDump.append(EOL
+ + " </sequenceFlow>" + EOL);
} else {
xmlDump.append("/>" + EOL);
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ActivityShapeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,9 @@
+package org.drools.bpmn2.xml.di;
+
+public class ActivityShapeHandler extends ShapeHandler {
+
+ protected String getNodeRefName() {
+ return "activityRef";
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/EventShapeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,27 @@
+package org.drools.bpmn2.xml.di;
+
+import org.drools.xml.ExtensibleXmlParser;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class EventShapeHandler extends ShapeHandler {
+
+ protected String getNodeRefName() {
+ return "eventRef";
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ NodeInfo nodeInfo = (NodeInfo) super.start(
+ uri, localName, attrs, parser);
+ int offsetX = (int) ((nodeInfo.getWidth() - 48) / 2);
+ nodeInfo.setX(nodeInfo.getX() + offsetX);
+ nodeInfo.setWidth(48);
+ int offsetY = (int) ((nodeInfo.getHeight() - 48) / 2);
+ nodeInfo.setY(nodeInfo.getY() + offsetY);
+ nodeInfo.setHeight(48);
+ return nodeInfo;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/GatewayShapeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,27 @@
+package org.drools.bpmn2.xml.di;
+
+import org.drools.xml.ExtensibleXmlParser;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class GatewayShapeHandler extends ShapeHandler {
+
+ protected String getNodeRefName() {
+ return "gatewayRef";
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ NodeInfo nodeInfo = (NodeInfo) super.start(
+ uri, localName, attrs, parser);
+ int offsetX = (int) ((nodeInfo.getWidth() - 48) / 2);
+ nodeInfo.setX(nodeInfo.getX() + offsetX);
+ nodeInfo.setWidth(48);
+ int offsetY = (int) ((nodeInfo.getHeight() - 48) / 2);
+ nodeInfo.setY(nodeInfo.getY() + offsetY);
+ nodeInfo.setHeight(48);
+ return nodeInfo;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ProcessDiagramHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,162 @@
+package org.drools.bpmn2.xml.di;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.bpmn2.xml.di.SequenceFlowConnectorHandler.ConnectionInfo;
+import org.drools.bpmn2.xml.di.ShapeHandler.NodeInfo;
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.drools.xml.ProcessBuildData;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class ProcessDiagramHandler extends BaseAbstractHandler implements Handler {
+
+ public ProcessDiagramHandler() {
+ initValidParents();
+ initValidPeers();
+ this.allowNesting = false;
+ }
+
+ protected void initValidParents() {
+ this.validParents = new HashSet<Class<?>>();
+ this.validParents.add(null);
+ }
+
+ protected void initValidPeers() {
+ this.validPeers = new HashSet<Class<?>>();
+ this.validPeers.add(org.drools.definition.process.Process.class);
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ final String processRef = attrs.getValue("processRef");
+ ProcessInfo info = new ProcessInfo(processRef);
+ return info;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ ProcessInfo processInfo = (ProcessInfo) parser.getCurrent();
+ RuleFlowProcess process = (RuleFlowProcess)
+ ((ProcessBuildData) parser.getData()).getProcess();
+ for (NodeInfo nodeInfo: processInfo.getNodeInfos().values()) {
+ boolean found = false;
+ for (Node node: process.getNodes()) {
+ String id = (String) node.getMetaData("UniqueId");
+ if (nodeInfo.getNodeRef().equals(id)) {
+ found = true;
+ ((org.drools.workflow.core.Node) node).setMetaData("x", nodeInfo.getX());
+ ((org.drools.workflow.core.Node) node).setMetaData("y", nodeInfo.getY());
+ ((org.drools.workflow.core.Node) node).setMetaData("width", nodeInfo.getWidth());
+ ((org.drools.workflow.core.Node) node).setMetaData("height", nodeInfo.getHeight());
+ break;
+ }
+ }
+ if (!found) {
+ throw new IllegalArgumentException(
+ "Could not find node " + nodeInfo.getNodeRef());
+ }
+ }
+ for (ConnectionInfo connectionInfo: processInfo.getConnectionInfos()) {
+ if (connectionInfo.getBendpoints() != null) {
+ NodeInfo sourceNodeInfo = processInfo.getNodeInfo(connectionInfo.getSourceRef());
+ if (sourceNodeInfo == null) {
+ throw new IllegalArgumentException(
+ "Could not find sourceRef for connection info: " + connectionInfo.getSourceRef());
+ }
+ NodeInfo targetNodeInfo = processInfo.getNodeInfo(connectionInfo.getTargetRef());
+ if (targetNodeInfo == null) {
+ throw new IllegalArgumentException(
+ "Could not find sourceRef for connection info: " + connectionInfo.getTargetRef());
+ }
+ Node sourceNode = null;
+ for (Node node: process.getNodes()) {
+ String id = (String) node.getMetaData("UniqueId");
+ if (sourceNodeInfo.getNodeRef().equals(id)) {
+ sourceNode = node;
+ break;
+ }
+ }
+ if (sourceNode == null) {
+ throw new IllegalArgumentException(
+ "Could not find node for nodeRef: " + sourceNodeInfo.getNodeRef());
+ }
+ boolean found = false;
+ for (List<Connection> outgoingConnections: sourceNode.getOutgoingConnections().values()) {
+ for (Connection connection: outgoingConnections) {
+ if (targetNodeInfo.getNodeRef().equals(connection.getTo().getMetaData("UniqueId"))) {
+ ((ConnectionImpl) connection).setMetaData(
+ "bendpoints", connectionInfo.getBendpoints());
+ found = true;
+ break;
+ }
+ }
+ if (found) {
+ break;
+ }
+ }
+ if (!found) {
+ throw new IllegalArgumentException(
+ "Could not find connection from " + sourceNodeInfo.getNodeRef() +
+ " to " + targetNodeInfo.getNodeRef());
+ }
+ }
+ }
+ return processInfo;
+ }
+
+ public Class<?> generateNodeFor() {
+ return ProcessInfo.class;
+ }
+
+ public static class ProcessInfo {
+
+ private String processRef;
+ private Map<String, NodeInfo> nodeInfos = new HashMap<String, NodeInfo>();
+ private List<ConnectionInfo> connectionInfos = new ArrayList<ConnectionInfo>();
+
+ public ProcessInfo(String processRef) {
+ this.processRef = processRef;
+ }
+
+ public String getProcessRef() {
+ return processRef;
+ }
+
+ public void addNodeInfo(NodeInfo nodeInfo) {
+ this.nodeInfos.put(nodeInfo.getId(), nodeInfo);
+ }
+
+ public Map<String, NodeInfo> getNodeInfos() {
+ return nodeInfos;
+ }
+
+ public NodeInfo getNodeInfo(String nodeRef) {
+ return nodeInfos.get(nodeRef);
+ }
+
+ public void addConnectionInfo(ConnectionInfo connectionInfo) {
+ connectionInfos.add(connectionInfo);
+ }
+
+ public List<ConnectionInfo> getConnectionInfos() {
+ return connectionInfos;
+ }
+
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/SequenceFlowConnectorHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,128 @@
+package org.drools.bpmn2.xml.di;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.xml.di.ProcessDiagramHandler.ProcessInfo;
+import org.drools.bpmn2.xml.di.ShapeHandler.NodeInfo;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class SequenceFlowConnectorHandler extends BaseAbstractHandler implements Handler {
+
+ public SequenceFlowConnectorHandler() {
+ initValidParents();
+ initValidPeers();
+ this.allowNesting = false;
+ }
+
+ protected void initValidParents() {
+ this.validParents = new HashSet<Class<?>>();
+ this.validParents.add(ProcessInfo.class);
+ }
+
+ protected void initValidPeers() {
+ this.validPeers = new HashSet<Class<?>>();
+ this.validPeers.add(null);
+ this.validPeers.add(NodeInfo.class);
+ this.validPeers.add(ConnectionInfo.class);
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+
+ final String sequenceFlowRef = attrs.getValue("sequenceFlowRef");
+ ConnectionInfo info = new ConnectionInfo(sequenceFlowRef);
+ final String sourceRef = attrs.getValue("sourceRef");
+ final String targetRef = attrs.getValue("targetRef");
+ info.setSourceRef(sourceRef);
+ info.setTargetRef(targetRef);
+ ProcessInfo processInfo = (ProcessInfo) parser.getParent();
+ processInfo.addConnectionInfo(info);
+ return info;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ Element element = parser.endElementBuilder();
+ // now get bendpoints
+ String bendpoints = null;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode instanceof Element) {
+ String nodeName = xmlNode.getNodeName();
+ if ("bendpoint".equals(nodeName)) {
+ String x = ((Element) xmlNode).getAttribute("x");
+ String y = ((Element) xmlNode).getAttribute("y");
+ try {
+ int xValue = new Float(x).intValue();
+ int yValue = new Float(y).intValue();
+ if (bendpoints == null) {
+ bendpoints = "[";
+ } else {
+ bendpoints += ";";
+ }
+ bendpoints += xValue + "," + yValue;
+ } catch (NumberFormatException e) {
+ throw new IllegalArgumentException("Invalid bendpoint value", e);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ ConnectionInfo connectionInfo = (ConnectionInfo) parser.getCurrent();
+ if (bendpoints != null) {
+ connectionInfo.setBendpoints(bendpoints + "]");
+ }
+ return connectionInfo;
+ }
+
+ public Class<?> generateNodeFor() {
+ return ConnectionInfo.class;
+ }
+
+ public static class ConnectionInfo {
+
+ private String sequenceFlowRef;
+ private String sourceRef;
+ private String targetRef;
+ private String bendpoints;
+
+ public ConnectionInfo(String sequenceFlowRef) {
+ this.sequenceFlowRef = sequenceFlowRef;
+ }
+
+ public String getSequenceFlowRef() {
+ return sequenceFlowRef;
+ }
+
+ public String getSourceRef() {
+ return sourceRef;
+ }
+
+ public void setSourceRef(String sourceRef) {
+ this.sourceRef = sourceRef;
+ }
+
+ public String getTargetRef() {
+ return targetRef;
+ }
+
+ public void setTargetRef(String targetRef) {
+ this.targetRef = targetRef;
+ }
+
+ public String getBendpoints() {
+ return bendpoints;
+ }
+
+ public void setBendpoints(String bendpoints) {
+ this.bendpoints = bendpoints;
+ }
+
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/di/ShapeHandler.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,119 @@
+package org.drools.bpmn2.xml.di;
+
+import java.util.HashSet;
+
+import org.drools.bpmn2.xml.di.ProcessDiagramHandler.ProcessInfo;
+import org.drools.xml.BaseAbstractHandler;
+import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.Handler;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public abstract class ShapeHandler extends BaseAbstractHandler implements Handler {
+
+ public ShapeHandler() {
+ initValidParents();
+ initValidPeers();
+ this.allowNesting = true;
+ }
+
+ protected void initValidParents() {
+ this.validParents = new HashSet<Class<?>>();
+ this.validParents.add(ProcessInfo.class);
+ }
+
+ protected void initValidPeers() {
+ this.validPeers = new HashSet<Class<?>>();
+ this.validPeers.add(null);
+ this.validPeers.add(NodeInfo.class);
+ }
+
+ public Object start(final String uri, final String localName,
+ final Attributes attrs, final ExtensibleXmlParser parser)
+ throws SAXException {
+ parser.startElementBuilder(localName, attrs);
+ final String id = attrs.getValue("id");
+ final String eventRef = attrs.getValue(getNodeRefName());
+ final String height = attrs.getValue("height");
+ final String width = attrs.getValue("width");
+ final String x = attrs.getValue("x");
+ final String y = attrs.getValue("y");
+ NodeInfo nodeInfo = new NodeInfo(id, eventRef);
+ nodeInfo.setX(new Float(x).intValue());
+ nodeInfo.setY(new Float(y).intValue());
+ nodeInfo.setWidth(new Float(width).intValue());
+ nodeInfo.setHeight(new Float(height).intValue());
+ ProcessInfo processInfo = (ProcessInfo) parser.getParent();
+ processInfo.addNodeInfo(nodeInfo);
+ return nodeInfo;
+ }
+
+ protected abstract String getNodeRefName();
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return NodeInfo.class;
+ }
+
+ public static class NodeInfo {
+
+ private String id;
+ private String nodeRef;
+ private Integer x;
+ private Integer y;
+ private Integer width;
+ private Integer height;
+
+ public NodeInfo(String id, String nodeRef) {
+ this.id = id;
+ this.nodeRef = nodeRef;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public String getNodeRef() {
+ return nodeRef;
+ }
+
+ public Integer getX() {
+ return x;
+ }
+
+ public void setX(Integer x) {
+ this.x = x;
+ }
+
+ public Integer getY() {
+ return y;
+ }
+
+ public void setY(Integer y) {
+ this.y = y;
+ }
+
+ public Integer getWidth() {
+ return width;
+ }
+
+ public void setWidth(Integer width) {
+ this.width = width;
+ }
+
+ public Integer getHeight() {
+ return height;
+ }
+
+ public void setHeight(Integer height) {
+ this.height = height;
+ }
+
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialect.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,167 @@
+package org.drools.bpmn2.xpath;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.base.TypeResolver;
+import org.drools.compiler.Dialect;
+import org.drools.io.Resource;
+import org.drools.lang.descr.BaseDescr;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.ProcessDescr;
+import org.drools.lang.descr.RuleDescr;
+import org.drools.rule.builder.AccumulateBuilder;
+import org.drools.rule.builder.ActionBuilder;
+import org.drools.rule.builder.ConsequenceBuilder;
+import org.drools.rule.builder.EnabledBuilder;
+import org.drools.rule.builder.EngineElementBuilder;
+import org.drools.rule.builder.EntryPointBuilder;
+import org.drools.rule.builder.FromBuilder;
+import org.drools.rule.builder.PackageBuildContext;
+import org.drools.rule.builder.PatternBuilder;
+import org.drools.rule.builder.PredicateBuilder;
+import org.drools.rule.builder.ProcessBuildContext;
+import org.drools.rule.builder.ProcessClassBuilder;
+import org.drools.rule.builder.QueryBuilder;
+import org.drools.rule.builder.ReturnValueBuilder;
+import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
+import org.drools.rule.builder.RuleBuildContext;
+import org.drools.rule.builder.RuleClassBuilder;
+import org.drools.rule.builder.RuleConditionBuilder;
+import org.drools.rule.builder.SalienceBuilder;
+
+public class XPathDialect implements Dialect {
+
+ public static final String ID = "XPath";
+
+ private static final XPathReturnValueEvaluatorBuilder RETURN_VALUE_EVALUATOR_BUILDER = new XPathReturnValueEvaluatorBuilder();
+
+ public String getId() {
+ return ID;
+ }
+
+ public String getExpressionDialectName() {
+ return "XPath";
+ }
+
+ public ReturnValueEvaluatorBuilder getReturnValueEvaluatorBuilder() {
+ return RETURN_VALUE_EVALUATOR_BUILDER;
+ }
+
+ public ActionBuilder getActionBuilder() {
+ return null;
+ }
+
+ public void addImport(String importEntry) {
+ }
+
+ public void addProcess(ProcessBuildContext context) {
+ }
+
+ public void addRule(RuleBuildContext context) {
+ }
+
+ public void addStaticImport(String importEntry) {
+ }
+
+ public void compileAll() {
+ }
+
+ public AccumulateBuilder getAccumulateBuilder() {
+ return null;
+ }
+
+ public RuleConditionBuilder getBuilder(Class<?> clazz) {
+ return null;
+ }
+
+ public Map<Class<?>,EngineElementBuilder> getBuilders() {
+ return null;
+ }
+
+ public ConsequenceBuilder getConsequenceBuilder() {
+ return null;
+ }
+
+ public EntryPointBuilder getEntryPointBuilder() {
+ return null;
+ }
+
+ public RuleConditionBuilder getEvalBuilder() {
+ return null;
+ }
+
+ public FromBuilder getFromBuilder() {
+ return null;
+ }
+
+ public PatternBuilder getPatternBuilder() {
+ return null;
+ }
+
+ public PredicateBuilder getPredicateBuilder() {
+ return null;
+ }
+
+ public ProcessClassBuilder getProcessClassBuilder() {
+ return null;
+ }
+
+ public QueryBuilder getQueryBuilder() {
+ return null;
+ }
+
+ public List<?> getResults() {
+ return null;
+ }
+
+ public ReturnValueBuilder getReturnValueBuilder() {
+ return null;
+ }
+
+ public RuleClassBuilder getRuleClassBuilder() {
+ return null;
+ }
+
+ public SalienceBuilder getSalienceBuilder() {
+ return null;
+ }
+
+ public TypeResolver getTypeResolver() {
+ return null;
+ }
+
+ public void init(RuleDescr ruleDescr) {
+ }
+
+ public void init(ProcessDescr processDescr) {
+ }
+
+ public void postCompileAddFunction(FunctionDescr functionDescr,
+ TypeResolver typeResolver) {
+ }
+
+ public void preCompileAddFunction(FunctionDescr functionDescr,
+ TypeResolver typeResolver) {
+ }
+
+ public EnabledBuilder getEnabledBuilder() {
+ return null;
+ }
+
+ public void addFunction(FunctionDescr functionDescr, TypeResolver typeResolver, Resource resource) {
+ }
+
+ public AnalysisResult analyzeBlock(PackageBuildContext context,
+ BaseDescr descr, String text,
+ Map<String, Class<?>>[] availableIdentifiers) {
+ return null;
+ }
+
+ public AnalysisResult analyzeExpression(PackageBuildContext context,
+ BaseDescr descr, Object content,
+ Map<String, Class<?>>[] availableIdentifiers) {
+ return null;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathDialectConfiguration.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,26 @@
+package org.drools.bpmn2.xpath;
+
+import org.drools.compiler.Dialect;
+import org.drools.compiler.DialectConfiguration;
+import org.drools.compiler.PackageBuilder;
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.compiler.PackageRegistry;
+import org.drools.rule.Package;
+
+public class XPathDialectConfiguration implements DialectConfiguration {
+
+ private PackageBuilderConfiguration packageBuilderConfiguration;
+
+ public PackageBuilderConfiguration getPackageBuilderConfiguration() {
+ return packageBuilderConfiguration;
+ }
+
+ public void init(PackageBuilderConfiguration configuration) {
+ this.packageBuilderConfiguration = configuration;
+ }
+
+ public Dialect newDialect(PackageBuilder packageBuilder, PackageRegistry pkgRegistry, Package pkg) {
+ return new XPathDialect();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluator.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,38 @@
+package org.drools.bpmn2.xpath;
+
+import javax.script.Bindings;
+import javax.script.ScriptEngine;
+import javax.script.SimpleBindings;
+
+import org.drools.WorkingMemory;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+import org.drools.spi.ProcessContext;
+import org.drools.spi.ReturnValueEvaluator;
+
+public class XPathReturnValueEvaluator implements ReturnValueEvaluator {
+
+ private static XPathScriptEngineFactory FACTORY = new XPathScriptEngineFactory();
+
+ private String expression;
+
+ public void setExpression(String expression) {
+ this.expression = expression;
+ }
+
+ public Object evaluate(WorkingMemory workingMemory, ProcessContext processContext) throws Exception {
+ ScriptEngine engine = FACTORY.getScriptEngine();
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ ((ProcessInstance) processContext.getProcessInstance())
+ .getContextInstance(VariableScope.VARIABLE_SCOPE);
+ if (variableScopeInstance != null) {
+ // TODO include other scopes that process-level scope as well
+ Bindings bindings = new SimpleBindings(variableScopeInstance.getVariables());
+ return engine.eval(expression, bindings);
+ } else {
+ return engine.eval(expression);
+ }
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathReturnValueEvaluatorBuilder.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,20 @@
+package org.drools.bpmn2.xpath;
+
+import org.drools.compiler.ReturnValueDescr;
+import org.drools.process.core.ContextResolver;
+import org.drools.rule.builder.PackageBuildContext;
+import org.drools.rule.builder.ReturnValueEvaluatorBuilder;
+import org.drools.workflow.instance.impl.ReturnValueConstraintEvaluator;
+
+public class XPathReturnValueEvaluatorBuilder implements ReturnValueEvaluatorBuilder {
+
+ public void build(PackageBuildContext context,
+ ReturnValueConstraintEvaluator returnValueConstraintEvaluator,
+ ReturnValueDescr returnValueDescr, ContextResolver contextResolver) {
+ XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
+ String xpathString = returnValueDescr.getText();
+ evaluator.setExpression(xpathString);
+ returnValueConstraintEvaluator.setEvaluator(evaluator);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngine.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,380 @@
+package org.drools.bpmn2.xpath;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.script.AbstractScriptEngine;
+import javax.script.Bindings;
+import javax.script.Compilable;
+import javax.script.CompiledScript;
+import javax.script.Invocable;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptException;
+import javax.script.SimpleBindings;
+import javax.xml.XMLConstants;
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpression;
+import javax.xml.xpath.XPathFactory;
+import javax.xml.xpath.XPathFunction;
+import javax.xml.xpath.XPathFunctionResolver;
+import javax.xml.xpath.XPathVariableResolver;
+
+import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
+
+public class XPathScriptEngine extends AbstractScriptEngine implements Compilable {
+
+ private ScriptEngineFactory factory;
+
+ private XPathFactory xpathFactory;
+
+ public static final String XPATH_RESULT_TYPE = "com.sun.script.xpath.resultType";
+
+ public static final String XPATH_INPUT_SRC = "com.sun.script.xpath.inputSource";
+
+ public static final String XMLNS_COLON = "xmlns:";
+
+ public static final String XPATH_CONTEXT_PREFIX = "context";
+
+ public static final String XPATH_CONTEXT_URI = "http://www.sun.com/java/jsr223/xpath/context";
+
+ public XPathScriptEngine() {
+ xpathFactory = XPathFactory.newInstance();
+ }
+
+ private class XPathCompiledScript extends CompiledScript {
+
+ private XPathExpression expr;
+
+ XPathCompiledScript(XPathExpression expr) {
+ this.expr = expr;
+ }
+
+ public ScriptEngine getEngine() {
+ return XPathScriptEngine.this;
+ }
+
+ public Object eval(ScriptContext ctx) throws ScriptException {
+ return evalXPath(expr, ctx);
+ }
+ }
+
+ public CompiledScript compile(String script) throws ScriptException {
+ XPathExpression expr = compileXPath(script, context);
+ return new XPathCompiledScript(expr);
+ }
+
+ public CompiledScript compile(Reader reader) throws ScriptException {
+ return compile(readFully(reader));
+ }
+
+ public Object eval(String str, ScriptContext ctx) throws ScriptException {
+ XPathExpression expr = compileXPath(str, ctx);
+ return evalXPath(expr, ctx);
+ }
+
+ public Object eval(Reader reader, ScriptContext ctx) throws ScriptException {
+ return eval(readFully(reader), ctx);
+ }
+
+ public ScriptEngineFactory getFactory() {
+ synchronized (this) {
+ if (factory == null) {
+ factory = new XPathScriptEngineFactory();
+ }
+ }
+ return factory;
+ }
+
+ public Bindings createBindings() {
+ return new SimpleBindings();
+ }
+
+ void setFactory(ScriptEngineFactory factory) {
+ this.factory = factory;
+ }
+
+ private static Object findVariable(QName qname, ScriptContext ctx) {
+ String name;
+ int scope;
+
+ if (XPATH_CONTEXT_URI.equals(qname.getNamespaceURI())) {
+ name = qname.getLocalPart();
+ synchronized (ctx) {
+ scope = ctx.getAttributesScope(name);
+ if (scope != -1) {
+ return ctx.getAttribute(name, scope);
+ }
+ }
+ }
+ if (qname.getPrefix() == null || "".equals(qname.getPrefix())) {
+ name = qname.getLocalPart();
+ } else {
+ name = qname.getPrefix() + ":" + qname.getLocalPart();
+ }
+ synchronized (ctx) {
+ scope = ctx.getAttributesScope(name);
+ if (scope != -1) {
+ return ctx.getAttribute(name, scope);
+ }
+ }
+ return null;
+ }
+
+ private static NamespaceContext makeNamespaceContext(ScriptContext ctx) {
+
+ final Map<String, String> namespaces = new HashMap<String, String>();
+ for (int scope : ctx.getScopes()) {
+ Bindings bind = ctx.getBindings(scope);
+ if (bind != null) {
+ // TODO collectNamespaces(namespaces, bind);
+ }
+ }
+ Object def = ctx.getAttribute(XMLConstants.XMLNS_ATTRIBUTE);
+ if (def instanceof String) {
+ namespaces.put(XMLConstants.DEFAULT_NS_PREFIX, (String) def);
+ }
+
+ namespaces.put(XMLConstants.XML_NS_PREFIX, XMLConstants.XML_NS_URI);
+ namespaces.put(XMLConstants.XMLNS_ATTRIBUTE, XMLConstants.XMLNS_ATTRIBUTE_NS_URI);
+
+ namespaces.put(XPATH_CONTEXT_PREFIX, XPATH_CONTEXT_URI);
+
+ return new NamespaceContext() {
+
+ public String getNamespaceURI(String prefix) {
+ if (prefix == null) {
+ throw new IllegalArgumentException();
+ }
+ String uri = namespaces.get(prefix);
+ if (uri == null) {
+ return XMLConstants.NULL_NS_URI;
+ } else {
+ return uri;
+ }
+ }
+
+ public String getPrefix(String namespaceURI) {
+ if (namespaceURI == null) {
+ throw new IllegalArgumentException();
+ }
+ for (String prefix : namespaces.keySet()) {
+ String uri = namespaces.get(prefix);
+ if (namespaceURI.equals(uri)) {
+ return prefix;
+ }
+ }
+ return null;
+ }
+
+ public Iterator<String> getPrefixes(String namespaceURI) {
+ if (namespaceURI == null) {
+ throw new IllegalArgumentException();
+ }
+ List<String> list = new ArrayList<String>();
+ for (String prefix : namespaces.keySet()) {
+ String uri = namespaces.get(prefix);
+ if (namespaceURI.equals(uri)) {
+ list.add(prefix);
+ }
+ }
+ return Collections.unmodifiableList(list).iterator();
+ }
+ };
+ }
+
+ private static XPathFunction makeXPathFunction(
+ final Constructor<XPathFunction> ctr, int arity) {
+ if (ctr.getParameterTypes().length != arity) {
+ return null;
+ }
+ return new XPathFunction() {
+ @SuppressWarnings("unchecked")
+ public Object evaluate(List args) {
+ try {
+ return ctr.newInstance(args.toArray());
+ } catch (Exception exp) {
+ throw new RuntimeException(exp);
+ }
+ }
+ };
+ }
+
+ private static XPathFunction makeXPathFunction(final Method method, int arity) {
+ int modifiers = method.getModifiers();
+ int numArgs = method.getParameterTypes().length;
+ if (Modifier.isStatic(modifiers) && numArgs == arity) {
+ return new XPathFunction() {
+ @SuppressWarnings("unchecked")
+ public Object evaluate(List args) {
+ try {
+ return method.invoke(null, args.toArray());
+ } catch (Exception exp) {
+ throw new RuntimeException(exp);
+ }
+ }
+ };
+ } else if ((numArgs + 1) == arity) {
+ return new XPathFunction() {
+ @SuppressWarnings("unchecked")
+ public Object evaluate(List args) {
+ List tmp = args.subList(1, args.size());
+ try {
+ return method.invoke(args.get(0), tmp.toArray());
+ } catch (Exception exp) {
+ throw new RuntimeException(exp);
+ }
+ }
+ };
+ } else {
+ return null;
+ }
+ }
+
+ private static XPathFunction makeXPathFunction(final String funcName,
+ final Invocable invocable) {
+ return new XPathFunction() {
+ @SuppressWarnings("unchecked")
+ public Object evaluate(List args) {
+ try {
+ return invocable.invokeFunction(funcName, args.toArray());
+ } catch (Exception exp) {
+ throw new RuntimeException(exp);
+ }
+ }
+ };
+ }
+
+ @SuppressWarnings("unchecked")
+ private static XPathFunction makeXPathFunction(QName qname, Object obj, int arity) {
+ if (obj == null) {
+ return null;
+ } else if (obj instanceof XPathFunction) {
+ return (XPathFunction) obj;
+ } else if (obj instanceof Method) {
+ return makeXPathFunction((Method) obj, arity);
+ } else if (obj instanceof Constructor) {
+ return makeXPathFunction((Constructor<XPathFunction>) obj, arity);
+ } else if (obj instanceof Invocable) {
+ return makeXPathFunction(qname.getLocalPart(), (Invocable) obj);
+ } else {
+ return null;
+ }
+ }
+
+ private XPathExpression compileXPath(String str, final ScriptContext ctx)
+ throws ScriptException {
+ try {
+ XPath xpath = xpathFactory.newXPath();
+ xpath.setXPathVariableResolver(new XPathVariableResolver() {
+ public Object resolveVariable(QName qname) {
+ return findVariable(qname, ctx);
+ }
+ });
+ xpath.setXPathFunctionResolver(new XPathFunctionResolver() {
+ public XPathFunction resolveFunction(QName qname, int arity) {
+ Object obj = findVariable(qname, ctx);
+ return makeXPathFunction(qname, obj, arity);
+ }
+ });
+ int begin = str.indexOf("getProcessProperty") > -1 ? 19 : 0;
+ if (begin > 0) {
+ String objectDataRef = str.substring(begin + 1, str.indexOf(")") - 1);
+ Document objectData = (Document) ctx.getAttribute(objectDataRef);
+ ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+ Source xmlSource = new DOMSource(objectData);
+ Result outputTarget = new StreamResult(outputStream);
+ TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);
+ InputStream is = new ByteArrayInputStream(outputStream.toByteArray());
+ ctx.setReader(new InputStreamReader(is));
+ str = str.substring(str.indexOf(")") + 1);
+ }
+ xpath.setNamespaceContext(makeNamespaceContext(ctx));
+ XPathExpression xpe = xpath.compile(str);
+ return xpe;
+ } catch (Exception exp) {
+ throw new ScriptException(exp);
+ }
+ }
+
+ private Object getVariable(ScriptContext ctx, String name) {
+ synchronized (ctx) {
+ int scope = ctx.getAttributesScope(name);
+ if (scope != -1) {
+ return ctx.getAttribute(name, scope);
+ }
+ }
+ return null;
+ }
+
+ private Object evalXPath(XPathExpression expr, final ScriptContext ctx) throws ScriptException {
+ try {
+ Object resultType = getVariable(ctx, XPATH_RESULT_TYPE);
+ Object input = getVariable(ctx, XPATH_INPUT_SRC);
+ InputSource src;
+ if (input == null) {
+ src = new InputSource(ctx.getReader());
+ } else {
+ if (input instanceof InputSource) {
+ src = (InputSource) input;
+ } else if (input instanceof String) {
+ src = new InputSource((String) input);
+ } else if (input instanceof Reader) {
+ src = new InputSource((Reader) input);
+ } else if (input instanceof InputStream) {
+ src = new InputSource((InputStream) input);
+ } else {
+ src = null;
+ }
+ }
+ resultType = XPathConstants.BOOLEAN;
+ if (resultType instanceof QName) {
+ return (src != null) ? expr.evaluate(src, (QName) resultType)
+ : expr.evaluate(input, (QName) resultType);
+ } else {
+ return (src != null) ? expr.evaluate(src) : expr
+ .evaluate(input);
+ }
+ } catch (Exception exp) {
+ throw new ScriptException(exp);
+ }
+ }
+
+ private String readFully(Reader reader) throws ScriptException {
+ char[] arr = new char[8 * 1024];
+ StringBuilder buf = new StringBuilder();
+ int numChars;
+ try {
+ while ((numChars = reader.read(arr, 0, arr.length)) > 0) {
+ buf.append(arr, 0, numChars);
+ }
+ } catch (IOException exp) {
+ throw new ScriptException(exp);
+ }
+ return buf.toString();
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xpath/XPathScriptEngineFactory.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,88 @@
+package org.drools.bpmn2.xpath;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineFactory;
+
+public class XPathScriptEngineFactory implements ScriptEngineFactory {
+
+ private static List<String> names;
+ private static List<String> extensions;
+ private static List<String> mimeTypes;
+ static {
+ names = new ArrayList<String>(1);
+ names.add("xpath");
+ names = Collections.unmodifiableList(names);
+ extensions = names;
+ mimeTypes = new ArrayList<String>(0);
+ mimeTypes = Collections.unmodifiableList(mimeTypes);
+ }
+
+ public String getEngineName() {
+ return "xpath";
+ }
+
+ public String getEngineVersion() {
+ return "1.0";
+ }
+
+ public List<String> getExtensions() {
+ return extensions;
+ }
+
+ public String getLanguageName() {
+ return "jaxp";
+ }
+
+ public String getLanguageVersion() {
+ return "1.4";
+ }
+
+ public String getMethodCallSyntax(String obj, String m, String... args) {
+ throw new UnsupportedOperationException("getMethodCallSyntax");
+ }
+
+ public List<String> getMimeTypes() {
+ return mimeTypes;
+ }
+
+ public List<String> getNames() {
+ return names;
+ }
+
+ public String getOutputStatement(String str) {
+ throw new UnsupportedOperationException("getOutputStatement");
+ }
+
+ public String getParameter(String key) {
+ if (key.equals(ScriptEngine.ENGINE)) {
+ return getEngineName();
+ } else if (key.equals(ScriptEngine.ENGINE_VERSION)) {
+ return getEngineVersion();
+ } else if (key.equals(ScriptEngine.NAME)) {
+ return getEngineName();
+ } else if (key.equals(ScriptEngine.LANGUAGE)) {
+ return getLanguageName();
+ } else if (key.equals(ScriptEngine.LANGUAGE_VERSION)) {
+ return getLanguageVersion();
+ } else if (key.equals("THREADING")) {
+ return "MULTITHREADED";
+ } else {
+ return null;
+ }
+ }
+
+ public String getProgram(String... statements) {
+ throw new UnsupportedOperationException("getProgram");
+ }
+
+ public ScriptEngine getScriptEngine() {
+ XPathScriptEngine engine = new XPathScriptEngine();
+ engine.setFactory(this);
+ return engine;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN20.xsd 2009-10-21 13:07:35 UTC (rev 29725)
@@ -2,10 +2,10 @@
<xsd:schema elementFormDefault="qualified" attributeFormDefault="unqualified"
xmlns="http://schema.omg.org/spec/BPMN/2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:di="http://www.omg.com/di/1.0.0"
+ xmlns:di="http://bpmndi.org"
targetNamespace="http://schema.omg.org/spec/BPMN/2.0">
- <xsd:import namespace="http://www.omg.com/di/1.0.0" schemaLocation="DiagramInterchange.xsd"/>
+ <xsd:import namespace="http://bpmndi.org" schemaLocation="BPMNDI.xsd"/>
<xsd:include schemaLocation="Semantic.xsd"/>
<xsd:element name="definitions" type="tDefinitions"/>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMNWorkDefinitions.conf 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,53 @@
+// We use MVEL to return a List of work definitions
+// The properties of the work definitions are specified as a Map<String, Object>
+// The allowed properties are name, parameters, displayName, icon and customEditor
+// The returned result should thus be of type List<Map<String, Object>>
+import org.drools.process.core.datatype.impl.type.StringDataType;
+
+[
+
+ [
+ "name" : "Manual Task",
+ "parameters" : [
+ "Description" : new StringDataType()
+ ],
+ "displayName" : "Manual Task",
+ "icon" : "icons/manual.gif"
+ ],
+
+ [
+ "name" : "Service Task",
+ "parameters" : [
+ "Interface" : new StringDataType(),
+ "Operation" : new StringDataType()
+ ],
+ "displayName" : "Service Task",
+ "icon" : "icons/action.gif",
+ "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+ ],
+
+ [
+ "name" : "Send Task",
+ "parameters" : [
+ "Implementation" : new StringDataType(),
+ "Operation" : new StringDataType(),
+ "Message" : new StringDataType()
+ ],
+ "displayName" : "Send Task",
+ "icon" : "icons/send.gif",
+ "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+ ],
+
+ [
+ "name" : "Receive Task",
+ "parameters" : [
+ "Implementation" : new StringDataType(),
+ "Operation" : new StringDataType(),
+ "Message" : new StringDataType()
+ ],
+ "displayName" : "Receive Task",
+ "icon" : "icons/receive.gif",
+ "customEditor" : "org.drools.eclipse.flow.common.editor.editpart.work.SampleCustomEditor"
+ ]
+
+]
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BpmnDi.xsd 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- edited with XMLSpy v2009 sp1 (http://www.altova.com) by Bruce Silver (private) -->
+<xs:schema xmlns="http://bpmndi.org" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://bpmndi.org" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="bpmndi">
+ <xs:annotation>
+ <xs:documentation>Comment describing your root element</xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="diagram" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="diagram" type="diagramType"/>
+ <xs:complexType name="diagramType">
+ <xs:attribute name="id" type="xs:ID" use="required"/>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:anyAttribute namespace="##other"/>
+ </xs:complexType>
+ <xs:element name="processDiagram" type="processDiagramType" substitutionGroup="diagram"/>
+ <xs:complexType name="processDiagramType">
+ <xs:complexContent>
+ <xs:extension base="diagramType">
+ <xs:sequence>
+ <xs:element ref="laneCompartment" maxOccurs="unbounded"/>
+ <xs:element ref="sequenceFlowConnector" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="associationConnector" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element ref="dataAssociationConnector" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="processRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="collaborationDiagram" type="collaborationDiagramType" substitutionGroup="diagram"/>
+ <xs:complexType name="collaborationDiagramType">
+ <xs:complexContent>
+ <xs:extension base="diagramType">
+ <xs:sequence>
+ <xs:element name="pool" type="poolCompartmentType" minOccurs="2" maxOccurs="unbounded"/>
+ <xs:element ref="messageFlowConnector" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="collaborationRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="bpmnNode" type="bpmnNodeType"/>
+ <xs:complexType name="bpmnNodeType">
+ <xs:attribute name="id" type="xs:ID" use="required"/>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:attribute name="x"/>
+ <xs:attribute name="y"/>
+ <xs:attribute name="width"/>
+ <xs:attribute name="height"/>
+ </xs:complexType>
+ <xs:element name="bpmnCompartment" type="bpmnCompartmentType" substitutionGroup="bpmnNode"/>
+ <xs:complexType name="bpmnCompartmentType">
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="isVisible" type="xs:boolean"/>
+ <xs:attribute name="orientation">
+ <xs:simpleType>
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="horizontal"/>
+ <xs:enumeration value="vertical"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="laneCompartment" type="laneCompartmentType_1" substitutionGroup="bpmnCompartment"/>
+ <xs:complexType name="laneCompartmentType">
+ <xs:complexContent>
+ <xs:extension base="bpmnCompartmentType">
+ <xs:sequence>
+ <xs:element ref="bpmnShape" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="subLane" type="laneCompartmentType_1" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="laneRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="poolCompartment" type="poolCompartmentType" substitutionGroup="bpmnCompartment"/>
+ <xs:complexType name="poolCompartmentType">
+ <xs:complexContent>
+ <xs:extension base="bpmnCompartmentType">
+ <xs:sequence>
+ <xs:element name="laneCompRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="participantRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="bpmnShape" type="bpmnNodeType" substitutionGroup="bpmnNode"/>
+ <xs:element name="bpmnLabel" substitutionGroup="bpmnNode"/>
+ <xs:element name="activityShape" type="activityShapeType_1" substitutionGroup="bpmnShape"/>
+ <xs:complexType name="activityShapeType">
+ <xs:attribute name="activityRef" type="xs:IDREF"/>
+ </xs:complexType>
+ <xs:complexType name="activityShapeType_1">
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="activityRef"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="subprocessShape" type="subprocessShapeType" substitutionGroup="activityShape"/>
+ <xs:complexType name="subprocessShapeType">
+ <xs:complexContent>
+ <xs:extension base="activityShapeType_1">
+ <xs:sequence>
+ <xs:element name="laneCompRef" type="xs:IDREF" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:attribute name="isExpanded" type="xs:boolean"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="calledSubprocessShape" type="calledSubprocessShapeType" substitutionGroup="activityShape"/>
+ <xs:complexType name="calledSubprocessShapeType">
+ <xs:complexContent>
+ <xs:extension base="activityShapeType_1">
+ <xs:attribute name="isExpanded" type="xs:boolean"/>
+ <xs:attribute name="diagramLink" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="taskShape" type="activityShapeType_1" substitutionGroup="activityShape"/>
+ <xs:element name="gatewayShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="gatewayRef"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="eventShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="eventRef"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dataObjectShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="dataObjectRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dataStoreShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="dataStoreRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dataInputShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="dataInputRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dataOutputShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="dataOutputRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="messageShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="messageRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="groupShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="categoryRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="textAnnotationShape" substitutionGroup="bpmnShape">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnNodeType">
+ <xs:attribute name="annotationRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="bpmnConnector" type="bpmnConnectorType"/>
+ <xs:complexType name="bpmnConnectorType">
+ <xs:sequence>
+ <xs:element name="bendpoint" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="x" type="xs:double"/>
+ <xs:attribute name="y" type="xs:double"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="id" type="xs:ID" use="required"/>
+ <xs:attribute name="sourceRef" type="xs:IDREF" use="required"/>
+ <xs:attribute name="targetRef" type="xs:IDREF" use="required"/>
+ <xs:attribute name="label" type="xs:string"/>
+ </xs:complexType>
+ <xs:element name="sequenceFlowConnector" substitutionGroup="bpmnConnector">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnConnectorType">
+ <xs:attribute name="sequenceFlowRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="messageFlowConnector">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="bpmnConnectorType">
+ <xs:attribute name="messageFlowRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="dataAssociationConnector" substitutionGroup="bpmnConnector">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="associationConnectorType">
+ <xs:attribute name="dataAssociationRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="associationConnector" type="associationConnectorType_1" substitutionGroup="bpmnConnector"/>
+ <xs:complexType name="associationConnectorType">
+ <xs:complexContent>
+ <xs:extension base="bpmnConnectorType">
+ <xs:attribute name="isDirectional" type="xs:boolean"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:element name="compensationFlowConnector" type="associationConnectorType_1" substitutionGroup="associationConnector"/>
+ <xs:element name="lane" type="laneCompartmentType"/>
+ <xs:complexType name="laneCompartmentType_1">
+ <xs:complexContent>
+ <xs:extension base="laneCompartmentType"/>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="associationConnectorType_1">
+ <xs:complexContent>
+ <xs:extension base="associationConnectorType">
+ <xs:attribute name="associationRef" type="xs:IDREF"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+</xs:schema>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/HelloService.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,9 @@
+package org.drools.bpmn2;
+
+public class HelloService {
+
+ public String hello(String name) {
+ return "Hello " + name + "!";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2009-10-21 13:07:35 UTC (rev 29725)
@@ -1,12 +1,26 @@
package org.drools.bpmn2;
+import java.io.ByteArrayInputStream;
+import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.xml.parsers.DocumentBuilderFactory;
+
import junit.framework.TestCase;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
+import org.drools.bpmn2.handler.ReceiveTaskHandler;
+import org.drools.bpmn2.handler.SendTaskHandler;
+import org.drools.bpmn2.handler.ServiceTaskHandler;
+import org.drools.bpmn2.xml.BPMN2SemanticModule;
+import org.drools.bpmn2.xml.BPMNDISemanticModule;
+import org.drools.bpmn2.xml.BPMNSemanticModule;
+import org.drools.bpmn2.xml.XmlBPMNProcessDumper;
+import org.drools.bpmn2.xpath.XPathDialectConfiguration;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderConfiguration;
import org.drools.builder.KnowledgeBuilderError;
@@ -14,13 +28,24 @@
import org.drools.builder.ResourceType;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.io.ResourceFactory;
+import org.drools.persistence.jpa.JPAKnowledgeService;
import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.runtime.Environment;
+import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
import org.drools.runtime.process.WorkflowProcessInstance;
+import org.drools.xml.XmlProcessReader;
+import org.w3c.dom.Document;
+import bitronix.tm.TransactionManagerServices;
+import bitronix.tm.resource.jdbc.PoolingDataSource;
+
public class SimpleBPMNProcessTest extends TestCase {
public void testMinimalProcess() throws Exception {
@@ -68,6 +93,20 @@
ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+
+ public void testUserTask() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-UserTask.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+ ProcessInstance processInstance = ksession.startProcess("UserTask");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ WorkItem workItem = workItemHandler.getWorkItem();
+ assertNotNull(workItem);
+ assertEquals("john", workItem.getParameter("ActorId"));
+ ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
public void testExclusiveSplit() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplit.xml");
@@ -79,11 +118,27 @@
ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+
+ public void testExclusiveSplitXPath() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplitXPath.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
+ Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder()
+ .parse(new ByteArrayInputStream(
+ "<myDocument><chapter1>BlaBla</chapter1><chapter2>MoreBlaBla</chapter2></myDocument>".getBytes()));
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", document);
+ params.put("y", "SomeString");
+ ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
public void testCallActivity() throws Exception {
KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
((PackageBuilderConfiguration) conf).initSemanticModules();
- ((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.xml"), ResourceType.DRF);
kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.xml"), ResourceType.DRF);
@@ -109,8 +164,21 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
- public void testIntermediateCatchEvent() throws Exception {
- KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEvent.xml");
+ public void testAdHocSubProcess() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocSubProcess.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+ ProcessInstance processInstance = ksession.startProcess("AdHocSubProcess");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ WorkItem workItem = workItemHandler.getWorkItem();
+ assertNotNull(workItem);
+ ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
+ public void testIntermediateCatchEventSignal() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventSignal.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
@@ -120,12 +188,116 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testIntermediateCatchEventTimer() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimer.xml");
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
+ new Thread(new Runnable() {
+ public void run() {
+ ksession.fireUntilHalt();
+ }
+ }).start();
+ ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ // now wait for 1 second for timer to trigger
+ Thread.sleep(1000);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ ksession.halt();
+ }
+
+ public void testErrorEventProcess() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorEndEvent.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ProcessInstance processInstance = ksession.startProcess("ErrorEndEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
+ }
+
+ public void testGraphicalInformation() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("testProzess");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
+ public void testServiceTask() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ServiceProcess.xml");
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Service Task", new ServiceTaskHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("s", "john");
+ WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+ ksession.startProcess("ServiceProcess", params);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals("Hello john!", processInstance.getVariable("s"));
+ }
+
+ public void testSendTask() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-SendTask.xml");
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("s", "john");
+ WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+ ksession.startProcess("SendTask", params);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ }
+
+ public void testReceiveTask() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ReceiveTask.xml");
+ final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ReceiveTaskHandler receiveTaskHandler = new ReceiveTaskHandler(ksession);
+ ksession.getWorkItemManager().registerWorkItemHandler("Receive Task", receiveTaskHandler);
+ WorkflowProcessInstance processInstance = (WorkflowProcessInstance)
+ ksession.startProcess("ReceiveTask");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ receiveTaskHandler.messageReceived("java.lang.String", "Hello john!");
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals("Hello john!", processInstance.getVariable("s"));
+ }
+
+ public void testPersistence() throws Exception {
+ setupDataSource();
+ EntityManagerFactory emf = Persistence.createEntityManagerFactory(
+ "org.drools.persistence.jpa");
+ Environment env = KnowledgeBaseFactory.newEnvironment();
+ env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
+ env.set(EnvironmentName.TRANSACTION_MANAGER,
+ TransactionManagerServices.getTransactionManager());
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-UserTask.xml");
+ StatefulKnowledgeSession ksession =
+ JPAKnowledgeService.newStatefulKnowledgeSession(kbase, null, env);
+ int sessionId = ksession.getId();
+ TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+ ProcessInstance processInstance = ksession.startProcess("UserTask");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ WorkItem workItem = workItemHandler.getWorkItem();
+ assertNotNull(workItem);
+ assertEquals("john", workItem.getParameter("ActorId"));
+ ksession.dispose();
+ ksession = JPAKnowledgeService.loadStatefulKnowledgeSession(
+ sessionId, kbase, null, env);
+ assertNotNull(ksession.getProcessInstance(processInstance.getId()));
+ ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+ assertNull(ksession.getProcessInstance(processInstance.getId()));
+ }
+
private KnowledgeBase createKnowledgeBase(String process) throws Exception {
KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
((PackageBuilderConfiguration) conf).initSemanticModules();
- ((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
+ ((PackageBuilderConfiguration) conf).addDialect("XPath", new XPathDialectConfiguration());
+ XmlProcessReader processReader = new XmlProcessReader(
+ ((PackageBuilderConfiguration) conf).getSemanticModules());
+ RuleFlowProcess p = (RuleFlowProcess)
+ processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/" + process));
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
- kbuilder.add(ResourceFactory.newClassPathResource(process), ResourceType.DRF);
+// System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+ kbuilder.add(ResourceFactory.newReaderResource(
+ new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
if (!kbuilder.getErrors().isEmpty()) {
for (KnowledgeBuilderError error: kbuilder.getErrors()) {
System.err.println(error);
@@ -136,4 +308,34 @@
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
+
+ private static void setupDataSource() {
+ PoolingDataSource ds1 = new PoolingDataSource();
+ ds1.setUniqueName( "jdbc/testDS1" );
+ ds1.setClassName( "org.h2.jdbcx.JdbcDataSource" );
+ ds1.setMaxPoolSize( 3 );
+ ds1.setAllowLocalTransactions( true );
+ ds1.getDriverProperties().put( "user",
+ "sa" );
+ ds1.getDriverProperties().put( "password",
+ "sasa" );
+ ds1.getDriverProperties().put( "URL",
+ "jdbc:h2:mem:mydb" );
+ ds1.init();
+ }
+
+ private static class TestWorkItemHandler implements WorkItemHandler {
+ private WorkItem workItem;
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ this.workItem = workItem;
+ }
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+ public WorkItem getWorkItem() {
+ WorkItem result = this.workItem;
+ this.workItem = null;
+ return result;
+ }
+
+ }
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="AdHocSubProcess" name="AdHoc SubProcess">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <adHocSubProcess id="_2" name="Hello" >
+ <scriptTask id="_2-1" name="Hello1">
+ <script>System.out.println("Hello World 1");</script>
+ </scriptTask>
+ <scriptTask id="_2-2" name="Hello2">
+ <script>System.out.println("Hello World 2");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+ <userTask id="_2-3" name="Hello"/>
+ </adHocSubProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <scriptTask id="_3" name="Goodbye">
+ <script>System.out.println("Goodbye World");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <endEvent id="_4" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -37,6 +37,8 @@
</dataOutputAssociation>
</callActivity>
<sequenceFlow sourceRef="_2" targetRef="_3"/>
- <endEvent id="_3" name="EndProcess"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
</process>
</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -21,6 +21,8 @@
kcontext.setVariable("subY", "new value");</script>
</scriptTask>
<sequenceFlow sourceRef="_2" targetRef="_3"/>
- <endEvent id="_3" name="EndProcess"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
</process>
</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorEndEvent.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="ErrorEndEvent" name="Error End Event Process">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <endEvent id="_2" name="ErrorEvent">
+ <errorEventDefinition errorCode="error"/>
+ </endEvent>
+ </process>
+</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -42,7 +42,9 @@
<userTask id="_5" name="Two">
</userTask>
<parallelGateway id="_6" name="Converge" gatewayDirection="converging"/>
- <endEvent id="_7" name="EndProcess"/>
+ <endEvent id="_7" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
<!-- connections -->
<sequenceFlow sourceRef="_1" targetRef="_2"/>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -226,7 +226,9 @@
</potentialOwner>
</userTask>
<parallelGateway id="_6" name="Converge" g:x="463" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
- <endEvent id="_7" name="EndProcess" g:x="547" g:y="56" g:width="48" g:height="48" />
+ <endEvent id="_7" name="EndProcess" g:x="547" g:y="56" g:width="48" g:height="48" >
+ <terminateEventDefinition/>
+ </endEvent>
<!-- connections -->
<sequenceFlow sourceRef="_6" targetRef="_7" />
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -59,7 +59,9 @@
<userTask id="_5" name="Two">
</userTask>
<exclusiveGateway id="_6" name="Converge" gatewayDirection="converging"/>
- <endEvent id="_7" name="EndProcess"/>
+ <endEvent id="_7" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
<!-- connections -->
<sequenceFlow sourceRef="_1" targetRef="_2"/>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -80,7 +80,9 @@
<targetRef>_6_BodyInput</targetRef>
</dataInputAssociation>
</task>
- <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" />
+ <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" >
+ <terminateEventDefinition/>
+ </endEvent>
<!-- connections -->
<sequenceFlow sourceRef="_1" targetRef="_2" />
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplitXPath.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.jboss.org/drools"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:g="http://www.jboss.org/drools/flow/gpd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="xItem" structureRef="java.lang.Object" />
+ <itemDefinition id="yItem" structureRef="java.lang.Object" />
+
+ <process id="com.sample.test" name="Test" >
+
+ <!-- process variables -->
+ <property id="x" itemSubjectRef="tns:xItem"/>
+ <property id="y" itemSubjectRef="tns:yItem"/>
+
+ <!-- nodes -->
+ <startEvent id="_1" name="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
+ <exclusiveGateway id="_2" name="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
+ <scriptTask id="_3" name="Script1" g:x="177" g:y="16" g:width="80" g:height="48">
+ <script>System.out.println("x=" + x);</script>
+ </scriptTask>
+ <scriptTask id="_4" name="Script2" g:x="177" g:y="96" g:width="80" g:height="48">
+ <script>System.out.println("y=" + y);</script>
+ </scriptTask>
+ <exclusiveGateway id="_5" name="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+ <task id="_6" name="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
+ <ioSpecification>
+ <dataInput id="_6_FromInput" name="From" />
+ <dataInput id="_6_ToInput" name="To" />
+ <dataInput id="_6_SubjectInput" name="Subject" />
+ <dataInput id="_6_BodyInput" name="Body" />
+ <inputSet>
+ <dataInputRefs>_6_FromInput</dataInputRefs>
+ <dataInputRefs>_6_ToInput</dataInputRefs>
+ <dataInputRefs>_6_SubjectInput</dataInputRefs>
+ <dataInputRefs>_6_BodyInput</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ </outputSet>
+ </ioSpecification>
+ <property id="_6_From" />
+ <property id="_6_Subject" />
+ <property id="_6_To" />
+ <property id="_6_Body" />
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">me at mail.com</from>
+ <to xs:type="tFormalExpression">_6_From</to>
+ </assignment>
+ <sourceRef>_6_From</sourceRef>
+ <targetRef>_6_FromInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">Urgent email !</from>
+ <to xs:type="tFormalExpression">_6_Subject</to>
+ </assignment>
+ <sourceRef>_6_Subject</sourceRef>
+ <targetRef>_6_SubjectInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">you at mail.com</from>
+ <to xs:type="tFormalExpression">_6_To</to>
+ </assignment>
+ <sourceRef>_6_To</sourceRef>
+ <targetRef>_6_ToInput</targetRef>
+ </dataInputAssociation>
+ <dataInputAssociation>
+ <assignment>
+ <from xs:type="tFormalExpression">This is an urgent email #{x}</from>
+ <to xs:type="tFormalExpression">_6_Body</to>
+ </assignment>
+ <sourceRef>_6_Body</sourceRef>
+ <targetRef>_6_BodyInput</targetRef>
+ </dataInputAssociation>
+ </task>
+ <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" >
+ <terminateEventDefinition/>
+ </endEvent>
+
+ <!-- connections -->
+ <sequenceFlow sourceRef="_1" targetRef="_2" />
+ <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[120,40]" >
+ <conditionExpression xs:type="tFormalExpression" language="http://www.w3.org/1999/XPath">getProcessProperty("x")/myDocument/chapter1/text()="BlaBla"</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" >
+ <conditionExpression>return true;</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="_3" targetRef="_5" g:bendpoints="[313,40]" />
+ <sequenceFlow sourceRef="_4" targetRef="_5" g:bendpoints="[314,119]" />
+ <sequenceFlow sourceRef="_5" targetRef="_6" />
+ <sequenceFlow sourceRef="_6" targetRef="_7" />
+
+ </process>
+
+</definitions>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventSignal.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventSignal.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventSignal.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <userTask id="_2" name="UserTask">
+ </userTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess"/>
+ <intermediateCatchEvent id="_4" name="event">
+ <dataOutput id="_4_Output" />
+ <dataOutputAssociation>
+ <sourceRef>_4_Output</sourceRef>
+ <targetRef>x</targetRef>
+ </dataOutputAssociation>
+ <outputSet>
+ <dataOutputRefs>_4_Output</dataOutputRefs>
+ </outputSet>
+ <signalEventDefinition signalRef="MyMessage" />
+ </intermediateCatchEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Event">
+ <script>System.out.println(x);</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <endEvent id="_6" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventTimer.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_3"/>
+ <intermediateCatchEvent id="_3" name="timer">
+ <timerEventDefinition>
+ <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+ </timerEventDefinition>
+ </intermediateCatchEvent>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <scriptTask id="_4" name="Event">
+ <script>System.out.println("Timer triggered");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <endEvent id="_5" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+
+ </process>
+</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcess.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -8,13 +8,15 @@
xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
xmlns:tns="http://www.example.org/MinimalExample">
- <process id="Minimal" name="Minimal Process">
+ <process id="Minimal" name="Minimal Process" processType="executable">
<startEvent id="_1" name="StartProcess"/>
<sequenceFlow sourceRef="_1" targetRef="_2"/>
<scriptTask id="_2" name="Hello">
<script>System.out.println("Hello World");</script>
</scriptTask>
<sequenceFlow sourceRef="_2" targetRef="_3"/>
- <endEvent id="_3" name="EndProcess"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
</process>
</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MinimalProcessWithGraphical.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -17,7 +17,9 @@
<script>System.out.println("Hello World");</script>
</scriptTask>
<sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[10,10]" />
- <endEvent id="_3" name="EndProcess"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
</process>
</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-OryxExportedExample.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<definitions targetNamespace="http://www.omg.org/bpmn20" xmlns="http://www.omg.org/bpmn20" xmlns:bpmndi="http://bpmndi.org">
+ <process id="testProzess">
+ <laneSet process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_34c205c4-7aa8-4711-a22f-1305ad74f61d">
+ <lane name="DefaultLane" laneSet="oryx_34c205c4-7aa8-4711-a22f-1305ad74f61d" id="oryx_fff7ca92-9b4f-4875-b194-044f093705f0">
+ <flowElementRef>oryx_51760C33-890E-4D79-97AF-06F17119004F</flowElementRef>
+ <flowElementRef>oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0</flowElementRef>
+ <flowElementRef>oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF</flowElementRef>
+ <flowElementRef>oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B</flowElementRef>
+ <flowElementRef>oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E</flowElementRef>
+ <flowElementRef>oryx_7BC67626-4762-4547-8C3E-514B415938CD</flowElementRef>
+ <flowElementRef>oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF</flowElementRef>
+ </lane>
+ </laneSet>
+ <startEvent name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_51760C33-890E-4D79-97AF-06F17119004F">
+ <outgoing>oryx_2B4B9F00-745A-49D5-A409-B0308C963893</outgoing>
+ </startEvent>
+ <userTask name="Self Evaluation" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0">
+ <incoming>oryx_2B4B9F00-745A-49D5-A409-B0308C963893</incoming>
+ <outgoing>oryx_AE244892-DEB6-42CE-B766-0331903EFB82</outgoing>
+ </userTask>
+ <parallelGateway gatewayDirection="diverging" name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF">
+ <incoming>oryx_AE244892-DEB6-42CE-B766-0331903EFB82</incoming>
+ <outgoing>oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A</outgoing>
+ <outgoing>oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4</outgoing>
+ </parallelGateway>
+ <userTask name="PM Evaluation" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B">
+ <incoming>oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A</incoming>
+ <outgoing>oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396</outgoing>
+ </userTask>
+ <parallelGateway gatewayDirection="converging" name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E">
+ <incoming>oryx_3D6B23E8-5173-4984-A059-649FA46C7404</incoming>
+ <incoming>oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396</incoming>
+ <outgoing>oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC</outgoing>
+ </parallelGateway>
+ <userTask name="HR Evaluation" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_7BC67626-4762-4547-8C3E-514B415938CD">
+ <incoming>oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4</incoming>
+ <outgoing>oryx_3D6B23E8-5173-4984-A059-649FA46C7404</outgoing>
+ </userTask>
+ <endEvent name="" process="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF">
+ <incoming>oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC</incoming>
+ </endEvent>
+ <sequenceFlow targetRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0" sourceRef="oryx_51760C33-890E-4D79-97AF-06F17119004F" name="" id="oryx_2B4B9F00-745A-49D5-A409-B0308C963893"/>
+ <sequenceFlow targetRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" sourceRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0" name="" id="oryx_AE244892-DEB6-42CE-B766-0331903EFB82"/>
+ <sequenceFlow targetRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" name="" id="oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A"/>
+ <sequenceFlow targetRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" name="" id="oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4"/>
+ <sequenceFlow targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" sourceRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD" name="" id="oryx_3D6B23E8-5173-4984-A059-649FA46C7404"/>
+ <sequenceFlow targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" sourceRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B" name="" id="oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396"/>
+ <sequenceFlow targetRef="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF" sourceRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" name="" id="oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC"/>
+ </process>
+ <bpmndi:processDiagram processRef="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b" id="oryx_bbd78367-e494-4d9c-96fe-c3f28901735b_gui">
+ <bpmndi:laneCompartment isVisible="false" height="0.0" width="0.0" y="0.0" x="0.0" name="DefaultLane" id="oryx_fff7ca92-9b4f-4875-b194-044f093705f0_gui">
+ <bpmndi:eventShape eventRef="oryx_51760C33-890E-4D79-97AF-06F17119004F" height="30.0" width="30.0" y="163.0" x="24.0" name="" id="oryx_51760C33-890E-4D79-97AF-06F17119004F_gui"/>
+ <bpmndi:activityShape activityRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0" height="80.0" width="100.0" y="138.0" x="90.0" name="Self Evaluation" id="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0_gui"/>
+ <bpmndi:gatewayShape gatewayRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF" height="40.0" width="40.0" y="158.0" x="225.0" name="" id="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui"/>
+ <bpmndi:activityShape activityRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B" height="80.0" width="100.0" y="90.0" x="285.0" name="PM Evaluation" id="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B_gui"/>
+ <bpmndi:gatewayShape gatewayRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E" height="40.0" width="40.0" y="158.0" x="405.0" name="" id="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui"/>
+ <bpmndi:activityShape activityRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD" height="80.0" width="100.0" y="180.0" x="285.0" name="HR Evaluation" id="oryx_7BC67626-4762-4547-8C3E-514B415938CD_gui"/>
+ <bpmndi:eventShape eventRef="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF" height="28.0" width="28.0" y="164.0" x="495.0" name="" id="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF_gui"/>
+ </bpmndi:laneCompartment>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_2B4B9F00-745A-49D5-A409-B0308C963893" label="" targetRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0_gui" sourceRef="oryx_51760C33-890E-4D79-97AF-06F17119004F_gui" id="oryx_2B4B9F00-745A-49D5-A409-B0308C963893_gui"/>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_AE244892-DEB6-42CE-B766-0331903EFB82" label="" targetRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui" sourceRef="oryx_399F34C7-DA82-4CA6-91F4-4C2E7BD898E0_gui" id="oryx_AE244892-DEB6-42CE-B766-0331903EFB82_gui"/>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A" label="" targetRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B_gui" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui" id="oryx_713E11D3-2CE7-4FE8-B7FA-729E2CF2F10A_gui">
+ <bpmndi:bendpoint y="130.0" x="245.5"/>
+ </bpmndi:sequenceFlowConnector>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4" label="" targetRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD_gui" sourceRef="oryx_C43F8AA0-0A0D-4CC4-AAA2-0F3EBFC31BAF_gui" id="oryx_7BC15988-7BD4-4657-8198-60C23B5B98D4_gui">
+ <bpmndi:bendpoint y="220.0" x="245.5"/>
+ </bpmndi:sequenceFlowConnector>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_3D6B23E8-5173-4984-A059-649FA46C7404" label="" targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui" sourceRef="oryx_7BC67626-4762-4547-8C3E-514B415938CD_gui" id="oryx_3D6B23E8-5173-4984-A059-649FA46C7404_gui">
+ <bpmndi:bendpoint y="220.0" x="425.52668172117495"/>
+ </bpmndi:sequenceFlowConnector>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396" label="" targetRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui" sourceRef="oryx_B3C79901-19C9-4FC8-95E5-7D9FD5BE555B_gui" id="oryx_D2ACCE6F-8375-478C-A4DD-F4A4B073C396_gui">
+ <bpmndi:bendpoint y="130.0" x="425.5046319508967"/>
+ </bpmndi:sequenceFlowConnector>
+ <bpmndi:sequenceFlowConnector sequenceFlowRef="oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC" label="" targetRef="oryx_8E9A3AC3-6348-4105-95FC-D430FC02C1CF_gui" sourceRef="oryx_3632D983-1DEF-468C-9AB3-EB0824A46E5E_gui" id="oryx_A0AF4CED-F68C-47D5-AF4D-CCDE1BE1E6AC_gui"/>
+ </bpmndi:processDiagram>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ReceiveTask.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloMessage" structureRef="StringType"/>
+
+ <process id="ReceiveTask" name="Receive Task">
+ <!-- process variables -->
+ <property id="s" itemSubjectRef="tns:StringType" />
+
+ <!-- nodes -->
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <receiveTask id="_2" name="Hello" messageRef="HelloMessage">
+ <ioSpecification>
+ <dataOutput id="_2_param" name="Message" itemSubjectRef="HelloMessage"/>
+ <inputSet/>
+ <outputSet>
+ <dataOutputRefs>_2_param</dataOutputRefs>
+ </outputSet>
+ </ioSpecification>
+ <dataOutputAssociation>
+ <sourceRef>_2_param</sourceRef>
+ <targetRef>s</targetRef>
+ </dataOutputAssociation>
+ </receiveTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SendTask.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloMessage" structureRef="StringType"/>
+
+ <process id="SendTask" name="Send Task">
+ <!-- process variables -->
+ <property id="s" itemSubjectRef="tns:StringType" />
+
+ <!-- nodes -->
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <sendTask id="_2" name="Hello" messageRef="HelloMessage">
+ <ioSpecification>
+ <dataInput id="_2_param" name="Message" itemSubjectRef="HelloMessage"/>
+ <inputSet>
+ <dataInputRefs>_2_param</dataInputRefs>
+ </inputSet>
+ <outputSet/>
+ </ioSpecification>
+ <dataInputAssociation>
+ <sourceRef>s</sourceRef>
+ <targetRef>_2_param</targetRef>
+ </dataInputAssociation>
+ </sendTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ServiceProcess.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloService.hello.in" structureRef="StringType"/>
+ <message id="HelloService.hello.out" structureRef="StringType"/>
+ <interface id="HelloService" name="org.drools.bpmn2.HelloService">
+ <operation id="HelloService.hello" name="hello">
+ <inMessageRef>HelloService.hello.in</inMessageRef>
+ <outMessageRef>HelloService.hello.out</outMessageRef>
+ </operation>
+ </interface>
+
+ <process id="ServiceProcess" name="Service Process">
+ <!-- process variables -->
+ <property id="s" itemSubjectRef="tns:StringType" />
+
+ <!-- nodes -->
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <serviceTask id="_2" name="Hello" operationRef="HelloService.hello">
+ <ioSpecification>
+ <dataInput id="_2_param" name="Parameter" itemSubjectRef="HelloService.hello.in" />
+ <dataOutput id="_2_result" name="Result" />
+ <inputSet>
+ <dataInputRefs>_2_param</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ <dataOutputRefs>_2_result</dataOutputRefs>
+ </outputSet>
+ </ioSpecification>
+ <dataInputAssociation>
+ <sourceRef>s</sourceRef>
+ <targetRef>_2_param</targetRef>
+ </dataInputAssociation>
+ <dataOutputAssociation>
+ <sourceRef>_2_result</sourceRef>
+ <targetRef>s</targetRef>
+ </dataOutputAssociation>
+ </serviceTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml 2009-10-21 12:55:13 UTC (rev 29724)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -21,6 +21,12 @@
<endEvent id="_2-3" name="EndSubProcess"/>
</subProcess>
<sequenceFlow sourceRef="_2" targetRef="_3"/>
- <endEvent id="_3" name="EndProcess"/>
+ <scriptTask id="_3" name="Goodbye">
+ <script>System.out.println("Goodbye World");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <endEvent id="_4" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
</process>
</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-UserTask.xml 2009-10-21 13:07:35 UTC (rev 29725)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <resource id="Actor" name="Human Actor" />
+
+ <process id="UserTask" name="User Task">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <userTask id="_2" name="Hello">
+ <potentialOwner resourceRef="tns:Actor" >
+ <resourceAssignmentExpression>
+ <formalExpression>john</formalExpression>
+ </resourceAssignmentExpression>
+ </potentialOwner>
+ </userTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
More information about the jboss-svn-commits
mailing list