[jboss-svn-commits] JBL Code SVN: r28962 - in labs/jbossrules/trunk: drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Aug 17 10:42:18 EDT 2009
Author: KrisVerlaenen
Date: 2009-08-17 10:42:17 -0400 (Mon, 17 Aug 2009)
New Revision: 28962
Added:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.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/test/resources/BPMN2-SubProcess.xml
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
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-EvaluationProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
Log:
- bpmn2 commit
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd 2009-08-17 14:42:17 UTC (rev 28962)
@@ -532,7 +532,6 @@
<xs:attribute name="y" type="xs:string"/>
<xs:attribute name="width" type="xs:string"/>
<xs:attribute name="height" type="xs:string"/>
- <xs:attribute name="type" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="dynamic">
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -29,6 +29,8 @@
*/
public class EndNodeWrapper extends AbstractNodeWrapper {
+ public static final int CHANGE_TERMINATE = 5;
+
public static final String TERMINATE = "terminate";
private static final long serialVersionUID = 400L;
@@ -64,6 +66,7 @@
public void resetPropertyValue(Object id) {
if (TERMINATE.equals(id)) {
getEndNode().setTerminate(true);
+ notifyListeners(CHANGE_TERMINATE);
} else {
super.resetPropertyValue(id);
}
@@ -72,6 +75,7 @@
public void setPropertyValue(Object id, Object value) {
if (TERMINATE.equals(id)) {
getEndNode().setTerminate(((Integer) value).intValue() == 0);
+ notifyListeners(CHANGE_TERMINATE);
} else {
super.setPropertyValue(id, value);
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/EndNodeEditPart.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -16,8 +16,12 @@
*/
import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.core.ModelEvent;
import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.core.EndNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.JoinWrapper;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.JoinEditPart.JoinFigureInterface;
import org.drools.eclipse.flow.ruleflow.skin.SkinManager;
import org.drools.eclipse.flow.ruleflow.skin.SkinProvider;
import org.drools.eclipse.preferences.IDroolsConstants;
@@ -51,7 +55,25 @@
return result;
}
- public static class EndNodeFigure extends AbstractElementFigure {
+ public void modelChanged(ModelEvent event) {
+ if (event.getChange() == EndNodeWrapper.CHANGE_TERMINATE) {
+ refreshVisuals();
+ } else {
+ super.modelChanged(event);
+ }
+ }
+
+ protected void refreshVisuals() {
+ super.refreshVisuals();
+ boolean terminate = ((EndNodeWrapper) getModel()).getEndNode().isTerminate();
+ ((EndNodeFigureInterface) getFigure()).setTerminate(terminate);
+ }
+
+ public static interface EndNodeFigureInterface extends IFigure {
+ void setTerminate(boolean terminate);
+ }
+
+ public static class EndNodeFigure extends AbstractElementFigure implements EndNodeFigureInterface {
private static final Image icon = ImageDescriptor.createFromURL(
DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/process_stop.gif")).createImage();
@@ -66,6 +88,11 @@
((LineBorder) getBorder()).setWidth(b ? 3 : 1);
repaint();
}
+
+ public void setTerminate(boolean terminate) {
+ // Do nothing
+ }
+
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNEndNodeFigure.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -2,12 +2,13 @@
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.EndNodeEditPart.EndNodeFigureInterface;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
-public class BPMNEndNodeFigure extends AbstractElementFigure {
+public class BPMNEndNodeFigure extends AbstractElementFigure implements EndNodeFigureInterface {
private static final Image icon = ImageDescriptor.createFromURL(
DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/large/end_terminate.png")).createImage();
@@ -34,4 +35,8 @@
repaint();
}
+ public void setTerminate(boolean terminate) {
+ // Do nothing
+ }
+
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn2/BPMNEndNodeFigure.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -2,15 +2,18 @@
import org.drools.eclipse.DroolsEclipsePlugin;
import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.EndNodeEditPart.EndNodeFigureInterface;
import org.eclipse.draw2d.LineBorder;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.graphics.Image;
-public class BPMNEndNodeFigure extends AbstractElementFigure {
+public class BPMNEndNodeFigure extends AbstractElementFigure implements EndNodeFigureInterface {
- private static final Image icon = ImageDescriptor.createFromURL(
+ private static final Image ICON_TERMINATE = ImageDescriptor.createFromURL(
DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn2/large/end_terminate.png")).createImage();
+ private static final Image ICON_EMPTY = ImageDescriptor.createFromURL(
+ DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn2/large/end_empty.png")).createImage();
public BPMNEndNodeFigure() {
setSize(48, 48);
@@ -25,7 +28,7 @@
}
protected void customizeFigure() {
- setIcon(icon);
+ setIcon(ICON_TERMINATE);
}
public void setSelected(boolean b) {
@@ -34,4 +37,8 @@
repaint();
}
+ public void setTerminate(boolean terminate) {
+ setIcon(terminate ? ICON_TERMINATE : ICON_EMPTY);
+ }
+
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionCellEditor.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -58,7 +58,7 @@
}
protected String getLabelText(Object value) {
- if (actionNode == null || actionNode.getAction() == null) {
+ if (actionNode == null || actionNode.getAction() == null || actionNode.getAction().toString() == null) {
return "";
}
return actionNode.getAction().toString();
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/resources/org/drools/eclipse/flow/bpmn2/Sample.bpmn.template 2009-08-17 14:42:17 UTC (rev 28962)
@@ -16,7 +16,7 @@
<!-- process variables -->
<!-- nodes -->
- <startEvent id="StartProcess" g:x="16" g:y="16" g:width="48" g:height="48" />
+ <startEvent id="_1" name="StartProcess" g:x="16" g:y="16" g:width="48" g:height="48" />
<!-- connections -->
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-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AbstractNodeHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -47,7 +47,7 @@
// remove starting _
id = id.substring(1);
// remove ids of parent nodes
- id = id.substring(id.lastIndexOf(":") + 1);
+ id = id.substring(id.lastIndexOf("-") + 1);
final String name = attrs.getValue("name");
node.setName(name);
node.setId(new Integer(id));
@@ -108,7 +108,7 @@
protected void writeNode(final String name, final Node node,
final StringBuilder xmlDump, boolean includeMeta) {
xmlDump.append(" <" + name + " ");
- xmlDump.append("id=\"_" + node.getUniqueId() + "\" ");
+ xmlDump.append("id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(node) + "\" ");
if (node.getName() != null) {
xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(node.getName()) + "\" ");
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -17,9 +17,13 @@
addHandler("endEvent", new EndEventHandler());
addHandler("exclusiveGateway", new ExclusiveGatewayHandler());
addHandler("parallelGateway", new ParallelGatewayHandler());
+ addHandler("complexGateway", new ComplexGatewayHandler());
addHandler("scriptTask", new ScriptTaskHandler());
addHandler("task", new TaskHandler());
addHandler("userTask", new UserTaskHandler());
+ addHandler("businessRuleTask", new BusinessRuleTaskHandler());
+ addHandler("callActivity", new CallActivityHandler());
+ addHandler("subProcess", new SubProcessHandler());
addHandler("sequenceFlow", new SequenceFlowHandler());
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BusinessRuleTaskHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.RuleSetNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class BusinessRuleTaskHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new RuleSetNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return RuleSetNode.class;
+ }
+
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ RuleSetNode ruleSetNode = (RuleSetNode) node;
+ String ruleFlowGroup = element.getAttribute("ruleFlowGroup");
+ if (ruleFlowGroup != null) {
+ ruleSetNode.setRuleFlowGroup(ruleFlowGroup);
+ }
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ RuleSetNode ruleSetNode = (RuleSetNode) node;
+ writeNode("businessRuleTask", ruleSetNode, xmlDump, includeMeta);
+ if (ruleSetNode.getRuleFlowGroup() != null) {
+ xmlDump.append("g:ruleFlowGroup=\"" + ruleSetNode.getRuleFlowGroup() + "\" ");
+ }
+ endNode(xmlDump);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,40 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.SubProcessNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class CallActivityHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new SubProcessNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return SubProcessNode.class;
+ }
+
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ SubProcessNode subProcessNode = (SubProcessNode) node;
+ String processId = element.getAttribute("calledElement");
+ if (processId != null) {
+ subProcessNode.setProcessId(processId);
+ }
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ SubProcessNode subProcessNode = (SubProcessNode) node;
+ writeNode("callActivity", subProcessNode, xmlDump, includeMeta);
+ if (subProcessNode.getProcessId() != null) {
+ xmlDump.append("calledElement=\"" + subProcessNode.getProcessId() + "\" ");
+ }
+ endNode(xmlDump);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ComplexGatewayHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,35 @@
+package org.drools.bpmn2.xml;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.Join;
+import org.drools.workflow.core.node.Split;
+import org.xml.sax.Attributes;
+
+public class ComplexGatewayHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ final String type = attrs.getValue("gatewayDirection");
+ if ("converging".equals(type)) {
+ Join join = new Join();
+ join.setType(Join.TYPE_UNDEFINED);
+ return join;
+ } else if ("diverging".equals(type)) {
+ Split split = new Split();
+ split.setType(Split.TYPE_UNDEFINED);
+ 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/JoinHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/JoinHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -25,7 +25,7 @@
writeNode("exclusiveGateway", node, xmlDump, includeMeta);
break;
default:
- throw new IllegalArgumentException("Unsupported join type: " + join.getType());
+ writeNode("complexGateway", node, xmlDump, includeMeta);
}
xmlDump.append("gatewayDirection=\"converging\" ");
endNode(xmlDump);
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-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/ProcessHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -5,6 +5,7 @@
import org.drools.bpmn2.core.SequenceFlow;
import org.drools.definition.process.Node;
+import org.drools.definition.process.NodeContainer;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Connection;
import org.drools.workflow.core.Constraint;
@@ -55,11 +56,14 @@
return process;
}
+ @SuppressWarnings("unchecked")
public Object end(final String uri, final String localName,
final ExtensibleXmlParser parser) throws SAXException {
parser.endElementBuilder();
RuleFlowProcess process = (RuleFlowProcess) parser.getCurrent();
- linkConnections(process);
+ List<SequenceFlow> connections = (List<SequenceFlow>)
+ process.getMetaData(CONNECTIONS);
+ linkConnections(process, connections);
return process;
}
@@ -67,9 +71,7 @@
return org.drools.definition.process.Process.class;
}
- @SuppressWarnings("unchecked")
- private void linkConnections(RuleFlowProcess process) {
- List<SequenceFlow> connections = (List<SequenceFlow>) process.getMetaData(CONNECTIONS);
+ public static void linkConnections(NodeContainer nodeContainer, List<SequenceFlow> connections) {
if (connections != null) {
for (SequenceFlow connection: connections) {
String sourceRef = connection.getSourceRef();
@@ -78,10 +80,10 @@
sourceRef = sourceRef.substring(1);
targetRef = targetRef.substring(1);
// remove ids of parent nodes
- sourceRef = sourceRef.substring(sourceRef.lastIndexOf(":") + 1);
- targetRef = targetRef.substring(targetRef.lastIndexOf(":") + 1);
- Node source = process.getNode(new Integer(sourceRef));
- Node target = process.getNode(new Integer(targetRef));
+ sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
+ targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
+ Node source = nodeContainer.getNode(new Integer(sourceRef));
+ Node target = nodeContainer.getNode(new Integer(targetRef));
Connection result = new ConnectionImpl(
source, NodeImpl.CONNECTION_DEFAULT_TYPE,
target, NodeImpl.CONNECTION_DEFAULT_TYPE);
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -9,6 +9,7 @@
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.node.CompositeNode;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
@@ -47,13 +48,23 @@
final String targetRef = attrs.getValue("targetRef");
final String bendpoints = attrs.getValue("g:bendpoints");
- RuleFlowProcess process = (RuleFlowProcess) parser.getParent();
+ NodeContainer nodeContainer = (NodeContainer) parser.getParent();
- List<SequenceFlow> connections = (List<SequenceFlow>)
- process.getMetaData(ProcessHandler.CONNECTIONS);
- if (connections == null) {
- connections = new ArrayList<SequenceFlow>();
- process.setMetaData(ProcessHandler.CONNECTIONS, connections);
+ List<SequenceFlow> connections = null;
+ if (nodeContainer instanceof RuleFlowProcess) {
+ connections = (List<SequenceFlow>)
+ ((RuleFlowProcess) nodeContainer).getMetaData(ProcessHandler.CONNECTIONS);
+ if (connections == null) {
+ connections = new ArrayList<SequenceFlow>();
+ ((RuleFlowProcess) nodeContainer).setMetaData(ProcessHandler.CONNECTIONS, connections);
+ }
+ } else if (nodeContainer instanceof CompositeNode) {
+ connections = (List<SequenceFlow>)
+ ((CompositeNode) nodeContainer).getMetaData(ProcessHandler.CONNECTIONS);
+ if (connections == null) {
+ connections = new ArrayList<SequenceFlow>();
+ ((CompositeNode) nodeContainer).setMetaData(ProcessHandler.CONNECTIONS, connections);
+ }
}
SequenceFlow connection = new SequenceFlow(sourceRef, targetRef);
connection.setBendpoints(bendpoints);
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-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SplitHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -25,7 +25,7 @@
writeNode("exclusiveGateway", node, xmlDump, includeMeta);
break;
default:
- throw new IllegalArgumentException("Unsupported split type: " + split.getType());
+ writeNode("complexGateway", node, xmlDump, includeMeta);
}
xmlDump.append("gatewayDirection=\"diverging\" ");
endNode(xmlDump);
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SubProcessHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -0,0 +1,89 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.bpmn2.core.SequenceFlow;
+import org.drools.definition.process.Connection;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.CompositeContextNode;
+import org.drools.workflow.core.node.CompositeNode;
+import org.drools.xml.ExtensibleXmlParser;
+import org.w3c.dom.Element;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+
+public class SubProcessHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ CompositeContextNode result = new CompositeContextNode();
+ VariableScope variableScope = new VariableScope();
+ result.addContext(variableScope);
+ result.setDefaultContext(variableScope);
+ return result;
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return CompositeContextNode.class;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected void handleNode(final Node node, final Element element, final String uri,
+ final String localName, final ExtensibleXmlParser parser) throws SAXException {
+ super.handleNode(node, element, uri, localName, parser);
+ CompositeContextNode compositeNode = (CompositeContextNode) node;
+ List<SequenceFlow> connections = (List<SequenceFlow>)
+ compositeNode.getMetaData(ProcessHandler.CONNECTIONS);
+ ProcessHandler.linkConnections(compositeNode, connections);
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ CompositeContextNode compositeNode = (CompositeContextNode) node;
+ writeNode("subProcess", compositeNode, xmlDump, includeMeta);
+ xmlDump.append(" >" + EOL);
+ // nodes
+ List<Node> subNodes = getSubNodes(compositeNode);
+ xmlDump.append(" <!-- nodes -->" + EOL);
+ for (Node subNode: subNodes) {
+ XmlBPMNProcessDumper.INSTANCE.visitNode(subNode, xmlDump, includeMeta);
+ }
+ // connections
+ List<Connection> connections = getSubConnections(compositeNode);
+ xmlDump.append(" <!-- connections -->" + EOL);
+ for (Connection connection: connections) {
+ XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
+ }
+ endNode("subProcess", xmlDump);
+ }
+
+ protected List<Node> getSubNodes(CompositeNode compositeNode) {
+ List<Node> subNodes =
+ new ArrayList<Node>();
+ for (org.drools.definition.process.Node subNode: compositeNode.getNodes()) {
+ // filter out composite start and end nodes as they can be regenerated
+ if ((!(subNode instanceof CompositeNode.CompositeNodeStart)) &&
+ (!(subNode instanceof CompositeNode.CompositeNodeEnd))) {
+ subNodes.add((Node) subNode);
+ }
+ }
+ return subNodes;
+ }
+
+ protected List<Connection> getSubConnections(CompositeNode compositeNode) {
+ List<Connection> connections = new ArrayList<Connection>();
+ for (org.drools.definition.process.Node subNode: compositeNode.getNodes()) {
+ // filter out composite start and end nodes as they can be regenerated
+ if (!(subNode instanceof CompositeNode.CompositeNodeEnd)) {
+ for (Connection connection: subNode.getIncomingConnections(Node.CONNECTION_DEFAULT_TYPE)) {
+ if (!(connection.getFrom() instanceof CompositeNode.CompositeNodeStart)) {
+ connections.add(connection);
+ }
+ }
+ }
+ }
+ return connections;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -73,15 +73,15 @@
String from = subSubNode.getTextContent();
subNode = subNode.getNextSibling();
String to = subNode.getTextContent();
- workItemNode.getWork().setParameter(to.substring(workItemNode.getUniqueId().length() + 2), from);
+ workItemNode.getWork().setParameter(to.substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2), from);
} else {
String from = subNode.getTextContent();
// targetRef
subNode = subNode.getNextSibling();
String to = subNode.getTextContent();
workItemNode.addInMapping(
- dataInputs.get(to).substring(workItemNode.getUniqueId().length() + 2),
- from.substring(workItemNode.getUniqueId().length() + 2));
+ dataInputs.get(to),
+ from);
}
}
@@ -93,8 +93,8 @@
subNode = subNode.getNextSibling();
String to = subNode.getTextContent();
workItemNode.addOutMapping(
- from.substring(workItemNode.getUniqueId().length() + 2),
- dataOutputs.get(to).substring(workItemNode.getUniqueId().length() + 2));
+ from.substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2),
+ dataOutputs.get(to).substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2));
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
@@ -108,30 +108,30 @@
protected void writeIO(WorkItemNode workItemNode, StringBuilder xmlDump) {
xmlDump.append(" <ioSpecification>" + EOL);
for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
- xmlDump.append(" <dataInput id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
}
for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
if (entry.getValue() != null) {
- xmlDump.append(" <dataInput id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
}
}
for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
- xmlDump.append(" <dataOutput id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+ xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
}
xmlDump.append(" <inputSet>" + EOL);
for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
- xmlDump.append(" <dataInputRefs>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
}
for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
if (entry.getValue() != null) {
- xmlDump.append(" <dataInputRefs>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
}
}
xmlDump.append(
" </inputSet>" + EOL);
xmlDump.append(" <outputSet>" + EOL);
for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
- xmlDump.append(" <dataOutputRefs>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+ xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
}
xmlDump.append(
" </outputSet>" + EOL);
@@ -140,14 +140,14 @@
for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
if (entry.getValue() != null) {
xmlDump.append(
- " <property id=\"_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "\" />" + EOL);
+ " <property id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "\" />" + EOL);
}
}
for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
xmlDump.append(" <dataInputAssociation>" + EOL);
xmlDump.append(
- " <sourceRef>_" + workItemNode.getUniqueId() + "_" + entry.getValue() + "</sourceRef>" + EOL +
- " <targetRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "</targetRef>" + EOL);
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</targetRef>" + EOL);
xmlDump.append(" </dataInputAssociation>" + EOL);
}
for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
@@ -156,18 +156,18 @@
xmlDump.append(
" <assignment>" + EOL +
" <from xs:type=\"tFormalExpression\">" + entry.getValue().toString() + "</from>" + EOL +
- " <to xs:type=\"tFormalExpression\">_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</to>" + EOL +
+ " <to xs:type=\"tFormalExpression\">_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</to>" + EOL +
" </assignment>" + EOL +
- " <sourceRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "</sourceRef>" + EOL +
- " <targetRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
xmlDump.append(" </dataInputAssociation>" + EOL);
}
}
for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
xmlDump.append(" <dataOutputAssociation>" + EOL);
xmlDump.append(
- " <sourceRef>_" + workItemNode.getUniqueId() + "_" + entry.getKey() + "</sourceRef>" + EOL +
- " <targetRef>_" + workItemNode.getUniqueId() + "_" + entry.getValue() + "</targetRef>" + EOL);
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</targetRef>" + EOL);
xmlDump.append(" </dataOutputAssociation>" + EOL);
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -5,9 +5,11 @@
import org.drools.definition.process.Connection;
import org.drools.definition.process.Node;
+import org.drools.definition.process.NodeContainer;
import org.drools.definition.process.WorkflowProcess;
import org.drools.process.core.context.variable.Variable;
import org.drools.process.core.context.variable.VariableScope;
+import org.drools.workflow.core.node.CompositeNode;
import org.drools.workflow.core.node.Split;
import org.drools.xml.Handler;
import org.drools.xml.SemanticModule;
@@ -141,9 +143,9 @@
}
public void visitConnection(Connection connection, StringBuilder xmlDump, boolean includeMeta) {
- xmlDump.append(" <sequenceFlow sourceRef=\"_" + connection.getFrom().getId() + "\" ");
+ xmlDump.append(" <sequenceFlow sourceRef=\"_" + getUniqueNodeId(connection.getFrom()) + "\" ");
// TODO fromType, toType
- xmlDump.append("targetRef=\"_" + connection.getTo().getId() + "\" ");
+ xmlDump.append("targetRef=\"_" + getUniqueNodeId(connection.getTo()) + "\" ");
if (includeMeta) {
String bendpoints = (String) connection.getMetaData("bendpoints");
if (bendpoints != null) {
@@ -165,4 +167,15 @@
}
}
+ public static String getUniqueNodeId(Node node) {
+ String result = node.getId() + "";
+ NodeContainer nodeContainer = node.getNodeContainer();
+ while (nodeContainer instanceof CompositeNode) {
+ CompositeNode composite = (CompositeNode) nodeContainer;
+ result = composite.getId() + "-" + result;
+ nodeContainer = composite.getNodeContainer();
+ }
+ return result;
+ }
+
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf 2009-08-17 14:42:17 UTC (rev 28962)
@@ -7,8 +7,12 @@
endEvent=org.drools.bpmn2.xml.EndEventHandler
exclusiveGateway=org.drools.bpmn2.xml.ExclusiveGatewayHandler
parallelGateway=org.drools.bpmn2.xml.ParallelGatewayHandler
+complexGateway=org.drools.bpmn2.xml.ComplexGatewayHandler
scriptTask=org.drools.bpmn2.xml.ScriptTaskHandler
task=org.drools.bpmn2.xml.TaskHandler
userTask=org.drools.bpmn2.xml.UserTaskHandler
+businessRuleTask=org.drools.bpmn2.xml.BusinessRuleTaskHandler
+callActivity=org.drools.bpmn2.xml.CallActivityHandler
+subProcess=org.drools.bpmn2.xml.SubProcessHandler
sequenceFlow=org.drools.bpmn2.xml.SequenceFlowHandler
\ No newline at end of file
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-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2009-08-17 14:42:17 UTC (rev 28962)
@@ -31,7 +31,7 @@
ksession.startProcess("Minimal");
}
- public void FIXME_testEvaluationProcess() throws Exception {
+ public void testEvaluationProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
@@ -50,7 +50,7 @@
ksession.startProcess("com.sample.evaluation", params);
}
- public void FIXME_testEvaluationProcess3() throws Exception {
+ public void testEvaluationProcess3() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-EvaluationProcess3.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
@@ -60,7 +60,7 @@
ksession.startProcess("Evaluation", params);
}
- public void FIXME_testExclusiveSplit() throws Exception {
+ public void testExclusiveSplit() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-ExclusiveSplit.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.getWorkItemManager().registerWorkItemHandler("Email", new SystemOutWorkItemHandler());
@@ -70,6 +70,12 @@
ksession.startProcess("com.sample.test", params);
}
+ public void testSubProcess() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-SubProcess.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.startProcess("SubProcess");
+ }
+
private KnowledgeBase createKnowledgeBase(String process) throws Exception {
KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
((PackageBuilderConfiguration) conf).initSemanticModules();
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess.xml 2009-08-17 14:42:17 UTC (rev 28962)
@@ -21,42 +21,37 @@
<property id="employee" itemSubjectRef="tns:employeeId" />
<!-- nodes -->
- <startEvent id="StartProcess"/>
- <scriptTask id="Log" scriptLanguage="java">
+ <startEvent id="_1" name="StartProcess"/>
+ <scriptTask id="_2" name="Log" scriptLanguage="java">
<script>System.out.println("Processing evaluation for employee " + employee);</script>
</scriptTask>
- <parallelGateway id="Diverge" gatewayDirection="diverging"/>
- <task id="RegisterRequest" name="RegisterRequest">
+ <parallelGateway id="_3" name="Diverge" gatewayDirection="diverging"/>
+ <task id="_4" name="RegisterRequest" tns:taskName="RegisterRequest">
<ioSpecification>
- <dataInput id="employeeIdInput" name="employeeId" />
- <dataInput id="descriptionInput" name="description" />
+ <dataInput id="_4_employeeIdInput" name="employeeId" />
<inputSet>
- <dataInputRefs>employeeInputSet</dataInputRefs>
+ <dataInputRefs>_4_employeeIdInput</dataInputRefs>
</inputSet>
<outputSet/>
</ioSpecification>
<dataInputAssociation>
<sourceRef>employee</sourceRef>
- <targetRef>employeeIdInput</targetRef>
+ <targetRef>_4_employeeIdInput</targetRef>
</dataInputAssociation>
- <dataInputAssociation>
- <sourceRef>description</sourceRef>
- <targetRef>descriptionInput</targetRef>
- </dataInputAssociation>
</task>
- <userTask id="Two">
+ <userTask id="_5" name="Two">
</userTask>
- <parallelGateway id="Converge" gatewayDirection="converging"/>
- <endEvent id="EndProcess"/>
+ <parallelGateway id="_6" name="Converge" gatewayDirection="converging"/>
+ <endEvent id="_7" name="EndProcess"/>
<!-- connections -->
- <sequenceFlow sourceRef="StartProcess" targetRef="Log"/>
- <sequenceFlow sourceRef="Log" targetRef="Diverge"/>
- <sequenceFlow sourceRef="Diverge" targetRef="RegisterRequest"/>
- <sequenceFlow sourceRef="Diverge" targetRef="Two"/>
- <sequenceFlow sourceRef="RegisterRequest" targetRef="Converge"/>
- <sequenceFlow sourceRef="Two" targetRef="Converge"/>
- <sequenceFlow sourceRef="Converge" targetRef="EndProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <sequenceFlow sourceRef="_3" targetRef="_5"/>
+ <sequenceFlow sourceRef="_4" targetRef="_6"/>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <sequenceFlow sourceRef="_6" targetRef="_7"/>
</process>
</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess3.xml 2009-08-17 14:42:17 UTC (rev 28962)
@@ -21,52 +21,52 @@
<property id="employee" itemSubjectRef="tns:employeeId" />
<!-- nodes -->
- <startEvent id="StartProcess"/>
- <scriptTask id="Log" scriptLanguage="java">
+ <startEvent id="_1" name="StartProcess"/>
+ <scriptTask id="_2" name="Log" scriptLanguage="java">
<script>System.out.println("Processing evaluation for employee " + employee);</script>
</scriptTask>
- <exclusiveGateway id="Diverge" gatewayDirection="diverging"/>
- <sequenceFlow sourceRef="Diverge" targetRef="RegisterRequest">
+ <exclusiveGateway id="_3" name="Diverge" gatewayDirection="diverging"/>
+ <sequenceFlow sourceRef="_3" targetRef="_4">
<conditionExpression>return employee == "john";</conditionExpression>
</sequenceFlow>
- <sequenceFlow sourceRef="Diverge" targetRef="Two">
+ <sequenceFlow sourceRef="_3" targetRef="_5">
<conditionExpression>return true;</conditionExpression>
</sequenceFlow>
- <task id="RegisterRequest" name="RegisterRequest">
+ <task id="_4" name="RegisterRequest" tns:taskName="RegisterRequest" >
<ioSpecification>
- <dataInput id="employeeIdInput" name="employeeId" itemSubjectRef="tns:employeeId" />
- <dataInput id="actorIdInput" name="actorId" itemSubjectRef="tns:employeeId" />
+ <dataInput id="_4_employeeIdInput" name="employeeId" itemSubjectRef="tns:employeeId" />
+ <dataInput id="_4_actorIdInput" name="actorId" itemSubjectRef="tns:employeeId" />
<inputSet>
- <dataInputRefs>employeeIdInput</dataInputRefs>
- <dataInputRefs>actorIdInput</dataInputRefs>
+ <dataInputRefs>_4_employeeIdInput</dataInputRefs>
+ <dataInputRefs>_4_actorIdInput</dataInputRefs>
</inputSet>
<outputSet/>
</ioSpecification>
- <property id="actorId" itemSubjectRef="java.lang.String" />
+ <property id="_4_actorId" itemSubjectRef="java.lang.String" />
<dataInputAssociation>
<sourceRef>employee</sourceRef>
- <targetRef>employeeIdInput</targetRef>
+ <targetRef>_4_employeeIdInput</targetRef>
</dataInputAssociation>
<dataInputAssociation>
<assignment>
<from xs:type="tFormalExpression">John</from>
- <to xs:type="tFormalExpression">actorId</to>
+ <to xs:type="tFormalExpression">_4_actorId</to>
</assignment>
- <sourceRef>actorId</sourceRef>
- <targetRef>actorIdInput</targetRef>
+ <sourceRef>_4_actorId</sourceRef>
+ <targetRef>_4_actorIdInput</targetRef>
</dataInputAssociation>
</task>
- <userTask id="Two">
+ <userTask id="_5" name="Two">
</userTask>
- <exclusiveGateway id="Converge" gatewayDirection="converging"/>
- <endEvent id="EndProcess"/>
+ <exclusiveGateway id="_6" name="Converge" gatewayDirection="converging"/>
+ <endEvent id="_7" name="EndProcess"/>
<!-- connections -->
- <sequenceFlow sourceRef="StartProcess" targetRef="Log"/>
- <sequenceFlow sourceRef="Log" targetRef="Diverge"/>
- <sequenceFlow sourceRef="RegisterRequest" targetRef="Converge"/>
- <sequenceFlow sourceRef="Two" targetRef="Converge"/>
- <sequenceFlow sourceRef="Converge" targetRef="EndProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <sequenceFlow sourceRef="_4" targetRef="_6"/>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <sequenceFlow sourceRef="_6" targetRef="_7"/>
</process>
</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml 2009-08-17 14:33:47 UTC (rev 28961)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml 2009-08-17 14:42:17 UTC (rev 28962)
@@ -19,81 +19,81 @@
<property id="y" itemSubjectRef="tns:yItem"/>
<!-- nodes -->
- <scriptTask id="Script2" g:x="177" g:y="96" g:width="80" g:height="48" scriptLanguage="mvel" >
+ <startEvent id="_1" name="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
+ <exclusiveGateway id="_2" name="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
+ <scriptTask id="_3" name="Script1" g:x="177" g:y="16" g:width="80" g:height="48" scriptLanguage="mvel" >
+ <script>System.out.println("x=" + x);</script>
+ </scriptTask>
+ <scriptTask id="_4" name="Script2" g:x="177" g:y="96" g:width="80" g:height="48" scriptLanguage="mvel" >
<script>System.out.println("y=" + y);</script>
</scriptTask>
- <endEvent id="End" g:x="370" g:y="56" g:width="48" g:height="48" />
- <task id="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
+ <exclusiveGateway id="_5" name="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+ <task id="_6" name="Email" g:x="163" g:y="180" g:width="100" g:height="48" tns:taskName="Email">
<ioSpecification>
- <dataInput id="FromInput" name="From" />
- <dataInput id="ToInput" name="To" />
- <dataInput id="SubjectInput" name="Subject" />
- <dataInput id="BodyInput" name="Body" />
+ <dataInput id="_6_FromInput" name="From" />
+ <dataInput id="_6_ToInput" name="To" />
+ <dataInput id="_6_SubjectInput" name="Subject" />
+ <dataInput id="_6_BodyInput" name="Body" />
<inputSet>
- <dataInputRefs>FromInput</dataInputRefs>
- <dataInputRefs>ToInput</dataInputRefs>
- <dataInputRefs>SubjectInput</dataInputRefs>
- <dataInputRefs>BodyInput</dataInputRefs>
+ <dataInputRefs>_6_FromInput</dataInputRefs>
+ <dataInputRefs>_6_ToInput</dataInputRefs>
+ <dataInputRefs>_6_SubjectInput</dataInputRefs>
+ <dataInputRefs>_6_BodyInput</dataInputRefs>
</inputSet>
<outputSet>
</outputSet>
</ioSpecification>
- <property id="From" />
- <property id="Subject" />
- <property id="To" />
- <property id="Body" />
+ <property id="_6_From" />
+ <property id="_6_Subject" />
+ <property id="_6_To" />
+ <property id="_6_Body" />
<dataInputAssociation>
<assignment>
<from xs:type="tFormalExpression">me at mail.com</from>
- <to xs:type="tFormalExpression">From</to>
+ <to xs:type="tFormalExpression">_6_From</to>
</assignment>
- <sourceRef>From</sourceRef>
- <targetRef>FromInput</targetRef>
+ <sourceRef>_6_From</sourceRef>
+ <targetRef>_6_FromInput</targetRef>
</dataInputAssociation>
<dataInputAssociation>
<assignment>
<from xs:type="tFormalExpression">Urgent email !</from>
- <to xs:type="tFormalExpression">Subject</to>
+ <to xs:type="tFormalExpression">_6_Subject</to>
</assignment>
- <sourceRef>Subject</sourceRef>
- <targetRef>SubjectInput</targetRef>
+ <sourceRef>_6_Subject</sourceRef>
+ <targetRef>_6_SubjectInput</targetRef>
</dataInputAssociation>
<dataInputAssociation>
<assignment>
<from xs:type="tFormalExpression">you at mail.com</from>
- <to xs:type="tFormalExpression">To</to>
+ <to xs:type="tFormalExpression">_6_To</to>
</assignment>
- <sourceRef>To</sourceRef>
- <targetRef>ToInput</targetRef>
+ <sourceRef>_6_To</sourceRef>
+ <targetRef>_6_ToInput</targetRef>
</dataInputAssociation>
<dataInputAssociation>
<assignment>
<from xs:type="tFormalExpression">This is an urgent email #{x}</from>
- <to xs:type="tFormalExpression">Body</to>
+ <to xs:type="tFormalExpression">_6_Body</to>
</assignment>
- <sourceRef>Body</sourceRef>
- <targetRef>BodyInput</targetRef>
+ <sourceRef>_6_Body</sourceRef>
+ <targetRef>_6_BodyInput</targetRef>
</dataInputAssociation>
</task>
- <exclusiveGateway id="Split" g:x="96" g:y="56" g:width="49" g:height="49" gatewayDirection="diverging" />
- <startEvent id="Start" g:x="16" g:y="56" g:width="48" g:height="48" />
- <scriptTask id="Script1" g:x="177" g:y="16" g:width="80" g:height="48" scriptLanguage="mvel" >
- <script>System.out.println("x=" + x);</script>
- </scriptTask>
- <exclusiveGateway id="Join" g:x="289" g:y="56" g:width="49" g:height="49" gatewayDirection="converging" />
+ <endEvent id="_7" name="End" g:x="370" g:y="56" g:width="48" g:height="48" />
<!-- connections -->
- <sequenceFlow sourceRef="Split" targetRef="Script2" g:bendpoints="[120,120]" >
+ <sequenceFlow sourceRef="_1" targetRef="_2" />
+ <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[120,40]" >
+ <conditionExpression>return x == "First";</conditionExpression>
+ </sequenceFlow>
+ <sequenceFlow sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" >
<conditionExpression>return x == "Second";</conditionExpression>
</sequenceFlow>
- <sequenceFlow sourceRef="Start" targetRef="Split" />
- <sequenceFlow sourceRef="Split" targetRef="Script1" g:bendpoints="[120,40]" >
- <conditionExpression>return x == "First";</conditionExpression>
- </sequenceFlow>
- <sequenceFlow sourceRef="Script2" targetRef="Join" g:bendpoints="[314,119]" />
- <sequenceFlow sourceRef="Script1" targetRef="Join" g:bendpoints="[313,40]" />
- <sequenceFlow sourceRef="Join" targetRef="Email" />
- <sequenceFlow sourceRef="Email" targetRef="End" />
+ <sequenceFlow sourceRef="_3" targetRef="_5" g:bendpoints="[313,40]" />
+ <sequenceFlow sourceRef="_4" targetRef="_5" g:bendpoints="[314,119]" />
+ <sequenceFlow sourceRef="_5" targetRef="_6" />
+ <sequenceFlow sourceRef="_6" targetRef="_7" />
</process>
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-SubProcess.xml 2009-08-17 14:42:17 UTC (rev 28962)
@@ -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.example.org/MinimalExample">
+
+ <process id="SubProcess" name="Minimal SubProcess">
+ <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"/>
+ <scriptTask id="_2-2" name="Hello" scriptLanguage="java">
+ <script>System.out.println("Hello World");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2-2" targetRef="_2-3"/>
+ <endEvent id="_2-3" name="EndSubProcess"/>
+ </subProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess"/>
+ </process>
+</definitions>
More information about the jboss-svn-commits
mailing list