[jboss-svn-commits] JBL Code SVN: r31289 - in labs/jbossrules/trunk/drools-process/drools-bpmn2/src: test/java/org/drools/bpmn2 and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 28 12:59:00 EST 2010
Author: KrisVerlaenen
Date: 2010-01-28 12:58:59 -0500 (Thu, 28 Jan 2010)
New Revision: 31289
Added:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventCompensate.xml
Modified:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.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/IntermediateThrowEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
- adding BPMN2 compensation
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java 2010-01-28 17:14:59 UTC (rev 31288)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ActionNodeHandler.java 2010-01-28 17:58:59 UTC (rev 31289)
@@ -68,6 +68,13 @@
xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
}
endNode("intermediateThrowEvent", xmlDump);
+ } else if (s.startsWith("kcontext.getProcessInstance().signalEvent(\"")) {
+ writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ s = s.substring(43);
+ String type = s.substring(0, s.indexOf("\""));
+ xmlDump.append(" <compensateEventDefinition activityRef=\"" + type.substring(11) + "\"/>" + EOL);
+ endNode("intermediateThrowEvent", xmlDump);
} else if (s.startsWith("org.drools.process.instance.context.exception.ExceptionScopeInstance scopeInstance = (org.drools.process.instance.context.exception.ExceptionScopeInstance) ((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).resolveContextInstance(org.drools.process.core.context.exception.ExceptionScope.EXCEPTION_SCOPE, \"")) {
writeNode("intermediateThrowEvent", actionNode, xmlDump, includeMeta);
xmlDump.append(">" + EOL);
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java 2010-01-28 17:14:59 UTC (rev 31288)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BoundaryEventHandler.java 2010-01-28 17:58:59 UTC (rev 31289)
@@ -152,23 +152,12 @@
super.handleNode(node, element, uri, localName, parser);
EventNode eventNode = (EventNode) node;
eventNode.setMetaData("AttachedTo", attachedTo);
- eventNode.setMetaData("CancelActivity", cancelActivity);
- org.w3c.dom.Node xmlNode = element.getFirstChild();
- while (xmlNode != null) {
- String nodeName = xmlNode.getNodeName();
- if ("compensateEventDefinition".equals(nodeName)) {
- String activityRef = ((Element) xmlNode).getAttribute("activityRef");
- if (activityRef != null && activityRef.trim().length() > 0) {
- List<EventFilter> eventFilters = new ArrayList<EventFilter>();
- EventTypeFilter eventFilter = new EventTypeFilter();
- eventFilter.setType("Compensate-" + eventNode.getUniqueId());
- eventFilters.add(eventFilter);
- eventNode.setEventFilters(eventFilters);
- eventNode.setMetaData("CompensationEvent", activityRef);
- }
- }
- xmlNode = xmlNode.getNextSibling();
- }
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ String eventType = "Compensate-";
+ eventFilter.setType(eventType);
+ eventFilters.add(eventFilter);
+ ((EventNode) node).setEventFilters(eventFilters);
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java 2010-01-28 17:14:59 UTC (rev 31288)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/EventNodeHandler.java 2010-01-28 17:58:59 UTC (rev 31289)
@@ -77,7 +77,14 @@
" <timeCycle xs:type=\"tFormalExpression\">" + eventNode.getMetaData("TimeCycle") + "</timeCycle>" + EOL +
" </timerEventDefinition>" + EOL);
endNode("boundaryEvent", xmlDump);
- }
+ } else if (type.startsWith("Compensate-")) {
+ type = type.substring(attachedTo.length() + 7);
+ writeNode("boundaryEvent", eventNode, xmlDump, includeMeta);
+ xmlDump.append("attachedToRef=\"" + attachedTo + "\" ");
+ xmlDump.append(">" + EOL);
+ xmlDump.append(" <compensateEventDefinition/>" + EOL);
+ endNode("boundaryEvent", xmlDump);
+ }
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java 2010-01-28 17:14:59 UTC (rev 31288)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateThrowEventHandler.java 2010-01-28 17:58:59 UTC (rev 31289)
@@ -1,12 +1,17 @@
package org.drools.bpmn2.xml;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import org.drools.bpmn2.core.Message;
+import org.drools.process.core.event.EventFilter;
+import org.drools.process.core.event.EventTypeFilter;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.NodeContainer;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.EventNode;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.ProcessBuildData;
import org.w3c.dom.Element;
@@ -146,7 +151,9 @@
if ("compensateEventDefinition".equals(nodeName)) {
String activityRef = ((Element) xmlNode).getAttribute("activityRef");
if (activityRef != null && activityRef.trim().length() > 0) {
- actionNode.setMetaData("activityRef", activityRef);
+ actionNode.setMetaData("Compensate", activityRef);
+ actionNode.setAction(new DroolsConsequenceAction("java",
+ "kcontext.getProcessInstance().signalEvent(\"Compensate-" + activityRef + "\", null);"));
}
// boolean waitForCompletion = true;
// String waitForCompletionString = ((Element) xmlNode).getAttribute("waitForCompletion");
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2010-01-28 17:14:59 UTC (rev 31288)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2010-01-28 17:58:59 UTC (rev 31289)
@@ -16,6 +16,7 @@
import org.drools.process.core.context.exception.ActionExceptionHandler;
import org.drools.process.core.context.exception.ExceptionScope;
import org.drools.process.core.context.swimlane.Swimlane;
+import org.drools.process.core.event.EventFilter;
import org.drools.process.core.event.EventTypeFilter;
import org.drools.process.core.timer.Timer;
import org.drools.ruleflow.core.RuleFlowProcess;
@@ -96,7 +97,7 @@
List<Lane> lanes = (List<Lane>)
process.getMetaData(LaneHandler.LANES);
assignLanes(process, lanes);
- postProcessStateNodes(process);
+ postProcessNodes(process);
return process;
}
@@ -173,10 +174,10 @@
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) {
+ String type = ((EventTypeFilter)
+ ((EventNode) node).getEventFilters().get(0)).getType();
Node attachedNode = null;
try {
// remove starting _
@@ -236,6 +237,15 @@
compositeNode.addTimer(timer, new DroolsConsequenceAction("java",
(cancelActivity ? "((org.drools.workflow.instance.NodeInstance) kcontext.getNodeInstance()).cancel();" : "") +
"kcontext.getProcessInstance().signalEvent(\"Timer-" + attachedTo + "-" + timeCycle + "\", null);"));
+ } else if (type.startsWith("Compensate-")) {
+ String eventType = "Compensate-";
+ String uniqueId = (String) node.getMetaData("UniqueId");
+ if (uniqueId == null) {
+ eventType += "_" + ((NodeImpl) attachedNode).getUniqueId();
+ } else {
+ eventType += uniqueId;
+ }
+ ((EventTypeFilter) ((EventNode) node).getEventFilters().get(0)).setType(eventType);
}
}
}
@@ -262,7 +272,7 @@
assignLanes(process, laneMapping);
}
- private void postProcessStateNodes(NodeContainer container) {
+ private void postProcessNodes(NodeContainer container) {
for (Node node: container.getNodes()) {
if (node instanceof StateNode) {
StateNode stateNode = (StateNode) node;
@@ -274,7 +284,7 @@
stateNode.setConstraint(connection, constraint);
}
} else if (node instanceof NodeContainer) {
- postProcessStateNodes((NodeContainer) node);
+ postProcessNodes((NodeContainer) node);
}
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2010-01-28 17:14:59 UTC (rev 31288)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2010-01-28 17:58:59 UTC (rev 31289)
@@ -318,6 +318,13 @@
assertTrue(processInstance.getState() == ProcessInstance.STATE_ABORTED);
}
+ public void testCompensateIntermediateThrowEventProcess() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateThrowEventCompensate.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ProcessInstance processInstance = ksession.startProcess("CompensateIntermediateThrowEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
public void testGraphicalInformation() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-OryxExportedExample.xml");
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventCompensate.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventCompensate.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateThrowEventCompensate.xml 2010-01-28 17:58:59 UTC (rev 31289)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <process id="CompensateIntermediateThrowEvent" name="Compensate Intermediate Throw Event Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <scriptTask id="_2" name="Task">
+ <script>System.out.println("Executing task");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <intermediateThrowEvent id="_3" name="CompensateEvent">
+ <compensateEventDefinition activityRef="_2"/>
+ </intermediateThrowEvent>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <endEvent id="_4" name="EndEvent"/>
+ <boundaryEvent id="_5" name="CompensateEvent" attachedToRef="_2">
+ <compensateEventDefinition />
+ </boundaryEvent>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <scriptTask id="_6" name="Compensate">
+ <script>System.out.println("Compensating task");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_6" targetRef="_7"/>
+ <endEvent id="_7" name="EndEvent"/>
+
+ </process>
+</definitions>
More information about the jboss-svn-commits
mailing list