[jboss-svn-commits] JBL Code SVN: r30831 - in labs/jbossrules/trunk: drools-core/src/main/java/org/drools/workflow/core/node and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Dec 26 17:44:43 EST 2009
Author: KrisVerlaenen
Date: 2009-12-26 17:44:43 -0500 (Sat, 26 Dec 2009)
New Revision: 30831
Added:
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/BoundaryEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java
labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/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/FaultNodeHandler.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/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/ReceiveTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.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/SplitHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml
Log:
- added some more BPMN2 nodes
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/context/variable/Variable.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -17,6 +17,8 @@
*/
import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
import org.drools.process.core.TypeObject;
import org.drools.process.core.ValueObject;
@@ -35,6 +37,7 @@
private String name;
private DataType type;
private Object value;
+ private Map<String, Object> metaData = new HashMap<String, Object>();
public Variable() {
this.type = UndefinedDataType.getInstance();
@@ -76,6 +79,14 @@
}
}
+ public void setMetaData(String name, Object value) {
+ this.metaData.put(name, value);
+ }
+
+ public Object getMetaData(String name) {
+ return this.metaData.get(name);
+ }
+
public String toString() {
return this.name;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -35,6 +35,7 @@
private String faultName;
private String faultVariable;
+ private boolean terminateParent = false;
public String getFaultVariable() {
return faultVariable;
@@ -52,7 +53,15 @@
this.faultName = faultName;
}
- public String[] getActionTypes() {
+ public boolean isTerminateParent() {
+ return terminateParent;
+ }
+
+ public void setTerminateParent(boolean terminateParent) {
+ this.terminateParent = terminateParent;
+ }
+
+ public String[] getActionTypes() {
return EVENT_TYPES;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EndNodeInstance.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -23,14 +23,14 @@
import org.drools.runtime.process.NodeInstance;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.instance.NodeInstanceContainer;
-import org.drools.workflow.instance.impl.NodeInstanceImpl;
+import org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl;
/**
* Runtime counterpart of an end node.
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class EndNodeInstance extends NodeInstanceImpl {
+public class EndNodeInstance extends ExtendedNodeInstanceImpl {
private static final long serialVersionUID = 400L;
@@ -39,6 +39,7 @@
}
public void internalTrigger(final NodeInstance from, String type) {
+ super.internalTrigger(from, type);
if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
throw new IllegalArgumentException(
"An EndNode only accepts default incoming connections!");
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/FaultNodeInstance.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -16,12 +16,15 @@
* limitations under the License.
*/
+import java.util.Collection;
+
import org.drools.process.core.context.exception.ExceptionScope;
import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.ProcessInstance;
import org.drools.process.instance.context.exception.ExceptionScopeInstance;
import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.runtime.process.NodeInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
import org.drools.workflow.core.node.FaultNode;
import org.drools.workflow.instance.NodeInstanceContainer;
import org.drools.workflow.instance.impl.NodeInstanceImpl;
@@ -46,7 +49,18 @@
}
String faultName = getFaultName();
ExceptionScopeInstance exceptionScopeInstance = getExceptionScopeInstance(faultName);
- ((NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
+ NodeInstanceContainer nodeInstanceContainer = (NodeInstanceContainer) getNodeInstanceContainer();
+ nodeInstanceContainer.removeNodeInstance(this);
+ if (getFaultNode().isTerminateParent()) {
+ if (nodeInstanceContainer instanceof CompositeNodeInstance) {
+ ((CompositeNodeInstance) nodeInstanceContainer).cancel();
+ } else if (nodeInstanceContainer instanceof WorkflowProcessInstance) {
+ Collection<NodeInstance> nodeInstances = ((WorkflowProcessInstance) nodeInstanceContainer).getNodeInstances();
+ for (NodeInstance nodeInstance: nodeInstances) {
+ ((org.drools.workflow.instance.NodeInstance) nodeInstance).cancel();
+ }
+ }
+ }
if (exceptionScopeInstance != null) {
handleException(faultName, exceptionScopeInstance);
} else {
Modified: labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml
===================================================================
--- labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-docs/drools-docs-flow/src/main/docbook/en-US/Chapter-BPMN2/Chapter-BPMN2.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -18,9 +18,12 @@
<itemizedlist>
<listitem>Events
<itemizedlist>
- <listitem>Start Event (None)</listitem>
- <listitem>End Event (Terminate, None, Error)</listitem>
- <listitem>Intermediate Event (Signal, Timer)</listitem>
+ <listitem>Start Event (None, Conditional, Signal)</listitem>
+ <listitem>End Event (None, Terminate, Error, Escalation, Signal)</listitem>
+ <listitem>Intermediate Catch Event (Signal, Timer)</listitem>
+ <listitem>Intermediate Throw Event (None, Signal)</listitem>
+ <listitem>Non-interrupting Boundary Event (Escalation, Timer)</listitem>
+ <listitem>Interrupting Boundary Event ()</listitem>
</itemizedlist>
</listitem>
<listitem>Activities
@@ -42,6 +45,7 @@
<listitem>Diverging
<itemizedlist>
<listitem>Exclusive (Java, MVEL or XPath expression language)</listitem>
+ <listitem>Inclusive (Java, MVEL or XPath expression language)</listitem>
<listitem>Parallel</listitem>
</itemizedlist>
</listitem>
@@ -60,6 +64,7 @@
<itemizedlist>
<listitem>Java type language</listitem>
<listitem>Process properties</listitem>
+ <listitem>Embedded Sub-Process properties</listitem>
<listitem>Activity properties</listitem>
</itemizedlist>
</listitem>
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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -23,7 +23,7 @@
public AbstractNodeHandler() {
initValidParents();
initValidPeers();
- this.allowNesting = false;
+ this.allowNesting = true;
}
protected void initValidParents() {
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,69 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.rule.builder.dialect.java.JavaDialect;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.node.ActionNode;
+import org.drools.xml.XmlDumper;
+import org.xml.sax.Attributes;
+
+public class ActionNodeHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ throw new IllegalArgumentException("Reading in should be handled by specific handlers");
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return ActionNode.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ ActionNode actionNode = (ActionNode) node;
+ DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
+ if (action != null) {
+ String s = action.getConsequence();
+ if ("".equals(s)) {
+ writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+ endNode(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);
+ String variable = null;
+ if (!s.startsWith("null")) {
+ variable = s.substring(0, s.indexOf(")"));
+ 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(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+ endNode("intermediateThrowEvent", xmlDump);
+ } else {
+ writeNode("scriptTask", actionNode, xmlDump, includeMeta);
+ if (JavaDialect.ID.equals(action.getDialect())) {
+ xmlDump.append("scriptLanguage=\"" + XmlBPMNProcessDumper.JAVA_LANGUAGE + "\" ");
+ }
+ if (action.getConsequence() != null) {
+ xmlDump.append(">" + EOL +
+ " <script>" + XmlDumper.replaceIllegalChars(action.getConsequence()) + "</script>" + EOL);
+ endNode("scriptTask", xmlDump);
+ } else {
+ endNode(xmlDump);
+ }
+ }
+ } else {
+ writeNode("scriptTask", actionNode, xmlDump, includeMeta);
+ endNode(xmlDump);
+ }
+ }
+
+}
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 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMN2SemanticModule.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,5 +1,6 @@
package org.drools.bpmn2.xml;
+import org.drools.workflow.core.node.ActionNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.FaultNode;
@@ -22,6 +23,7 @@
addHandler("startEvent", new StartEventHandler());
addHandler("endEvent", new EndEventHandler());
addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+ addHandler("inclusiveGateway", new InclusiveGatewayHandler());
addHandler("parallelGateway", new ParallelGatewayHandler());
addHandler("complexGateway", new ComplexGatewayHandler());
addHandler("scriptTask", new ScriptTaskHandler());
@@ -36,7 +38,10 @@
addHandler("subProcess", new SubProcessHandler());
addHandler("adHocSubProcess", new AdHocSubProcessHandler());
addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
-
+ addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
+ addHandler("boundaryEvent", new BoundaryEventHandler());
+ addHandler("dataObject", new DataObjectHandler());
+
addHandler("sequenceFlow", new SequenceFlowHandler());
addHandler("itemDefinition", new ItemDefinitionHandler());
@@ -52,6 +57,7 @@
handlersByClass.put(EndNode.class, new EndNodeHandler());
handlersByClass.put(FaultNode.class, new FaultNodeHandler());
handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
+ handlersByClass.put(ActionNode.class, new ActionNodeHandler());
}
}
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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,5 +1,6 @@
package org.drools.bpmn2.xml;
+import org.drools.workflow.core.node.ActionNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.FaultNode;
@@ -22,6 +23,7 @@
addHandler("startEvent", new StartEventHandler());
addHandler("endEvent", new EndEventHandler());
addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
+ addHandler("inclusiveGateway", new InclusiveGatewayHandler());
addHandler("parallelGateway", new ParallelGatewayHandler());
addHandler("complexGateway", new ComplexGatewayHandler());
addHandler("scriptTask", new ScriptTaskHandler());
@@ -36,6 +38,9 @@
addHandler("subProcess", new SubProcessHandler());
addHandler("adHocSubProcess", new AdHocSubProcessHandler());
addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
+ addHandler("intermediateThrowEvent", new IntermediateThrowEventHandler());
+ addHandler("boundaryEvent", new BoundaryEventHandler());
+ addHandler("dataObject", new DataObjectHandler());
addHandler("sequenceFlow", new SequenceFlowHandler());
@@ -52,6 +57,7 @@
handlersByClass.put(EndNode.class, new EndNodeHandler());
handlersByClass.put(FaultNode.class, new FaultNodeHandler());
handlersByClass.put(WorkItemNode.class, new WorkItemNodeHandler());
+ handlersByClass.put(ActionNode.class, new ActionNodeHandler());
}
}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,121 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.process.core.event.EventFilter;
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.EventNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class BoundaryEventHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new EventNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return EventNode.class;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ final Element element = parser.endElementBuilder();
+ Node node = (Node) parser.getCurrent();
+ String attachedTo = element.getAttribute("attachedToRef");
+ String cancelActivityString = element.getAttribute("cancelActivity");
+ boolean cancelActivity = true;
+ if ("false".equals(cancelActivityString)) {
+ cancelActivity = false;
+ }
+ // 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 ("escalationEventDefinition".equals(nodeName)) {
+ // reuse already created EventNode
+ handleEscalationNode(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;
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+ nodeContainer.addNode(node);
+ return node;
+ }
+
+ protected void handleEscalationNode(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 ("escalationEventDefinition".equals(nodeName)) {
+ String type = ((Element) xmlNode).getAttribute("escalationCode");
+ if (type != null && type.trim().length() > 0) {
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType("Escalation-" + attachedTo + "-" + type);
+ eventFilters.add(eventFilter);
+ eventNode.setEventFilters(eventFilters);
+ eventNode.setMetaData("EscalationEvent", 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 {
+ 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 ("timerEventDefinition".equals(nodeName)) {
+ String timeCycle = null;
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ while (subNode instanceof Element) {
+ String subNodeName = subNode.getNodeName();
+ if ("timeCycle".equals(subNodeName)) {
+ timeCycle = subNode.getTextContent();
+ break;
+ }
+ subNode = subNode.getNextSibling();
+ }
+ if (timeCycle != null && timeCycle.trim().length() > 0) {
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType("Timer-" + attachedTo + "-" + timeCycle);
+ eventFilters.add(eventFilter);
+ eventNode.setEventFilters(eventFilters);
+ eventNode.setMetaData("TimeCycle", timeCycle);
+ }
+ }
+ 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/BusinessRuleTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -32,7 +32,7 @@
RuleSetNode ruleSetNode = (RuleSetNode) node;
writeNode("businessRuleTask", ruleSetNode, xmlDump, includeMeta);
if (ruleSetNode.getRuleFlowGroup() != null) {
- xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" ");
+ xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" implementation=\"Other\" ");
}
endNode(xmlDump);
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/DataObjectHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,89 @@
+package org.drools.bpmn2.xml;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.bpmn2.core.ItemDefinition;
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.ContextContainer;
+import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.core.datatype.DataType;
+import org.drools.process.core.datatype.impl.type.ObjectDataType;
+import org.drools.workflow.core.Node;
+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 DataObjectHandler extends BaseAbstractHandler implements Handler {
+
+ public DataObjectHandler() {
+ initValidParents();
+ initValidPeers();
+ this.allowNesting = false;
+ }
+
+ protected void initValidParents() {
+ this.validParents = new HashSet<Class<?>>();
+ this.validParents.add(ContextContainer.class);
+ }
+
+ protected void initValidPeers() {
+ this.validPeers = new HashSet<Class<?>>();
+ this.validPeers.add(null);
+ this.validPeers.add(Variable.class);
+ this.validPeers.add(Node.class);
+ this.validPeers.add(SequenceFlow.class);
+ }
+
+ @SuppressWarnings("unchecked")
+ 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 itemSubjectRef = attrs.getValue("itemSubjectRef");
+
+ Object parent = parser.getParent();
+ if (parent instanceof ContextContainer) {
+ ContextContainer contextContainer = (ContextContainer) parent;
+ VariableScope variableScope = (VariableScope)
+ contextContainer.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ List variables = variableScope.getVariables();
+ Variable variable = new Variable();
+ variable.setMetaData("DataObject", "true");
+ variable.setName(id);
+ // retrieve type from item definition
+ DataType dataType = new ObjectDataType();
+ Map<String, ItemDefinition> itemDefinitions = (Map<String, ItemDefinition>)
+ ((ProcessBuildData) parser.getData()).getMetaData("ItemDefinitions");
+ if (itemDefinitions != null) {
+ ItemDefinition itemDefinition = itemDefinitions.get(itemSubjectRef);
+ if (itemDefinition != null) {
+ dataType = new ObjectDataType(itemDefinition.getStructureRef());
+ }
+ }
+ variable.setType(dataType);
+ variables.add(variable);
+ return variable;
+ }
+
+ return new Variable();
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ parser.endElementBuilder();
+ return parser.getCurrent();
+ }
+
+ public Class<?> generateNodeFor() {
+ return Variable.class;
+ }
+
+}
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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndEventHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,7 +1,12 @@
package org.drools.bpmn2.xml;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.workflow.core.DroolsAction;
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.EndNode;
import org.drools.workflow.core.node.FaultNode;
import org.drools.xml.ExtensibleXmlParser;
@@ -33,18 +38,32 @@
while (xmlNode != null) {
String nodeName = xmlNode.getNodeName();
if ("terminateEventDefinition".equals(nodeName)) {
- // reuse already create EventNode
+ // reuse already created EndNode
handleTerminateNode(node, element, uri, localName, parser);
break;
+ } else if ("signalEventDefinition".equals(nodeName)) {
+ handleSignalNode(node, element, uri, localName, parser);
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ handleMessageNode(node, element, uri, localName, parser);
} else if ("errorEventDefinition".equals(nodeName)) {
- // create new timerNode
+ // create new faultNode
FaultNode faultNode = new FaultNode();
faultNode.setId(node.getId());
faultNode.setName(node.getName());
+ faultNode.setTerminateParent(true);
node = faultNode;
super.handleNode(node, element, uri, localName, parser);
handleErrorNode(node, element, uri, localName, parser);
break;
+ } else if ("escalationEventDefinition".equals(nodeName)) {
+ // create new faultNode
+ FaultNode faultNode = new FaultNode();
+ faultNode.setId(node.getId());
+ faultNode.setName(node.getName());
+ node = faultNode;
+ super.handleNode(node, element, uri, localName, parser);
+ handleEscalationNode(node, element, uri, localName, parser);
+ break;
}
xmlNode = xmlNode.getNextSibling();
}
@@ -58,6 +77,57 @@
((EndNode) node).setTerminate(true);
}
+ public void handleSignalNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ EndNode endNode = (EndNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataInputAssociation".equals(nodeName)) {
+ readEndDataInputAssociation(xmlNode, endNode);
+ } else if ("signalEventDefinition".equals(nodeName)) {
+ String signalName = ((Element) xmlNode).getAttribute("signalRef");
+ String variable = (String) endNode.getMetaData("MappingVariable");
+ List<DroolsAction> actions = new ArrayList<DroolsAction>();
+ actions.add(new DroolsConsequenceAction("mvel",
+ "kcontext.getKnowledgeRuntime().signalEvent(\""
+ + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+ endNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ public void handleMessageNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ EndNode endNode = (EndNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataInputAssociation".equals(nodeName)) {
+ readEndDataInputAssociation(xmlNode, endNode);
+ } else if ("messageEventDefinition".equals(nodeName)) {
+ String signalName = ((Element) xmlNode).getAttribute("messageRef");
+ String variable = (String) endNode.getMetaData("MappingVariable");
+ List<DroolsAction> actions = new ArrayList<DroolsAction>();
+ actions.add(new DroolsConsequenceAction("mvel",
+ "kcontext.getKnowledgeRuntime().signalEvent(\""
+ + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+ endNode.setActions(EndNode.EVENT_NODE_ENTER, actions);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ protected void readEndDataInputAssociation(org.w3c.dom.Node xmlNode, EndNode endNode) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ String eventVariable = subNode.getTextContent();
+ if (eventVariable != null && eventVariable.trim().length() > 0) {
+ endNode.setMetaData("MappingVariable", eventVariable);
+ }
+ }
+
public void handleErrorNode(final Node node, final Element element, final String uri,
final String localName, final ExtensibleXmlParser parser) throws SAXException {
FaultNode faultNode = (FaultNode) node;
@@ -65,18 +135,42 @@
while (xmlNode != null) {
String nodeName = xmlNode.getNodeName();
if ("dataInputAssociation".equals(nodeName)) {
- readDataOutputAssociation(xmlNode, faultNode);
+ readFaultDataInputAssociation(xmlNode, faultNode);
} else if ("errorEventDefinition".equals(nodeName)) {
String faultName = ((Element) xmlNode).getAttribute("errorCode");
if (faultName != null && faultName.trim().length() > 0) {
faultNode.setFaultName(faultName);
}
- }
+ faultNode.setTerminateParent(true);
+ } else if ("escalationEventDefinition".equals(nodeName)) {
+ String faultName = ((Element) xmlNode).getAttribute("escalationCode");
+ if (faultName != null && faultName.trim().length() > 0) {
+ faultNode.setFaultName(faultName);
+ }
+ }
xmlNode = xmlNode.getNextSibling();
}
}
- protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, FaultNode faultNode) {
+ public void handleEscalationNode(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)) {
+ readFaultDataInputAssociation(xmlNode, faultNode);
+ } else if ("escalationEventDefinition".equals(nodeName)) {
+ String faultName = ((Element) xmlNode).getAttribute("escalationCode");
+ if (faultName != null && faultName.trim().length() > 0) {
+ faultNode.setFaultName(faultName);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ protected void readFaultDataInputAssociation(org.w3c.dom.Node xmlNode, FaultNode faultNode) {
// sourceRef
org.w3c.dom.Node subNode = xmlNode.getFirstChild();
String faultVariable = subNode.getTextContent();
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 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EndNodeHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,6 +1,10 @@
package org.drools.bpmn2.xml;
+import java.util.List;
+
+import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.node.EndNode;
import org.xml.sax.Attributes;
@@ -23,7 +27,38 @@
xmlDump.append(" <terminateEventDefinition/>" + EOL);
endNode("endEvent", xmlDump);
} else {
- endNode(xmlDump);
+ List<DroolsAction> actions = endNode.getActions(EndNode.EVENT_NODE_ENTER);
+ if (actions != null && !actions.isEmpty()) {
+ if (actions.size() == 1) {
+ DroolsConsequenceAction action = (DroolsConsequenceAction) actions.get(0);
+ String s = action.getConsequence();
+ if (s.startsWith("kcontext.getKnowledgeRuntime().signalEvent(\"")) {
+ xmlDump.append(">" + EOL);
+ s = s.substring(44);
+ String type = s.substring(0, s.indexOf("\""));
+ s = s.substring(s.indexOf(",") + 2);
+ String variable = null;
+ if (!s.startsWith("null")) {
+ variable = s.substring(0, s.indexOf(")"));
+ 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(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+ endNode("endEvent", xmlDump);
+ } else {
+ throw new IllegalArgumentException("Unknown action " + s);
+ }
+ }
+ } else {
+ endNode(xmlDump);
+ }
}
}
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 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -18,25 +18,56 @@
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);
+ String attachedTo = (String) eventNode.getMetaData("AttachedTo");
+ if (attachedTo == null) {
+ 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);
+ } else {
+ String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
+ if (type.startsWith("Escalation-")) {
+ type = type.substring(attachedTo.length() + 12);
+ boolean cancelActivity = (Boolean) eventNode.getMetaData("CancelActivity");
+ writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
+ xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
+ if (!cancelActivity) {
+ xmlDump.append("cancelActivity=\"false\" ");
+ }
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <escalationEventDefinition escalationCode=\"" + 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 + "\" ");
+ if (!cancelActivity) {
+ xmlDump.append("cancelActivity=\"false\" ");
+ }
+ xmlDump.append(">" + EOL);
+ xmlDump.append(
+ " <timerEventDefinition>" + EOL +
+ " <timeCycle xs:type=\"tFormalExpression\">" + eventNode.getMetaData("TimeCycle") + "</timeCycle>" + EOL +
+ " </timerEventDefinition>" + EOL);
+ endNode("boundaryEvent", xmlDump);
+ }
}
- if (eventNode.getEventFilters().size() > 0) {
- String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
- xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
-
- }
- endNode("intermediateCatchEvent", xmlDump);
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/FaultNodeHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -30,7 +30,11 @@
xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(faultNode) + "_Input</dataInputRefs>" + EOL);
xmlDump.append(" </inputSet>" + EOL);
}
- xmlDump.append(" <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+ if (faultNode.isTerminateParent()) {
+ xmlDump.append(" <errorEventDefinition errorCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+ } else {
+ xmlDump.append(" <escalationEventDefinition escalationCode=\"" + faultNode.getFaultName() + "\" />" + EOL);
+ }
endNode("endEvent", xmlDump);
}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/InclusiveGatewayHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,30 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class InclusiveGatewayHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ final String type = attrs.getValue("gatewayDirection");
+ if ("diverging".equals(type)) {
+ Split split = new Split();
+ split.setType(Split.TYPE_OR);
+ return split;
+ } else {
+ throw new IllegalArgumentException(
+ "Unknown gateway direction: " + type);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Node.class;
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ 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/IntermediateCatchEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -36,7 +36,7 @@
while (xmlNode != null) {
String nodeName = xmlNode.getNodeName();
if ("signalEventDefinition".equals(nodeName)) {
- // reuse already create EventNode
+ // reuse already created EventNode
handleSignalNode(node, element, uri, localName, parser);
break;
} else if ("timerEventDefinition".equals(nodeName)) {
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,80 @@
+package org.drools.bpmn2.xml;
+
+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.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class IntermediateThrowEventHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new ActionNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return Node.class;
+ }
+
+ public Object end(final String uri, final String localName,
+ final ExtensibleXmlParser parser) throws SAXException {
+ final Element element = parser.endElementBuilder();
+ ActionNode node = (ActionNode) 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 created ActionNode
+ handleSignalNode(node, element, uri, localName, parser);
+ break;
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ // none event definition
+ if (node.getAction() == null) {
+ node.setAction(new DroolsConsequenceAction("mvel", ""));
+ }
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
+ nodeContainer.addNode(node);
+ return node;
+ }
+
+ public void handleSignalNode(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 ("signalEventDefinition".equals(nodeName)) {
+ String signalName = ((Element) xmlNode).getAttribute("signalRef");
+ String variable = (String) actionNode.getMetaData("MappingVariable");
+ actionNode.setAction(new DroolsConsequenceAction("mvel",
+ "kcontext.getKnowledgeRuntime().signalEvent(\""
+ + signalName + "\", " + (variable == null ? "null" : variable) + ")"));
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, ActionNode actionNode) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ String eventVariable = subNode.getTextContent();
+ if (eventVariable != null && eventVariable.trim().length() > 0) {
+ actionNode.setMetaData("MappingVariable", eventVariable);
+ }
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ throw new IllegalArgumentException("Writing out should be handled by action node 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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -13,14 +13,21 @@
import org.drools.bpmn2.core.SequenceFlow;
import org.drools.definition.process.Node;
import org.drools.definition.process.NodeContainer;
+import org.drools.process.core.context.exception.ActionExceptionHandler;
+import org.drools.process.core.context.exception.ExceptionScope;
import org.drools.process.core.context.swimlane.Swimlane;
+import org.drools.process.core.event.EventTypeFilter;
+import org.drools.process.core.timer.Timer;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Connection;
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.impl.ConnectionImpl;
import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.CompositeContextNode;
+import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.HumanTaskNode;
import org.drools.workflow.core.node.Split;
import org.drools.xml.BaseAbstractHandler;
@@ -84,6 +91,7 @@
List<SequenceFlow> connections = (List<SequenceFlow>)
process.getMetaData(CONNECTIONS);
linkConnections(process, connections);
+ linkBoundaryEvents(process);
List<Lane> lanes = (List<Lane>)
process.getMetaData(LaneHandler.LANES);
assignLanes(process, lanes);
@@ -160,6 +168,63 @@
}
}
+ public static void linkBoundaryEvents(NodeContainer nodeContainer) {
+ for (Node node: nodeContainer.getNodes()) {
+ if (node instanceof EventNode) {
+ String type = ((EventTypeFilter)
+ ((EventNode) node).getEventFilters().get(0)).getType();
+ String attachedTo = (String) node.getMetaData("AttachedTo");
+ if (attachedTo != null) {
+ Node attachedNode = null;
+ try {
+ // remove starting _
+ String attachedToString = attachedTo.substring(1);
+ // remove ids of parent nodes
+ attachedToString = attachedToString.substring(attachedToString.lastIndexOf("-") + 1);
+ attachedNode = nodeContainer.getNode(new Integer(attachedToString));
+ } catch (NumberFormatException e) {
+ // try looking for a node with same "UniqueId" (in metadata)
+ for (Node subnode: nodeContainer.getNodes()) {
+ if (attachedTo.equals(subnode.getMetaData("UniqueId"))) {
+ attachedNode = subnode;
+ break;
+ }
+ }
+ if (attachedNode == null) {
+ throw new IllegalArgumentException("Could not find node to attach to: " + attachedTo);
+ }
+ }
+ if (type.startsWith("Escalation-")) {
+ boolean cancelActivity = (Boolean) node.getMetaData("CancelActivity");
+ 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 escalationCode = (String) node.getMetaData("EscalationEvent");
+ ActionExceptionHandler exceptionHandler = new ActionExceptionHandler();
+ exceptionHandler.setAction(new DroolsConsequenceAction("java",
+ (cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
+ "kcontext.getProcessInstance().signalEvent(\"Escalation-" + attachedTo + "-" + escalationCode + "\", null);"));
+ exceptionScope.setExceptionHandler(escalationCode, exceptionHandler);
+ } else if (type.startsWith("Timer-")) {
+ boolean cancelActivity = (Boolean) node.getMetaData("CancelActivity");
+ CompositeContextNode compositeNode = (CompositeContextNode) attachedNode;
+ String timeCycle = (String) node.getMetaData("TimeCycle");
+ Timer timer = new Timer();
+ timer.setDelay(timeCycle);
+ compositeNode.addTimer(timer, new DroolsConsequenceAction("java",
+ (cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
+ "kcontext.getProcessInstance().signalEvent(\"Timer-" + attachedTo + "-" + timeCycle + "\", null);"));
+ }
+ }
+ }
+ }
+ }
+
private void assignLanes(RuleFlowProcess process, List<Lane> lanes) {
List<String> laneNames = new ArrayList<String>();
Map<String, String> laneMapping = new HashMap<String, String>();
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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/PropertyHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,16 +1,16 @@
package org.drools.bpmn2.xml;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import org.drools.bpmn2.core.ItemDefinition;
import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.process.core.ContextContainer;
import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.core.datatype.DataType;
import org.drools.process.core.datatype.impl.type.ObjectDataType;
-import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.xml.BaseAbstractHandler;
@@ -30,7 +30,7 @@
protected void initValidParents() {
this.validParents = new HashSet<Class<?>>();
- this.validParents.add(RuleFlowProcess.class);
+ this.validParents.add(ContextContainer.class);
this.validParents.add(WorkItemNode.class);
}
@@ -52,9 +52,11 @@
final String itemSubjectRef = attrs.getValue("itemSubjectRef");
Object parent = parser.getParent();
- if (parent instanceof RuleFlowProcess) {
- RuleFlowProcess process = (RuleFlowProcess) parent;
- List variables = process.getVariableScope().getVariables();
+ if (parent instanceof ContextContainer) {
+ ContextContainer contextContainer = (ContextContainer) parent;
+ VariableScope variableScope = (VariableScope)
+ contextContainer.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ List variables = variableScope.getVariables();
Variable variable = new Variable();
variable.setName(id);
// retrieve type from item definition
Modified: 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 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ReceiveTaskHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -45,6 +45,6 @@
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+ throw new IllegalArgumentException("Writing out should be handled by WorkItemNodeHandler");
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ScriptTaskHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -5,7 +5,6 @@
import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.node.ActionNode;
import org.drools.xml.ExtensibleXmlParser;
-import org.drools.xml.XmlDumper;
import org.w3c.dom.Element;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -20,7 +19,7 @@
@SuppressWarnings("unchecked")
public Class generateNodeFor() {
- return ActionNode.class;
+ return Node.class;
}
protected void handleNode(final Node node, final Element element, final String uri,
@@ -39,27 +38,13 @@
org.w3c.dom.Node xmlNode = element.getFirstChild();
if (xmlNode instanceof Element) {
action.setConsequence(xmlNode.getTextContent());
+ } else {
+ action.setConsequence("");
}
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- ActionNode actionNode = (ActionNode) node;
- writeNode("scriptTask", actionNode, xmlDump, includeMeta);
- DroolsConsequenceAction action = (DroolsConsequenceAction) actionNode.getAction();
- if (action != null) {
- if (JavaDialect.ID.equals(action.getDialect())) {
- xmlDump.append("scriptLanguage=\"" + XmlBPMNProcessDumper.JAVA_LANGUAGE + "\" ");
- }
- if (action.getConsequence() != null) {
- xmlDump.append(">" + EOL +
- " <script>" + XmlDumper.replaceIllegalChars(action.getConsequence()) + "</script>" + EOL);
- endNode("scriptTask", xmlDump);
- } else {
- endNode(xmlDump);
- }
- } else {
- endNode(xmlDump);
- }
+ throw new IllegalArgumentException("Writing out should be handled by action node handler");
}
}
Modified: 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 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SendTaskHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -45,6 +45,6 @@
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
- throw new IllegalArgumentException("Writing out should be handled by TaskHandler");
+ throw new IllegalArgumentException("Writing out should be handled by WorkItemNodeHandler");
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -24,7 +24,10 @@
case Split.TYPE_XOR:
writeNode("exclusiveGateway", node, xmlDump, includeMeta);
break;
- default:
+ case Split.TYPE_OR:
+ writeNode("inclusiveGateway", node, xmlDump, includeMeta);
+ break;
+ default:
writeNode("complexGateway", node, xmlDump, includeMeta);
}
xmlDump.append("gatewayDirection=\"diverging\" ");
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 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/StartEventHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,8 +1,17 @@
package org.drools.bpmn2.xml;
+import java.util.List;
+
+import org.drools.process.core.event.EventTypeFilter;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.ConstraintTrigger;
+import org.drools.workflow.core.node.EventTrigger;
import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.Trigger;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
public class StartEventHandler extends AbstractNodeHandler {
@@ -15,10 +24,94 @@
return StartNode.class;
}
- public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ 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);
+ StartNode startNode = (StartNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, startNode);
+ } else if ("conditionalEventDefinition".equals(nodeName)) {
+ String constraint = null;
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ while (subNode != null) {
+ String subnodeName = subNode.getNodeName();
+ if ("condition".equals(subnodeName)) {
+ constraint = xmlNode.getTextContent();
+ break;
+ }
+ subNode = subNode.getNextSibling();
+ }
+ ConstraintTrigger trigger = new ConstraintTrigger();
+ trigger.setConstraint(constraint);
+ startNode.addTrigger(trigger);
+ break;
+ } else if ("signalEventDefinition".equals(nodeName)) {
+ String type = ((Element) xmlNode).getAttribute("signalRef");
+ if (type != null && type.trim().length() > 0) {
+ EventTrigger trigger = new EventTrigger();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType(type);
+ trigger.addEventFilter(eventFilter);
+ String mapping = (String) startNode.getMetaData("TriggerMapping");
+ if (mapping != null) {
+ trigger.addInMapping(mapping, "event");
+ }
+ startNode.addTrigger(trigger);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, StartNode startNode) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ // targetRef
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ startNode.setMetaData("TriggerMapping", to);
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
StartNode startNode = (StartNode) node;
writeNode("startEvent", startNode, xmlDump, includeMeta);
- endNode(xmlDump);
+ List<Trigger> triggers = startNode.getTriggers();
+ if (triggers != null) {
+ xmlDump.append(">" + EOL);
+ if (triggers.size() > 1) {
+ throw new IllegalArgumentException("Multiple start triggers not supported");
+ }
+ Trigger trigger = triggers.get(0);
+ if (trigger instanceof ConstraintTrigger) {
+ xmlDump.append(" <conditionalEventDefinition>" + EOL);
+ xmlDump.append(" <condition xs:type=\"tFormalExpression\" language=\"" + XmlBPMNProcessDumper.RULE_LANGUAGE + "\">" + ((ConstraintTrigger) trigger).getConstraint() + "</condition>" + EOL);
+ xmlDump.append(" </conditionalEventDefinition>" + EOL);
+ } else if (trigger instanceof EventTrigger) {
+ EventTrigger eventTrigger = (EventTrigger) trigger;
+ if (!trigger.getInMappings().isEmpty()) {
+ String mapping = eventTrigger.getInMappings().keySet().iterator().next();
+ xmlDump.append(
+ " <dataOutput id=\"_" + startNode.getId() + "_Output\" />" + EOL +
+ " <dataOutputAssociation>" + EOL +
+ " <sourceRef>_" + startNode.getId() + "_Output</sourceRef>" + EOL +
+ " <targetRef>" + mapping + "</targetRef>" + EOL +
+ " </dataOutputAssociation>" + EOL +
+ " <outputSet>" + EOL +
+ " <dataOutputRefs>_" + startNode.getId() + "_Output</dataOutputRefs>" + EOL +
+ " </outputSet>" + EOL);
+ }
+ EventTypeFilter filter = (EventTypeFilter) eventTrigger.getEventFilters().get(0);
+ xmlDump.append(" <signalEventDefinition signalRef=\"" + filter.getType() + "\" />" + EOL);
+ } else {
+ throw new IllegalArgumentException("Unsupported trigger type " + trigger);
+ }
+ endNode("startEvent", xmlDump);
+ } else {
+ endNode(xmlDump);
+ }
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -5,6 +5,7 @@
import org.drools.bpmn2.core.SequenceFlow;
import org.drools.definition.process.Connection;
+import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.context.variable.VariableScope;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.CompositeContextNode;
@@ -37,12 +38,27 @@
List<SequenceFlow> connections = (List<SequenceFlow>)
compositeNode.getMetaData(ProcessHandler.CONNECTIONS);
ProcessHandler.linkConnections(compositeNode, connections);
+ ProcessHandler.linkBoundaryEvents(compositeNode);
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
CompositeContextNode compositeNode = (CompositeContextNode) node;
writeNode("subProcess", compositeNode, xmlDump, includeMeta);
xmlDump.append(" >" + EOL);
+ // variables
+ VariableScope variableScope = (VariableScope)
+ compositeNode.getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ if (variableScope != null && !variableScope.getVariables().isEmpty()) {
+ xmlDump.append(" <!-- variables -->" + EOL);
+ for (Variable variable: variableScope.getVariables()) {
+ xmlDump.append(" <property id=\"" + variable.getName() + "\" ");
+ if (variable.getType() != null) {
+ xmlDump.append("itemSubjectRef=\"_" + compositeNode.getUniqueId() + "-" + variable.getName() + "Item\"" );
+ }
+ // TODO: value
+ xmlDump.append("/>" + EOL);
+ }
+ }
// nodes
List<Node> subNodes = getSubNodes(compositeNode);
xmlDump.append(" <!-- nodes -->" + EOL);
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java 2009-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/WorkItemNodeHandler.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -62,7 +62,7 @@
if ("Send Task".equals(type)) {
writeNode("sendTask", workItemNode, xmlDump, includeMeta);
xmlDump.append("messageRef=\"_" +
- XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+ XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" implementation=\"Other\" >" + EOL);
xmlDump.append(
" <ioSpecification>" + EOL +
" <dataInput id=\"_2_param\" name=\"Message\" />" + EOL +
@@ -85,7 +85,7 @@
if ("Receive Task".equals(type)) {
writeNode("receiveTask", workItemNode, xmlDump, includeMeta);
xmlDump.append("messageRef=\"_" +
- XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" >" + EOL);
+ XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_Message\" implementation=\"Other\" >" + EOL);
xmlDump.append(
" <ioSpecification>" + EOL +
" <dataOutput id=\"_2_result\" name=\"Message\" />" + 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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -9,6 +9,7 @@
import org.drools.definition.process.Node;
import org.drools.definition.process.NodeContainer;
import org.drools.definition.process.WorkflowProcess;
+import org.drools.process.core.ContextContainer;
import org.drools.process.core.Work;
import org.drools.process.core.context.swimlane.Swimlane;
import org.drools.process.core.context.swimlane.SwimlaneContext;
@@ -67,17 +68,8 @@
// item definitions
VariableScope variableScope = (VariableScope)
((org.drools.process.core.Process) process).getDefaultContext(VariableScope.VARIABLE_SCOPE);
- if (variableScope != null && !variableScope.getVariables().isEmpty()) {
- for (Variable variable: variableScope.getVariables()) {
- xmlDump.append(
- " <itemDefinition id=\"" + variable.getName() + "Item\" ");
- if (variable.getType() != null) {
- xmlDump.append("structureRef=\"" + variable.getType().getStringType() + "\" ");
- }
- xmlDump.append("/>" + EOL);
- }
- xmlDump.append(EOL);
- }
+ visitVariableScope(variableScope, "_", xmlDump);
+ visitSubVariableScopes(process.getNodes(), xmlDump);
xmlDump.append(
" <resource id=\"Actor\" name=\"Human Actor\" />" + EOL + EOL);
@@ -106,6 +98,35 @@
xmlDump.append("</definitions>");
}
+ private void visitVariableScope(VariableScope variableScope, String prefix, StringBuilder xmlDump) {
+ if (variableScope != null && !variableScope.getVariables().isEmpty()) {
+ for (Variable variable: variableScope.getVariables()) {
+ xmlDump.append(
+ " <itemDefinition id=\"" + prefix + variable.getName() + "Item\" ");
+ if (variable.getType() != null) {
+ xmlDump.append("structureRef=\"" + variable.getType().getStringType() + "\" ");
+ }
+ xmlDump.append("/>" + EOL);
+ }
+ xmlDump.append(EOL);
+ }
+ }
+
+ private void visitSubVariableScopes(Node[] nodes, StringBuilder xmlDump) {
+ for (Node node: nodes) {
+ if (node instanceof ContextContainer) {
+ VariableScope variableScope = (VariableScope)
+ ((ContextContainer) node).getDefaultContext(VariableScope.VARIABLE_SCOPE);
+ if (variableScope != null) {
+ visitVariableScope(variableScope, "_" + ((NodeImpl) node).getUniqueId() + "-", xmlDump);
+ }
+ }
+ if (node instanceof NodeContainer) {
+ visitSubVariableScopes(((NodeContainer) node).getNodes(), xmlDump);
+ }
+ }
+ }
+
private void visitLanes(WorkflowProcess process, StringBuilder xmlDump) {
// lanes
Collection<Swimlane> swimlanes = ((SwimlaneContext)
@@ -154,16 +175,30 @@
}
public static void visitVariables(List<Variable> variables, StringBuilder xmlDump) {
- xmlDump.append(" <!-- process variables -->" + EOL);
- for (Variable variable: variables) {
- xmlDump.append(" <property id=\"" + variable.getName() + "\" ");
- if (variable.getType() != null) {
- xmlDump.append("itemSubjectRef=\"" + variable.getName() + "Item\"" );
+ if (!variables.isEmpty()) {
+ xmlDump.append(" <!-- process variables -->" + EOL);
+ for (Variable variable: variables) {
+ if (variable.getMetaData("DataObject") == null) {
+ xmlDump.append(" <property id=\"" + variable.getName() + "\" ");
+ if (variable.getType() != null) {
+ xmlDump.append("itemSubjectRef=\"_" + variable.getName() + "Item\"" );
+ }
+ // TODO: value?
+ xmlDump.append("/>" + EOL);
+ }
}
- // TODO: value
- xmlDump.append("/>" + EOL);
- }
- xmlDump.append(EOL);
+ for (Variable variable: variables) {
+ if (variable.getMetaData("DataObject") != null) {
+ xmlDump.append(" <dataObject id=\"" + variable.getName() + "\" ");
+ if (variable.getType() != null) {
+ xmlDump.append("itemSubjectRef=\"_" + variable.getName() + "Item\"" );
+ }
+ // TODO: value?
+ xmlDump.append("/>" + EOL);
+ }
+ }
+ xmlDump.append(EOL);
+ }
}
protected void visitInterfaces(WorkflowProcess process, StringBuilder xmlDump) {
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/Person.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,15 @@
+package org.drools.bpmn2;
+
+public class Person {
+
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = 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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2009-12-26 22:44:43 UTC (rev 30831)
@@ -1,14 +1,9 @@
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;
@@ -28,12 +23,9 @@
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.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;
@@ -41,9 +33,7 @@
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 {
@@ -62,6 +52,15 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testDataObject() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-DataObject.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("employee", "UserId-12345");
+ ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
public void testEvaluationProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -119,6 +118,15 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testInclusiveSplit() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-InclusiveSplit.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", 15);
+ 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();
@@ -164,6 +172,45 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testEscalationBoundaryEvent() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-EscalationBoundaryEvent.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ProcessInstance processInstance = ksession.startProcess("EscalationBoundaryEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
+ public void testEscalationBoundaryEventInterrupting() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-EscalationBoundaryEventInterrupting.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("EscalationBoundaryEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
+ public void testTimerBoundaryEvent() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEvent.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ Thread.sleep(1000);
+ System.out.println("Firing timer");
+ ksession.fireAllRules();
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
+ public void testTimerBoundaryEventInterrupting() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-TimerBoundaryEventInterrupting.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("MyTask", new DoNothingWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("TimerBoundaryEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ Thread.sleep(1000);
+ System.out.println("Firing timer");
+ ksession.fireAllRules();
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
public void testAdHocSubProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocSubProcess.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -212,6 +259,13 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
}
+ public void testEscalationEventProcess() 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 testGraphicalInformation() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
@@ -256,6 +310,49 @@
assertEquals("Hello john!", processInstance.getVariable("s"));
}
+ public void testConditionalStart() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-ConditionalStart.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Person person = new Person();
+ person.setName("jack");
+ ksession.insert(person);
+ ksession.fireAllRules();
+ person = new Person();
+ person.setName("john");
+ ksession.insert(person);
+ ksession.fireAllRules();
+ }
+
+ public void testSignalStart() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-SignalStart.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.signalEvent("MyStartSignal", "NewValue");
+ }
+
+ public void testSignalEnd() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-SignalEndEvent.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", "MyValue");
+ ksession.startProcess("SignalEndEvent", params);
+ }
+
+ public void testSignalIntermediateThrow() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventSignal.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", "MyValue");
+ ProcessInstance processInstance = ksession.startProcess("SignalIntermediateEvent", params);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ }
+
+ public void testNoneIntermediateThrow() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventNone.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ProcessInstance processInstance = ksession.startProcess("NoneIntermediateEvent", null);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ }
+
// public void testPersistence() throws Exception {
// setupDataSource();
// EntityManagerFactory emf = Persistence.createEntityManagerFactory(
@@ -295,7 +392,7 @@
RuleFlowProcess p = (RuleFlowProcess)
processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/" + process));
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
-// System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+ System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
kbuilder.add(ResourceFactory.newReaderResource(
new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
if (!kbuilder.getErrors().isEmpty()) {
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ConditionalStart.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <process id="Minimal" name="Minimal Process" processType="executable" tns:packageName="com.sample">
+ <startEvent id="_1" name="StartProcess">
+ <conditionalEventDefinition>
+ <condition>org.drools.bpmn2.Person(name == "john")</condition>
+ </conditionalEventDefinition>
+ </startEvent>
+ <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">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-DataObject.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/EvaluationExample"
+ 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/EvaluationExample">
+
+ <!-- item definitions -->
+ <itemDefinition id="employeeId" structureRef="java.lang.String" />
+
+ <process id="Evaluation" name="Evaluation Process">
+
+ <!-- process variables -->
+ <dataObject id="employee" itemSubjectRef="tns:employeeId" />
+
+ <!-- nodes -->
+ <startEvent id="_1" name="StartProcess"/>
+ <scriptTask id="_2" name="Log">
+ <script>System.out.println("Processing evaluation for employee " + employee);</script>
+ </scriptTask>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+
+ <!-- connections -->
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+
+ </process>
+</definitions>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEvent.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="EscalationBoundaryEvent" name="Escalation 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"/>
+ <endEvent id="_2-2" name="EscalationEvent">
+ <escalationEventDefinition escalationCode="MyEscalation"/>
+ </endEvent>
+ </subProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ <boundaryEvent id="_4" name="EscalationEvent" attachedToRef="_2" cancelActivity="false">
+ <escalationEventDefinition escalationCode="MyEscalation" />
+ </boundaryEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Goodbye">
+ <script>System.out.println("Escalation handled");</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-EscalationBoundaryEventInterrupting.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationBoundaryEventInterrupting.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -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="EscalationBoundaryEvent" name="Escalation 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="EscalationEvent">
+ <escalationEventDefinition escalationCode="MyEscalation"/>
+ </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="EscalationEvent" attachedToRef="_2" >
+ <escalationEventDefinition escalationCode="MyEscalation" />
+ </boundaryEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Goodbye">
+ <script>System.out.println("Escalation 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-EscalationEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EscalationEndEvent.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -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="EscalationEndEvent" name="Escalation End Event Process">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <endEvent id="_2" name="EscalationEvent">
+ <escalationEventDefinition escalationCode="MyEscalation"/>
+ </endEvent>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-InclusiveSplit.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.jboss.org/drools"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:g="http://www.jboss.org/drools/flow/gpd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="xItem" structureRef="java.lang.Integer" />
+
+ <process id="com.sample.test" name="Test" >
+
+ <!-- process variables -->
+ <property id="x" itemSubjectRef="tns:xItem"/>
+
+ <!-- nodes -->
+ <startEvent id="_1" name="Start" />
+ <inclusiveGateway id="_2" name="Split" gatewayDirection="diverging" />
+ <scriptTask id="_3" name="Script1" >
+ <script>System.out.println("path1");</script>
+ </scriptTask>
+ <scriptTask id="_4" name="Script2" >
+ <script>System.out.println("path2");</script>
+ </scriptTask>
+ <scriptTask id="_5" name="Script3" >
+ <script>System.out.println("path3");</script>
+ </scriptTask>
+ <endEvent id="_6" name="End" />
+ <endEvent id="_7" name="End" />
+ <endEvent id="_8" name="End" />
+
+ <!-- connections -->
+ <sequenceFlow sourceRef="_1" targetRef="_2" />
+ <sequenceFlow sourceRef="_2" targetRef="_3" >
+ <conditionExpression>return x > 0;</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="_2" targetRef="_4" >
+ <conditionExpression>return x > 10;</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="_2" targetRef="_5" >
+ <conditionExpression>return x > 20;</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="_3" targetRef="_6" />
+ <sequenceFlow sourceRef="_4" targetRef="_7" />
+ <sequenceFlow sourceRef="_5" targetRef="_8" />
+
+ </process>
+
+</definitions>
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventNone.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,23 @@
+<?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="NoneIntermediateEvent" name="None Intermediate Throw Event Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <intermediateThrowEvent id="_2" name="NoneEvent"/>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndEvent"/>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventSignal.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -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">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <process id="SignalIntermediateEvent" name="Signal Intermediate Throw Event Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <intermediateThrowEvent id="_2" name="SignalEvent">
+ <dataInput id="_2_Input" />
+ <dataInputAssociation>
+ <sourceRef>x</sourceRef>
+ <targetRef>_2_Input</targetRef>
+ </dataInputAssociation>
+ <inputSet>
+ <dataInputRefs>_2_Input</dataInputRefs>
+ </inputSet>
+ <signalEventDefinition signalRef="MySignal"/>
+ </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-SignalEndEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalEndEvent.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,31 @@
+<?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="SignalEndEvent" name="Error End Event Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <endEvent id="_2" name="ErrorEvent">
+ <dataInput id="_2_Input" />
+ <dataInputAssociation>
+ <sourceRef>x</sourceRef>
+ <targetRef>_2_Input</targetRef>
+ </dataInputAssociation>
+ <inputSet>
+ <dataInputRefs>_2_Input</dataInputRefs>
+ </inputSet>
+ <signalEventDefinition signalRef="MySignal"/>
+ </endEvent>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SignalStart.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.jboss.org/drools">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <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>
+ <signalEventDefinition signalRef="MyStartSignal" />
+ </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>
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-12-26 20:41:05 UTC (rev 30830)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -8,17 +8,28 @@
xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
xmlns:tns="http://www.example.org/MinimalExample">
+ <itemDefinition id="_2-xType" structureRef="java.lang.String" />
+
<process id="SubProcess" name="Minimal SubProcess">
<startEvent id="_1" name="StartProcess"/>
<sequenceFlow sourceRef="_1" targetRef="_2"/>
<subProcess id="_2" name="Hello" >
+ <property id="x" itemSubjectRef="tns:_2-xType" />
<startEvent id="_2-1" name="StartSubProcess"/>
<sequenceFlow sourceRef="_2-1" targetRef="_2-2"/>
<scriptTask id="_2-2" name="Hello">
- <script>System.out.println("Hello World");</script>
+ <script>System.out.println("x = " + x);</script>
</scriptTask>
<sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
- <endEvent id="_2-3" name="EndSubProcess"/>
+ <scriptTask id="_2-3" name="Hello">
+ <script>kcontext.setVariable("x", "Hello");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2-3" targetRef="_2-4"/>
+ <scriptTask id="_2-4" name="Hello">
+ <script>System.out.println("x = " + x);</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2-4" targetRef="_2-5"/>
+ <endEvent id="_2-5" name="EndSubProcess"/>
</subProcess>
<sequenceFlow sourceRef="_2" targetRef="_3"/>
<scriptTask id="_3" name="Goodbye">
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEvent.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -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">
+
+ <process id="TimerBoundaryEvent" name="Timer 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"/>
+ <task id="_2-2" name="Task" tns:taskName="MyTask" />
+ <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+ <endEvent id="_2-3" name="EscalationEvent"/>
+ </subProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ <boundaryEvent id="_4" name="TimerEvent" attachedToRef="_2" cancelActivity="false">
+ <timerEventDefinition>
+ <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+ </timerEventDefinition>
+ </boundaryEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Goodbye">
+ <script>System.out.println("Timer handled");</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-TimerBoundaryEventInterrupting.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-TimerBoundaryEventInterrupting.xml 2009-12-26 22:44:43 UTC (rev 30831)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <process id="TimerBoundaryEvent" name="Timer 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"/>
+ <task id="_2-2" name="Task" tns:taskName="MyTask" />
+ <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+ <endEvent id="_2-3" name="EscalationEvent"/>
+ </subProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ <boundaryEvent id="_4" name="TimerEvent" attachedToRef="_2">
+ <timerEventDefinition>
+ <timeCycle xs:type="tFormalExpression">500ms</timeCycle>
+ </timerEventDefinition>
+ </boundaryEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Goodbye">
+ <script>System.out.println("Timer handled");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <endEvent id="_6" name="EndProcess"/>
+ </process>
+</definitions>
More information about the jboss-svn-commits
mailing list