[jboss-svn-commits] JBL Code SVN: r28996 - in labs/jbossrules/trunk: drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Aug 20 10:43:31 EDT 2009
Author: KrisVerlaenen
Date: 2009-08-20 10:43:30 -0400 (Thu, 20 Aug 2009)
New Revision: 28996
Added:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.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/CallActivityHandler.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/resources/META-INF/BPMN2SemanticModule.conf
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
Log:
- bpmn2 commit
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java 2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java 2009-08-20 14:43:30 UTC (rev 28996)
@@ -115,9 +115,11 @@
ProcessInstance processInstance = ( ProcessInstance )
((ProcessInstance) getProcessInstance()).getWorkingMemory()
.startProcess(processId, parameters);
- if (!getSubProcessNode().isWaitForCompletion()
- || processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
+ if (!getSubProcessNode().isWaitForCompletion()) {
triggerCompleted();
+ } else if (processInstance.getState() == ProcessInstance.STATE_COMPLETED) {
+ handleOutMappings(processInstance);
+ triggerCompleted();
} else {
this.processInstanceId = processInstance.getId();
addProcessListener();
@@ -173,28 +175,32 @@
public void processInstanceCompleted(ProcessInstance processInstance) {
removeEventListeners();
- VariableScopeInstance subProcessVariableScopeInstance = (VariableScopeInstance)
- processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
- for (Map.Entry<String, String> mapping: getSubProcessNode().getOutMappings().entrySet()) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- resolveContextInstance(VariableScope.VARIABLE_SCOPE, mapping.getValue());
- if (variableScopeInstance != null) {
- Object value = subProcessVariableScopeInstance.getVariable(mapping.getKey());
- if (value == null) {
- try {
- value = MVEL.eval(mapping.getKey(), new VariableScopeResolverFactory(subProcessVariableScopeInstance));
- } catch (Throwable t) {
- // do nothing
- }
- }
- variableScopeInstance.setVariable(mapping.getValue(), value);
- } else {
- System.err.println("Could not find variable scope for variable " + mapping.getValue());
- System.err.println("when trying to complete SubProcess node " + getSubProcessNode().getName());
- System.err.println("Continuing without setting variable.");
- }
- }
+ handleOutMappings(processInstance);
triggerCompleted();
}
+
+ private void handleOutMappings(ProcessInstance processInstance) {
+ VariableScopeInstance subProcessVariableScopeInstance = (VariableScopeInstance)
+ processInstance.getContextInstance(VariableScope.VARIABLE_SCOPE);
+ for (Map.Entry<String, String> mapping: getSubProcessNode().getOutMappings().entrySet()) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
+ resolveContextInstance(VariableScope.VARIABLE_SCOPE, mapping.getValue());
+ if (variableScopeInstance != null) {
+ Object value = subProcessVariableScopeInstance.getVariable(mapping.getKey());
+ if (value == null) {
+ try {
+ value = MVEL.eval(mapping.getKey(), new VariableScopeResolverFactory(subProcessVariableScopeInstance));
+ } catch (Throwable t) {
+ // do nothing
+ }
+ }
+ variableScopeInstance.setVariable(mapping.getValue(), value);
+ } else {
+ System.err.println("Could not find variable scope for variable " + mapping.getValue());
+ System.err.println("when trying to complete SubProcess node " + getSubProcessNode().getName());
+ System.err.println("Continuing without setting variable.");
+ }
+ }
+ }
}
\ No newline at end of file
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-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/BPMNSemanticModule.java 2009-08-20 14:43:30 UTC (rev 28996)
@@ -24,6 +24,7 @@
addHandler("businessRuleTask", new BusinessRuleTaskHandler());
addHandler("callActivity", new CallActivityHandler());
addHandler("subProcess", new SubProcessHandler());
+ addHandler("intermediateCatchEvent", new IntermediateCatchEventHandler());
addHandler("sequenceFlow", new SequenceFlowHandler());
Modified: 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 2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/CallActivityHandler.java 2009-08-20 14:43:30 UTC (rev 28996)
@@ -1,5 +1,8 @@
package org.drools.bpmn2.xml;
+import java.util.HashMap;
+import java.util.Map;
+
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.SubProcessNode;
import org.drools.xml.ExtensibleXmlParser;
@@ -26,7 +29,66 @@
if (processId != null) {
subProcessNode.setProcessId(processId);
}
+ String waitForCompletion = element.getAttribute("waitForCompletion");
+ if (waitForCompletion != null && "false".equals(waitForCompletion)) {
+ subProcessNode.setWaitForCompletion(false);
+ }
+ String independent = element.getAttribute("independent");
+ if (independent != null && "false".equals(independent)) {
+ subProcessNode.setIndependent(false);
+ }
+ Map<String, String> dataInputs = new HashMap<String, String>();
+ Map<String, String> dataOutputs = new HashMap<String, String>();
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("ioSpecification".equals(nodeName)) {
+ readIoSpecification(xmlNode, dataInputs, dataOutputs);
+ } else if ("dataInputAssociation".equals(nodeName)) {
+ readDataInputAssociation(xmlNode, subProcessNode, dataInputs);
+ } else if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, subProcessNode, dataOutputs);
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
}
+
+ protected void readIoSpecification(org.w3c.dom.Node xmlNode, Map<String, String> dataInputs, Map<String, String> dataOutputs) {
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ while (subNode instanceof Element) {
+ String subNodeName = subNode.getNodeName();
+ if ("dataInput".equals(subNodeName)) {
+ String id = ((Element) subNode).getAttribute("id");
+ String inputName = ((Element) subNode).getAttribute("name");
+ dataInputs.put(id, inputName);
+ } else if ("dataOutput".equals(subNodeName)) {
+ String id = ((Element) subNode).getAttribute("id");
+ String outputName = ((Element) subNode).getAttribute("name");
+ dataOutputs.put(id, outputName);
+ }
+ subNode = subNode.getNextSibling();
+ }
+ }
+
+ protected void readDataInputAssociation(org.w3c.dom.Node xmlNode, SubProcessNode subProcessNode, Map<String, String> dataInputs) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ String from = subNode.getTextContent();
+ // targetRef
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ subProcessNode.addInMapping(dataInputs.get(to), from);
+ }
+
+ protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, SubProcessNode subProcessNode, Map<String, String> dataOutputs) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ String from = subNode.getTextContent();
+ // targetRef
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ subProcessNode.addOutMapping(dataOutputs.get(from), to);
+ }
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
SubProcessNode subProcessNode = (SubProcessNode) node;
@@ -34,7 +96,50 @@
if (subProcessNode.getProcessId() != null) {
xmlDump.append("calledElement=\"" + subProcessNode.getProcessId() + "\" ");
}
- endNode(xmlDump);
+ if (!subProcessNode.isWaitForCompletion()) {
+ xmlDump.append("tns:waitForCompletion=\"false\" ");
+ }
+ if (!subProcessNode.isIndependent()) {
+ xmlDump.append("tns:independent=\"false\" ");
+ }
+ xmlDump.append(">" + EOL);
+ writeIO(subProcessNode, xmlDump);
+ endNode("callActivity", xmlDump);
}
+ protected void writeIO(SubProcessNode subProcessNode, StringBuilder xmlDump) {
+ xmlDump.append(" <ioSpecification>" + EOL);
+ for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output\" name=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ xmlDump.append(" <inputSet>" + EOL);
+ for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input</dataInputRefs>" + EOL);
+ }
+ xmlDump.append(" </inputSet>" + EOL);
+ xmlDump.append(" <outputSet>" + EOL);
+ for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output</dataOutputRefs>" + EOL);
+ }
+ xmlDump.append(" </outputSet>" + EOL);
+ xmlDump.append(" </ioSpecification>" + EOL);
+ for (Map.Entry<String, String> entry: subProcessNode.getInMappings().entrySet()) {
+ xmlDump.append(" <dataInputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
+ xmlDump.append(" </dataInputAssociation>" + EOL);
+ }
+ for (Map.Entry<String, String> entry: subProcessNode.getOutMappings().entrySet()) {
+ xmlDump.append(" <dataOutputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(subProcessNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+ " <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataOutputAssociation>" + EOL);
+ }
+ }
+
}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/IntermediateCatchEventHandler.java 2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,84 @@
+package org.drools.bpmn2.xml;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+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.node.EventNode;
+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 IntermediateCatchEventHandler extends AbstractNodeHandler {
+
+ protected Node createNode(Attributes attrs) {
+ return new EventNode();
+ }
+
+ @SuppressWarnings("unchecked")
+ public Class generateNodeFor() {
+ return EventNode.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);
+ EventNode eventNode = (EventNode) node;
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("dataOutputAssociation".equals(nodeName)) {
+ readDataOutputAssociation(xmlNode, eventNode);
+ } else if ("signalEventDefinition".equals(nodeName)) {
+ String type = ((Element) xmlNode).getAttribute("signalRef");
+ if (type != null && type.trim().length() > 0) {
+ List<EventFilter> eventFilters = new ArrayList<EventFilter>();
+ EventTypeFilter eventFilter = new EventTypeFilter();
+ eventFilter.setType(type);
+ eventFilters.add(eventFilter);
+ eventNode.setEventFilters(eventFilters);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
+ }
+
+ protected void readDataOutputAssociation(org.w3c.dom.Node xmlNode, EventNode eventNode) {
+ // sourceRef
+ org.w3c.dom.Node subNode = xmlNode.getFirstChild();
+ // targetRef
+ subNode = subNode.getNextSibling();
+ String to = subNode.getTextContent();
+ eventNode.setVariableName(to);
+ }
+
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
+ EventNode eventNode = (EventNode) node;
+ writeNode("intermediateCatchEvent", eventNode, xmlDump, includeMeta);
+ xmlDump.append(">" + EOL);
+ if (eventNode.getVariableName() != null) {
+ xmlDump.append(" <dataOutput id=\"_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output\" name=\"event\" />" + EOL);
+ xmlDump.append(" <dataOutputAssociation>" + EOL);
+ xmlDump.append(
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</sourceRef>" + EOL +
+ " <targetRef>" + eventNode.getVariableName() + "</targetRef>" + EOL);
+ xmlDump.append(" </dataOutputAssociation>" + EOL);
+ xmlDump.append(" <outputSet>" + EOL);
+ xmlDump.append(" <dataOutputRefs>_" + XmlBPMNProcessDumper.getUniqueNodeId(eventNode) + "_Output</dataOutputRefs>" + EOL);
+ xmlDump.append(" </outputSet>" + EOL);
+ }
+ if (eventNode.getEventFilters().size() > 0) {
+ String type = ((EventTypeFilter) eventNode.getEventFilters().get(0)).getType();
+ xmlDump.append(" <signalEventDefinition signalRef=\"" + type + "\"/>" + EOL);
+
+ }
+ endNode("intermediateCatchEvent", xmlDump);
+ }
+
+}
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-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/TaskHandler.java 2009-08-20 14:43:30 UTC (rev 28996)
@@ -92,9 +92,7 @@
// targetRef
subNode = subNode.getNextSibling();
String to = subNode.getTextContent();
- workItemNode.addOutMapping(
- from.substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2),
- dataOutputs.get(to).substring(XmlBPMNProcessDumper.getUniqueNodeId(workItemNode).length() + 2));
+ workItemNode.addOutMapping(dataOutputs.get(from), to);
}
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
@@ -146,8 +144,8 @@
for (Map.Entry<String, String> entry: workItemNode.getInMappings().entrySet()) {
xmlDump.append(" <dataInputAssociation>" + EOL);
xmlDump.append(
- " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</sourceRef>" + EOL +
- " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</targetRef>" + EOL);
+ " <sourceRef>" + entry.getValue() + "</sourceRef>" + EOL +
+ " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Input</targetRef>" + EOL);
xmlDump.append(" </dataInputAssociation>" + EOL);
}
for (Map.Entry<String, Object> entry: workItemNode.getWork().getParameters().entrySet()) {
@@ -166,8 +164,8 @@
for (Map.Entry<String, String> entry: workItemNode.getOutMappings().entrySet()) {
xmlDump.append(" <dataOutputAssociation>" + EOL);
xmlDump.append(
- " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "</sourceRef>" + EOL +
- " <targetRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getValue() + "</targetRef>" + EOL);
+ " <sourceRef>_" + XmlBPMNProcessDumper.getUniqueNodeId(workItemNode) + "_" + entry.getKey() + "Output</sourceRef>" + EOL +
+ " <targetRef>" + entry.getValue() + "</targetRef>" + EOL);
xmlDump.append(" </dataOutputAssociation>" + EOL);
}
}
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf 2009-08-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/resources/META-INF/BPMN2SemanticModule.conf 2009-08-20 14:43:30 UTC (rev 28996)
@@ -14,5 +14,6 @@
businessRuleTask=org.drools.bpmn2.xml.BusinessRuleTaskHandler
callActivity=org.drools.bpmn2.xml.CallActivityHandler
subProcess=org.drools.bpmn2.xml.SubProcessHandler
+intermediateCatchEvent=org.drools.bpmn2.xml.IntermediateCatchEventHandler
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-20 13:55:31 UTC (rev 28995)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2009-08-20 14:43:30 UTC (rev 28996)
@@ -14,21 +14,27 @@
import org.drools.builder.ResourceType;
import org.drools.compiler.PackageBuilderConfiguration;
import org.drools.io.ResourceFactory;
+import org.drools.process.instance.impl.demo.DoNothingWorkItemHandler;
import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
+import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.process.ProcessInstance;
+import org.drools.runtime.process.WorkflowProcessInstance;
public class SimpleBPMNProcessTest extends TestCase {
public void testMinimalProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcess.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession.startProcess("Minimal");
+ ProcessInstance processInstance = ksession.startProcess("Minimal");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
public void testMinimalProcessWithGraphical() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-MinimalProcessWithGraphical.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession.startProcess("Minimal");
+ ProcessInstance processInstance = ksession.startProcess("Minimal");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
public void testEvaluationProcess() throws Exception {
@@ -38,7 +44,8 @@
ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler());
Map<String, Object> params = new HashMap<String, Object>();
params.put("employee", "UserId-12345");
- ksession.startProcess("Evaluation", params);
+ ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
public void testEvaluationProcess2() throws Exception {
@@ -47,7 +54,8 @@
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler());
Map<String, Object> params = new HashMap<String, Object>();
params.put("employee", "UserId-12345");
- ksession.startProcess("com.sample.evaluation", params);
+ ProcessInstance processInstance = ksession.startProcess("com.sample.evaluation", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
public void testEvaluationProcess3() throws Exception {
@@ -57,7 +65,8 @@
ksession.getWorkItemManager().registerWorkItemHandler("RegisterRequest", new SystemOutWorkItemHandler());
Map<String, Object> params = new HashMap<String, Object>();
params.put("employee", "john2");
- ksession.startProcess("Evaluation", params);
+ ProcessInstance processInstance = ksession.startProcess("Evaluation", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
public void testExclusiveSplit() throws Exception {
@@ -67,15 +76,50 @@
Map<String, Object> params = new HashMap<String, Object>();
params.put("x", "First");
params.put("y", "Second");
- ksession.startProcess("com.sample.test", params);
+ ProcessInstance processInstance = ksession.startProcess("com.sample.test", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testCallActivity() throws Exception {
+ KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+ ((PackageBuilderConfiguration) conf).initSemanticModules();
+ ((PackageBuilderConfiguration) conf).loadSemanticModule("BPMN2SemanticModule.conf");
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+ kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivity.xml"), ResourceType.DRF);
+ kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-CallActivitySubProcess.xml"), ResourceType.DRF);
+ if (!kbuilder.getErrors().isEmpty()) {
+ for (KnowledgeBuilderError error: kbuilder.getErrors()) {
+ System.err.println(error);
+ }
+ throw new IllegalArgumentException("Errors while parsing knowledge base");
+ }
+ KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.put("x", "oldValue");
+ ProcessInstance processInstance = ksession.startProcess("ParentProcess", params);
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ assertEquals("new value", ((WorkflowProcessInstance) processInstance).getVariable("y"));
+ }
+
public void testSubProcess() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-SubProcess.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
- ksession.startProcess("SubProcess");
+ ProcessInstance processInstance = ksession.startProcess("SubProcess");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
+ public void testIntermediateCatchEvent() throws Exception {
+ KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEvent.xml");
+ StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
+ ProcessInstance processInstance = ksession.startProcess("IntermediateCatchEvent");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ // now signal process instance
+ processInstance.signalEvent("MyMessage", "SomeValue");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
private KnowledgeBase createKnowledgeBase(String process) throws Exception {
KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
((PackageBuilderConfiguration) conf).initSemanticModules();
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivity.xml 2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+ <itemDefinition id="yType" structureRef="java.lang.String" />
+
+ <process id="ParentProcess" name="Parent Process">
+ <property id="x" itemSubjectRef="tns:xType" />
+ <property id="y" itemSubjectRef="tns:yType" />
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <callActivity id="_2" name="CallActivity" calledElement="SubProcess">
+ <ioSpecification>
+ <dataInput id="_2_subXInput" name="subX" />
+ <dataOutput id="_2_subYOutput" name="subY" />
+ <inputSet>
+ <dataInputRefs>_2_subXInput</dataInputRefs>
+ </inputSet>
+ <outputSet>
+ <dataOutputRefs>_2_subYOutput</dataOutputRefs>
+ </outputSet>
+ </ioSpecification>
+ <dataInputAssociation>
+ <sourceRef>x</sourceRef>
+ <targetRef>_2_subXInput</targetRef>
+ </dataInputAssociation>
+ <dataOutputAssociation>
+ <sourceRef>_2_subYOutput</sourceRef>
+ <targetRef>y</targetRef>
+ </dataOutputAssociation>
+ </callActivity>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess"/>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-CallActivitySubProcess.xml 2009-08-20 14:43:30 UTC (rev 28996)
@@ -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">
+
+ <itemDefinition id="subXType" structureRef="java.lang.String" />
+ <itemDefinition id="subYType" structureRef="java.lang.String" />
+
+ <process id="SubProcess" name="Sub Process">
+ <property id="subX" itemSubjectRef="tns:subXType" />
+ <property id="subY" itemSubjectRef="tns:subYType" />
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <scriptTask id="_2" name="Hello">
+ <script>System.out.println("subX=" + subX);
+kcontext.setVariable("subY", "new value");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess"/>
+ </process>
+</definitions>
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-IntermediateCatchEvent.xml 2009-08-20 14:43:30 UTC (rev 28996)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions id="Definition"
+ targetNamespace="http://www.example.org/MinimalExample"
+ typeLanguage="http://www.java.com/javaTypes"
+ expressionLanguage="http://www.mvel.org/2.0"
+ xmlns="http://schema.omg.org/spec/BPMN/2.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
+ xs:schemaLocation="http://schema.omg.org/spec/BPMN/2.0 BPMN20.xsd"
+ xmlns:tns="http://www.example.org/MinimalExample">
+
+ <itemDefinition id="xType" structureRef="java.lang.String" />
+
+ <process id="IntermediateCatchEvent" name="IntermediateCatchEvent Process">
+
+ <property id="x" itemSubjectRef="tns:xType" />
+
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <userTask id="_2" name="UserTask">
+ </userTask>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <endEvent id="_3" name="EndProcess"/>
+
+ <intermediateCatchEvent id="_4">
+ <dataOutput id="_4_Output" name="event" />
+ <dataOutputAssociation>
+ <sourceRef>_4_Output</sourceRef>
+ <targetRef>x</targetRef>
+ </dataOutputAssociation>
+ <outputSet>
+ <dataOutputRefs>_4_Output</dataOutputRefs>
+ </outputSet>
+ <signalEventDefinition signalRef="MyMessage" />
+ </intermediateCatchEvent>
+ <sequenceFlow sourceRef="_4" targetRef="_5"/>
+ <scriptTask id="_5" name="Event">
+ <script>System.out.println(x);</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_5" targetRef="_6"/>
+ <endEvent id="_6" name="EndProcess"/>
+
+ </process>
+</definitions>
More information about the jboss-svn-commits
mailing list