[jboss-svn-commits] JBL Code SVN: r31150 - in labs/jbossrules/trunk/drools-process/drools-bpmn2: src/main/java/org/drools/bpmn2/xml and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jan 19 15:06:10 EST 2010
Author: KrisVerlaenen
Date: 2010-01-19 15:06:10 -0500 (Tue, 19 Jan 2010)
New Revision: 31150
Added:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventMessage.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml
Modified:
labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
- added some more BPMN2 nodes
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.classpath 2010-01-19 20:06:10 UTC (rev 31150)
@@ -13,10 +13,10 @@
<classpathentry kind="var" path="M2_REPO/org/codehaus/janino/com.springsource.org.codehaus.janino/2.5.15/com.springsource.org.codehaus.janino-2.5.15.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.2/commons-collections-3.2.jar"/>
<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
- <classpathentry kind="src" path="/drools-api"/>
- <classpathentry kind="src" path="/drools-compiler"/>
- <classpathentry kind="src" path="/drools-core"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/geronimo-jms_1.1_spec-1.0.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/geronimo-jta_1.0.1B_spec-1.0.1.jar"/>
@@ -29,7 +29,7 @@
<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-core/3.3.0.SP1/hibernate-core-3.3.0.SP1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hibernate/hibernate-entitymanager/3.4.0.GA/hibernate-entitymanager-3.4.0.GA.jar"/>
<classpathentry kind="var" path="M2_REPO/javassist/javassist/3.4.GA/javassist-3.4.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar" sourcepath="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/4.6/junit-4.6.jar"/>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/.project 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/.project 2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,11 +1,7 @@
<projectDescription>
<name>drools-bpmn2</name>
<comment>A rule production system</comment>
- <projects>
- <project>drools-api</project>
- <project>drools-compiler</project>
- <project>drools-core</project>
- </projects>
+ <projects/>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -26,9 +26,26 @@
if ("".equals(s)) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
endNode(xmlDump);
- } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+ } else if (s.startsWith("org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();")) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
xmlDump.append(">" + EOL);
+ String variable = (String) actionNode.getMetaData("MappingVariable");
+ if (variable != null) {
+ xmlDump.append(
+ " <dataInput id=\"_" + actionNode.getUniqueId() + "_Input\" />" + EOL +
+ " <dataInputAssociation>" + EOL +
+ " <sourceRef>" + variable + "</sourceRef>" + EOL +
+ " <targetRef>_" + actionNode.getUniqueId() + "_Input</targetRef>" + EOL +
+ " </dataInputAssociation>" + EOL +
+ " <inputSet>" + EOL +
+ " <dataInputRefs>_" + actionNode.getUniqueId() + "_Input</dataInputRefs>" + EOL +
+ " </inputSet>" + EOL);
+ }
+ xmlDump.append(" <messageEventDefinition messageRef=\"" + "_" + actionNode.getUniqueId() + "_Message\"/>" + EOL);
+ endNode("intermediateThrowEvent", xmlDump);
+ } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+ writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
s = s.substring(44);
String type = s.substring(0, s.indexOf("\""));
s = s.substring(s.indexOf(",") + 2);
@@ -45,8 +62,20 @@
" <dataInputRefs>_" + actionNode.getUniqueId() + "_Input</dataInputRefs>" + EOL +
" </inputSet>" + EOL);
}
- xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+ if (type.startsWith("Compensate-")) {
+ xmlDump.append(" <compensateEventDefinition activityRef=\"" + type.substring(11) + "\"/>" + EOL);
+ } else {
+ xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+ }
endNode("intermediateThrowEvent", xmlDump);
+ } else if (s.startsWith("org.drools.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"")) {
+ writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ s = s.substring(327);
+ String type = s.substring(0, s.indexOf("\""));
+ s = s.substring(s.indexOf(",") + 2);
+ xmlDump.append(" <escalationEventDefinition escalationCode=\"" + type + "\"/>" + EOL);
+ endNode("intermediateThrowEvent", xmlDump);
} else {
writeNode("scriptTask", actionNode, xmlDump, includeMeta);
if (JavaDialect.ID.equals(action.getDialect())) {
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,11 +1,13 @@
package org.drools.bpmn2.xml;
import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeContextNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.FaultNode;
import org.drools.workflow.core.node.Join;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.core.node.TimerNode;
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.DefaultSemanticModule;
@@ -41,6 +43,7 @@
addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
addHandler("boundaryEvent", new BoundaryEventHandler());
addHandler("dataObject", new DataObjectHandler());
+ addHandler("transaction", new TransactionHandler());
addHandler("sequenceFlow", new SequenceFlowHandler());
@@ -58,6 +61,8 @@
handlersByClass.put(FaultNode.class, new FaultNodeHandler());
handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
handlersByClass.put(ActionNode.class, new ActionNodeHandler());
+ handlersByClass.put(StateNode.class, new StateNodeHandler());
+ handlersByClass.put(CompositeContextNode.class, new CompositeContextNodeHandler());
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,11 +1,13 @@
package org.drools.bpmn2.xml;
import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeContextNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.FaultNode;
import org.drools.workflow.core.node.Join;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.core.node.TimerNode;
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.DefaultSemanticModule;
@@ -41,6 +43,7 @@
addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
addHandler("boundaryEvent", new BoundaryEventHandler());
addHandler("dataObject", new DataObjectHandler());
+ addHandler("transaction", new TransactionHandler());
addHandler("sequenceFlow", new SequenceFlowHandler());
@@ -58,6 +61,8 @@
handlersByClass.put(FaultNode.class, new FaultNodeHandler());
handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
handlersByClass.put(ActionNode.class, new ActionNodeHandler());
+ handlersByClass.put(StateNode.class, new StateNodeHandler());
+ handlersByClass.put(CompositeContextNode.class, new CompositeContextNodeHandler());
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -43,10 +43,18 @@
// reuse already created EventNode
handleEscalationNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
break;
+ } else if ("errorEventDefinition".equals(nodeName)) {
+ // reuse already created EventNode
+ handleErrorNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
+ break;
} else if ("timerEventDefinition".equals(nodeName)) {
// reuse already created EventNode
handleTimerNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
break;
+ } else if ("compensateEventDefinition".equals(nodeName)) {
+ // reuse already created EventNode
+ handleCompensationNode(node, element, uri, localName, parser, attachedTo, cancelActivity);
+ break;
}
xmlNode = xmlNode.getNextSibling();
}
@@ -80,6 +88,30 @@
}
}
+ protected void handleErrorNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser, final String attachedTo,
+ final boolean cancelActivity) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ EventNode eventNode = (EventNode) node;
+ eventNode.setMetaData("AttachedTo", attachedTo);
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("errorEventDefinition".equals(nodeName)) {
+ String type = ((Element) xmlNode).getAttribute("errorCode");
+ if (type != null && type.trim().length() > 0) {
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType("Error-" + attachedTo + "-" + type);
+ eventFilters.add(eventFilter);
+ eventNode.setEventFilters(eventFilters);
+ eventNode.setMetaData("ErrorEvent", type);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
protected void handleTimerNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser, final String attachedTo,
final boolean cancelActivity) throws SAXException {
@@ -114,6 +146,31 @@
}
}
+ protected void handleCompensationNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser, final String attachedTo,
+ final boolean cancelActivity) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ EventNode eventNode = (EventNode) node;
+ eventNode.setMetaData("AttachedTo", attachedTo);
+ eventNode.setMetaData("CancelActivity", cancelActivity);
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("compensateEventDefinition".equals(nodeName)) {
+ String activityRef = ((Element) xmlNode).getAttribute("activityRef");
+ if (activityRef != null && activityRef.trim().length() > 0) {
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType("Compensate-" + eventNode.getUniqueId());
+ eventFilters.add(eventFilter);
+ eventNode.setEventFilters(eventFilters);
+ eventNode.setMetaData("CompensationEvent", activityRef);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
throw new IllegalArgumentException("Writing out should be handled by specific handlers");
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -2,7 +2,9 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import org.drools.bpmn2.core.Message;
import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.NodeContainer;
@@ -10,6 +12,7 @@
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.FaultNode;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -98,6 +101,7 @@
}
}
+ @SuppressWarnings("unchecked")
public void handleMessageNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser) throws SAXException {
EndNode endNode = (EndNode) node;
@@ -107,12 +111,26 @@
if ("dataInputAssociation".equals(nodeName)) {
readEndDataInputAssociation(xmlNode, endNode);
} else if ("messageEventDefinition".equals(nodeName)) {
- String signalName = ((Element) xmlNode).getAttribute("messageRef");
+ String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageRef);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageRef);
+ }
String variable = (String) endNode.getMetaData("MappingVariable");
+ endNode.setMetaData("MessageType", message.getType());
List<DroolsAction> actions = new ArrayList<DroolsAction>();
- actions.add(new DroolsConsequenceAction("mvel",
- "kcontext.getKnowledgeRuntime().signalEvent(\""
- + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+
+ actions.add(new DroolsConsequenceAction("java",
+ "org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();" + EOL +
+ "workItem.setName(\"Send Task\");" + EOL +
+ "workItem.setParameter(\"MessageType\", \"" + message.getType() + "\");" + EOL +
+ (variable == null ? "" : "workItem.setParameter(\"Message\", " + variable + ");" + EOL) +
+ "((org.drools.process.instance.WorkItemManager) kcontext.getKnowledgeRuntime().getWorkItemManager()).internalExecuteWorkItem(workItem);"));
endNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
}
xmlNode = xmlNode.getNextSibling();
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -32,7 +32,23 @@
if (actions.size() == 1) {
DroolsConsequenceAction action = (DroolsConsequenceAction) actions.get(0);
String s = action.getConsequence();
- if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+ if (s.startsWith("org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();")) {
+ xmlDump.append(">" + EOL);
+ String variable = (String) endNode.getMetaData("MappingVariable");
+ if (variable != null) {
+ xmlDump.append(
+ " <dataInput id=\"_" + endNode.getUniqueId() + "_Input\" />" + EOL +
+ " <dataInputAssociation>" + EOL +
+ " <sourceRef>" + variable + "</sourceRef>" + EOL +
+ " <targetRef>_" + endNode.getUniqueId() + "_Input</targetRef>" + EOL +
+ " </dataInputAssociation>" + EOL +
+ " <inputSet>" + EOL +
+ " <dataInputRefs>_" + endNode.getUniqueId() + "_Input</dataInputRefs>" + EOL +
+ " </inputSet>" + EOL);
+ }
+ xmlDump.append(" <messageEventDefinition messageRef=\"" + "_" + endNode.getUniqueId() + "_Message\"/>" + EOL);
+ endNode("endEvent", xmlDump);
+ } else if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
xmlDump.append(">" + EOL);
s = s.substring(44);
String type = s.substring(0, s.indexOf("\""));
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -35,8 +35,12 @@
}
if (eventNode.getEventFilters().size() > 0) {
String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
- xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
-
+ if (type.startsWith("Message-")) {
+ type = type.substring(8);
+ xmlDump.append(" <messageEventDefinition messageRef=\"" + type + "\"/>" + EOL);
+ } else {
+ xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+ }
}
endNode("intermediateCatchEvent", xmlDump);
} else {
@@ -52,8 +56,15 @@
xmlDump.append(">" + EOL);
xmlDump.append(" <escalationEventDefinition escalationCode=\"" + type + "\" />" + EOL);
endNode("boundaryEvent", xmlDump);
- } else if (type.startsWith("Timer-")) {
+ } else if (type.startsWith("Error-")) {
type = type.substring(attachedTo.length() + 7);
+ writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
+ xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <errorEventDefinition errorCode=\"" + type + "\" />" + EOL);
+ endNode("boundaryEvent", xmlDump);
+ } else if (type.startsWith("Timer-")) {
+ type = type.substring(attachedTo.length() + 7);
boolean cancelActivity = (Boolean) eventNode.getMetaData("CancelActivity");
writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -2,15 +2,19 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import org.drools.bpmn2.core.Message;
import org.drools.process.core.event.EventFilter;
import org.drools.process.core.event.EventTypeFilter;
import org.drools.process.core.timer.Timer;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.NodeContainer;
import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.core.node.TimerNode;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -39,6 +43,10 @@
// reuse already created EventNode
handleSignalNode(node, element, uri, localName, parser);
break;
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ // reuse already created EventNode
+ handleMessageNode(node, element, uri, localName, parser);
+ break;
} else if ("timerEventDefinition".equals(nodeName)) {
// create new timerNode
TimerNode timerNode = new TimerNode();
@@ -47,6 +55,14 @@
node = timerNode;
handleTimerNode(node, element, uri, localName, parser);
break;
+ } else if ("conditionalEventDefinition".equals(nodeName)) {
+ // create new stateNode
+ StateNode stateNode = new StateNode();
+ stateNode.setId(node.getId());
+ stateNode.setName(node.getName());
+ node = stateNode;
+ handleStateNode(node, element, uri, localName, parser);
+ break;
}
xmlNode = xmlNode.getNextSibling();
}
@@ -78,6 +94,38 @@
}
}
+ @SuppressWarnings("unchecked")
+ protected void handleMessageNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ EventNode eventNode = (EventNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, eventNode);
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageRef);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageRef);
+ }
+ eventNode.setMetaData("MessageType", message.getType());
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType("Message-" + messageRef);
+ eventFilters.add(eventFilter);
+ eventNode.setEventFilters(eventFilters);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
protected void handleTimerNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser) throws SAXException {
super.handleNode(node, element, uri, localName, parser);
@@ -103,6 +151,28 @@
}
}
+ protected void handleStateNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ StateNode stateNode = (StateNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("conditionalEventDefinition".equals(nodeName)) {
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ while (subNode != null) {
+ String subnodeName = subNode.getNodeName();
+ if ("condition".equals(subnodeName)) {
+ stateNode.setMetaData("Condition", xmlNode.getTextContent());
+ break;
+ }
+ subNode = subNode.getNextSibling();
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, EventNode eventNode) {
// sourceRef
org.w3c.dom.Node subNode = xmlNode.getFirstChild();
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,10 +1,14 @@
package org.drools.bpmn2.xml;
+import java.util.Map;
+
+import org.drools.bpmn2.core.Message;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.NodeContainer;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.node.ActionNode;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -33,6 +37,18 @@
// reuse already created ActionNode
handleSignalNode(node, element, uri, localName, parser);
break;
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ // reuse already created ActionNode
+ handleMessageNode(node, element, uri, localName, parser);
+ break;
+ } else if ("escalationEventDefinition".equals(nodeName)) {
+ // reuse already created ActionNode
+ handleEscalationNode(node, element, uri, localName, parser);
+ break;
+ } else if ("compensateEventDefinition".equals(nodeName)) {
+ // reuse already created ActionNode
+ handleCompensationNode(node, element, uri, localName, parser);
+ break;
}
xmlNode = xmlNode.getNextSibling();
}
@@ -64,6 +80,84 @@
}
}
+ @SuppressWarnings("unchecked")
+ public void handleMessageNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ ActionNode actionNode = (ActionNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataInputAssociation".equals(nodeName)) {
+ readDataInputAssociation(xmlNode, actionNode);
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageRef);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageRef);
+ }
+ String variable = (String) actionNode.getMetaData("MappingVariable");
+ actionNode.setMetaData("MessageType", message.getType());
+ actionNode.setAction(new DroolsConsequenceAction("java",
+ "org.drools.process.instance.impl.WorkItemImpl workItem = new org.drools.process.instance.impl.WorkItemImpl();" + EOL +
+ "workItem.setName(\"Send Task\");" + EOL +
+ "workItem.setParameter(\"MessageType\", \"" + message.getType() + "\");" + EOL +
+ (variable == null ? "" : "workItem.setParameter(\"Message\", " + variable + ");" + EOL) +
+ "((org.drools.process.instance.WorkItemManager) kcontext.getKnowledgeRuntime().getWorkItemManager()).internalExecuteWorkItem(workItem);"));
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ public void handleEscalationNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ ActionNode actionNode = (ActionNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataInputAssociation".equals(nodeName)) {
+ readDataInputAssociation(xmlNode, actionNode);
+ } else if ("escalationEventDefinition".equals(nodeName)) {
+ String faultName = ((Element) xmlNode).getAttribute("escalationCode");
+ if (faultName != null && faultName.trim().length() > 0) {
+ actionNode.setAction(new DroolsConsequenceAction("java",
+ "org.drools.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"" + faultName + "\");" + EOL +
+ "if (scopeInstance != null) {" + EOL +
+ " scopeInstance.handleException(\"" + faultName + "\", null);" + EOL +
+ "} else {" + EOL +
+ " ((org.drools.process.instance.ProcessInstance) kcontext.getProcessInstance()).setState(org.drools.process.instance.ProcessInstance.STATE_ABORTED);" + EOL +
+ "}"));
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ public void handleCompensationNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ ActionNode actionNode = (ActionNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("compensateEventDefinition".equals(nodeName)) {
+ String activityRef = ((Element) xmlNode).getAttribute("activityRef");
+ if (activityRef != null && activityRef.trim().length() > 0) {
+ actionNode.setMetaData("activityRef", activityRef);
+ }
+// boolean waitForCompletion = true;
+// String waitForCompletionString = ((Element) xmlNode).getAttribute("waitForCompletion");
+// if ("false".equals(waitForCompletionString)) {
+// waitForCompletion = false;
+// }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, ActionNode actionNode) {
// sourceRef
org.w3c.dom.Node subNode = xmlNode.getFirstChild();
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -30,6 +30,7 @@
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.HumanTaskNode;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
@@ -95,6 +96,7 @@
List<Lane> lanes = (List<Lane>)
process.getMetaData(LaneHandler.LANES);
assignLanes(process, lanes);
+ postProcessStateNodes(process);
return process;
}
@@ -210,6 +212,21 @@
(cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
"kcontext.getProcessInstance().signalEvent(\"Escalation-" + attachedTo + "-" + escalationCode + "\", null);"));
exceptionScope.setExceptionHandler(escalationCode, exceptionHandler);
+ } else if (type.startsWith("Error-")) {
+ CompositeContextNode compositeNode = (CompositeContextNode) attachedNode;
+ ExceptionScope exceptionScope = (ExceptionScope)
+ compositeNode.getDefaultContext(ExceptionScope.EXCEPTION_SCOPE);
+ if (exceptionScope == null) {
+ exceptionScope = new ExceptionScope();
+ compositeNode.addContext(exceptionScope);
+ compositeNode.setDefaultContext(exceptionScope);
+ }
+ String errorCode = (String) node.getMetaData("ErrorEvent");
+ ActionExceptionHandler exceptionHandler = new ActionExceptionHandler();
+ exceptionHandler.setAction(new DroolsConsequenceAction("java",
+ "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" +
+ "kcontext.getProcessInstance().signalEvent(\"Error-" + attachedTo + "-" + errorCode + "\", null);"));
+ exceptionScope.setExceptionHandler(errorCode, exceptionHandler);
} else if (type.startsWith("Timer-")) {
boolean cancelActivity = (Boolean) node.getMetaData("CancelActivity");
CompositeContextNode compositeNode = (CompositeContextNode) attachedNode;
@@ -245,6 +262,23 @@
assignLanes(process, laneMapping);
}
+ private void postProcessStateNodes(NodeContainer container) {
+ for (Node node: container.getNodes()) {
+ if (node instanceof StateNode) {
+ StateNode stateNode = (StateNode) node;
+ String condition = (String) stateNode.getMetaData("Condition");
+ Constraint constraint = new ConstraintImpl();
+ constraint.setConstraint(condition);
+ constraint.setType("rule");
+ for (org.drools.definition.process.Connection connection: stateNode.getDefaultOutgoingConnections()) {
+ stateNode.setConstraint(connection, constraint);
+ }
+ } else if (node instanceof NodeContainer) {
+ postProcessStateNodes((NodeContainer) node);
+ }
+ }
+ }
+
private void assignLanes(NodeContainer nodeContainer, Map<String, String> laneMapping) {
for (Node node: nodeContainer.getNodes()) {
String lane = null;
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -1,7 +1,9 @@
package org.drools.bpmn2.xml;
import java.util.List;
+import java.util.Map;
+import org.drools.bpmn2.core.Message;
import org.drools.process.core.event.EventTypeFilter;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.ConstraintTrigger;
@@ -9,6 +11,7 @@
import org.drools.workflow.core.node.StartNode;
import org.drools.workflow.core.node.Trigger;
import org.drools.xml.ExtensibleXmlParser;
+import org.drools.xml.ProcessBuildData;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -24,6 +27,7 @@
return StartNode.class;
}
+ @SuppressWarnings("unchecked")
protected void handleNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser) throws SAXException {
super.handleNode(node, element, uri, localName, parser);
@@ -61,6 +65,27 @@
}
startNode.addTrigger(trigger);
}
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ String messageRef = ((Element) xmlNode).getAttribute("messageRef");
+ Map<String, Message> messages = (Map<String, Message>)
+ ((ProcessBuildData) parser.getData()).getMetaData("Messages");
+ if (messages == null) {
+ throw new IllegalArgumentException("No messages found");
+ }
+ Message message = messages.get(messageRef);
+ if (message == null) {
+ throw new IllegalArgumentException("Could not find message " + messageRef);
+ }
+ startNode.setMetaData("MessageType", message.getType());
+ EventTrigger trigger = new EventTrigger();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType("Message-" + messageRef);
+ trigger.addEventFilter(eventFilter);
+ String mapping = (String) startNode.getMetaData("TriggerMapping");
+ if (mapping != null) {
+ trigger.addInMapping(mapping, "event");
+ }
+ startNode.addTrigger(trigger);
}
xmlNode = xmlNode.getNextSibling();
}
@@ -103,8 +128,13 @@
" <dataOutputRefs>_" + startNode.getId() + "_Output</dataOutputRefs>" + EOL +
" </outputSet>" + EOL);
}
- EventTypeFilter filter = (EventTypeFilter) eventTrigger.getEventFilters().get(0);
- xmlDump.append(" <signalEventDefinition signalRef=\"" + filter.getType() + "\" />" + EOL);
+ String type = ((EventTypeFilter) eventTrigger.getEventFilters().get(0)).getType();
+ if (type.startsWith("Message-")) {
+ type = type.substring(8);
+ xmlDump.append(" <messageEventDefinition messageRef=\"" + type + "\"/>" + EOL);
+ } else {
+ xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\" />" + EOL);
+ }
} else {
throw new IllegalArgumentException("Unsupported trigger type " + trigger);
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -15,12 +15,19 @@
import org.drools.process.core.context.swimlane.SwimlaneContext;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.event.EventTypeFilter;
import org.drools.rule.builder.dialect.java.JavaDialect;
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.ActionNode;
import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.EndNode;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.EventTrigger;
import org.drools.workflow.core.node.HumanTaskNode;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.Trigger;
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.Handler;
import org.drools.xml.SemanticModule;
@@ -245,6 +252,42 @@
" <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
}
}
+ } else if (node instanceof EndNode) {
+ String messageType = (String) node.getMetaData("MessageType");
+ if (messageType != null) {
+ xmlDump.append(
+ " <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+ " <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+ }
+ } else if (node instanceof ActionNode) {
+ String messageType = (String) node.getMetaData("MessageType");
+ if (messageType != null) {
+ xmlDump.append(
+ " <itemDefinition id=\"_" + getUniqueNodeId(node) + "_MessageType\" structureRef=\"" + messageType + "\"/>" + EOL +
+ " <message id=\"_" + getUniqueNodeId(node) + "_Message\" structureRef=\"_" + getUniqueNodeId(node) + "_MessageType\" />" + EOL + EOL);
+ }
+ } else if (node instanceof EventNode) {
+ String messageRef = ((EventTypeFilter) ((EventNode) node).getEventFilters().get(0)).getType();
+ messageRef = messageRef.substring(8);
+ String messageType = (String) node.getMetaData("MessageType");
+ xmlDump.append(
+ " <itemDefinition id=\"" + messageRef + "Type\" structureRef=\"" + messageType + "\"/>" + EOL +
+ " <message id=\"" + messageRef + "\" structureRef=\"" + messageRef + "Type\" />" + EOL + EOL);
+ } else if (node instanceof StartNode) {
+ StartNode startNode = (StartNode) node;
+ if (startNode.getTriggers() != null && !startNode.getTriggers().isEmpty()) {
+ Trigger trigger = startNode.getTriggers().get(0);
+ if (trigger instanceof EventTrigger) {
+ String eventType = ((EventTypeFilter) ((EventTrigger) trigger).getEventFilters().get(0)).getType();
+ if (eventType.startsWith("Message-")) {
+ eventType = eventType.substring(8);
+ String messageType = (String) node.getMetaData("MessageType");
+ xmlDump.append(
+ " <itemDefinition id=\"" + eventType + "Type\" structureRef=\"" + messageType + "\"/>" + EOL +
+ " <message id=\"" + eventType + "\" structureRef=\"" + eventType + "Type\" />" + EOL + EOL);
+ }
+ }
+ }
}
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2010-01-19 19:53:18 UTC (rev 31149)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2010-01-19 20:06:10 UTC (rev 31150)
@@ -187,6 +187,14 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testErrorBoundaryEvent() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorBoundaryEventInterrupting.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("ErrorBoundaryEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
public void testTimerBoundaryEvent() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEvent.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -235,6 +243,17 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testIntermediateCatchEventMessage() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventMessage.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ // now signal process instance
+ processInstance.signalEvent("Message-HelloMessage", "SomeValue");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
public void testIntermediateCatchEventTimer() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventTimer.xml");
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -252,6 +271,18 @@
ksession.halt();
}
+ public void testIntermediateCatchEventCondition() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventCondition.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ // now activate condition
+ Person person = new Person();
+ person.setName("Jack");
+ ksession.insert(person);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
public void testErrorEventProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-ErrorEndEvent.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -259,13 +290,20 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
}
- public void testEscalationEventProcess() throws Exception {
+ public void testEscalationEndEventProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-EscalationEndEvent.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ProcessInstance processInstance = ksession.startProcess("EscalationEndEvent");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
}
+ public void testEscalationIntermediateThrowEventProcess() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventEscalation.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ProcessInstance processInstance = ksession.startProcess("EscalationIntermediateThrowEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
+ }
+
public void testGraphicalInformation() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -337,6 +375,32 @@
ksession.startProcess("SignalEndEvent", params);
}
+ public void testMessageStart() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-MessageStart.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.signalEvent("Message-HelloMessage", "NewValue");
+ }
+
+ public void testMessageEnd() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-MessageEndEvent.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", "MyValue");
+ ProcessInstance processInstance = ksession.startProcess("MessageEndEvent", params);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ }
+
+ public void testMessageIntermediateThrow() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventMessage.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Send Task", new SendTaskHandler());
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", "MyValue");
+ ProcessInstance processInstance = ksession.startProcess("MessageIntermediateEvent", params);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ }
+
public void testSignalIntermediateThrow() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventSignal.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ErrorBoundaryEventInterrupting.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="ErrorBoundaryEvent" name="Error Boundary Event Process">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <subProcess id="_2" name="Hello" >
+ <startEvent id="_2-1" name="StartSubProcess"/>
+ <sequenceFlow sourceRef="_2-1" targetRef="_2-2"/>
+ <parallelGateway id="_2-2" gatewayDirection="diverging"/>
+ <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+ <endEvent id="_2-3" name="ErrorEvent">
+ <errorEventDefinition errorCode="MyError"/>
+ </endEvent>
+ <sequenceFlow sourceRef="_2-2" targetRef="_2-4"/>
+ <task id="_2-4" name="Task" tns:taskName="MyTask" />
+ <sequenceFlow sourceRef="_2-4" targetRef="_2-5"/>
+ <endEvent id="_2-5" name="EndEvent"/>
+ </subProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ <boundaryEvent id="_4" name="ErrorEvent" attachedToRef="_2" >
+ <errorEventDefinition errorCode="MyError" />
+ </boundaryEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Goodbye">
+ <script>System.out.println("Error handled");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <endEvent id="_6" name="EndProcess"/>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventCondition.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_3"/>
+ <intermediateCatchEvent id="_3" name="timer">
+ <conditionalEventDefinition>
+ <condition>org.drools.bpmn2.Person(name == "Jack")</condition>
+ </conditionalEventDefinition>
+ </intermediateCatchEvent>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <scriptTask id="_4" name="Event">
+ <script>System.out.println("Condition triggered");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <endEvent id="_5" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventMessage.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventMessage.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEventMessage.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloMessage" structureRef="StringType"/>
+
+ <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <userTask id="_2" name="UserTask">
+ </userTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess"/>
+ <intermediateCatchEvent id="_4" name="event">
+ <dataOutput id="_4_Output" />
+ <dataOutputAssociation>
+ <sourceRef>_4_Output</sourceRef>
+ <targetRef>x</targetRef>
+ </dataOutputAssociation>
+ <outputSet>
+ <dataOutputRefs>_4_Output</dataOutputRefs>
+ </outputSet>
+ <messageEventDefinition messageRef="HelloMessage" />
+ </intermediateCatchEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Event">
+ <script>System.out.println(x);</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <endEvent id="_6" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventEscalation.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="EscalationIntermediateThrowEvent" name="Escalation Intermediate Throw Event Process">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <intermediateThrowEvent id="_2" name="EscalationEvent">
+ <escalationEventDefinition escalationCode="MyEscalation"/>
+ </intermediateThrowEvent>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndEvent"/>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventMessage.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloMessage" structureRef="StringType"/>
+
+ <process id="MessageIntermediateEvent" name="Message Intermediate Throw Event Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <intermediateThrowEvent id="_2" name="MessageEvent">
+ <dataInput id="_2_Input" />
+ <dataInputAssociation>
+ <sourceRef>x</sourceRef>
+ <targetRef>_2_Input</targetRef>
+ </dataInputAssociation>
+ <inputSet>
+ <dataInputRefs>_2_Input</dataInputRefs>
+ </inputSet>
+ <messageEventDefinition messageRef="HelloMessage"/>
+ </intermediateThrowEvent>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndEvent"/>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageEndEvent.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloMessage" structureRef="StringType"/>
+
+ <process id="MessageEndEvent" name="Message End Event Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <endEvent id="_2" name="MessageEvent">
+ <dataInput id="_2_Input" />
+ <dataInputAssociation>
+ <sourceRef>x</sourceRef>
+ <targetRef>_2_Input</targetRef>
+ </dataInputAssociation>
+ <inputSet>
+ <dataInputRefs>_2_Input</dataInputRefs>
+ </inputSet>
+ <messageEventDefinition messageRef="HelloMessage"/>
+ </endEvent>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-MessageStart.xml 2010-01-19 20:06:10 UTC (rev 31150)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <itemDefinition id="StringType" structureRef="java.lang.String" />
+ <message id="HelloMessage" structureRef="StringType"/>
+
+ <process id="Minimal" name="Minimal Process" processType="executable" tns:packageName="com.sample">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess">
+ <dataOutput id="_1_Output" />
+ <dataOutputAssociation>
+ <sourceRef>_1_Output</sourceRef>
+ <targetRef>x</targetRef>
+ </dataOutputAssociation>
+ <outputSet>
+ <dataOutputRefs>_1_Output</dataOutputRefs>
+ </outputSet>
+ <messageEventDefinition messageRef="HelloMessage" />
+ </startEvent>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <scriptTask id="_2" name="Hello">
+ <script>System.out.println("x = " + x);</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
More information about the jboss-svn-commits
mailing list