[jboss-svn-commits] JBL Code SVN: r32430 - 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
Mon Apr 5 19:16:17 EDT 2010
Author: KrisVerlaenen
Date: 2010-04-05 19:16:16 -0400 (Mon, 05 Apr 2010)
New Revision: 32430
Added:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl
Modified:
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.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/XmlBPMNProcessDumper.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml
Log:
- extended BPMN2 implementation
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java 2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/AdHocSubProcessHandler.java 2010-04-05 23:16:16 UTC (rev 32430)
@@ -32,6 +32,21 @@
final String localName, final ExtensibleXmlParser parser) throws SAXException {
super.handleNode(node, element, uri, localName, parser);
DynamicNode dynamicNode = (DynamicNode) node;
+ String cancelRemainingInstances = element.getAttribute("cancelRemainingInstances");
+ if ("false".equals(cancelRemainingInstances)) {
+ dynamicNode.setCancelRemainingInstances(false);
+ }
+ org.w3c.dom.Node xmlNode = element.getFirstChild();
+ while (xmlNode != null) {
+ String nodeName = xmlNode.getNodeName();
+ if ("completionCondition".equals(nodeName)) {
+ String expression = xmlNode.getTextContent();
+ if ("getActivityInstanceAttribute(\"numberOfActiveInstances\") == 0".equals(expression)) {
+ dynamicNode.setAutoComplete(true);
+ }
+ }
+ xmlNode = xmlNode.getNextSibling();
+ }
List<SequenceFlow> connections = (List<SequenceFlow>)
dynamicNode.getMetaData(ProcessHandler.CONNECTIONS);
ProcessHandler.linkConnections(dynamicNode, connections);
@@ -41,6 +56,9 @@
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
DynamicNode dynamicNode = (DynamicNode) node;
writeNode("adHocSubProcess", dynamicNode, xmlDump, includeMeta);
+ if (!dynamicNode.isCancelRemainingInstances()) {
+ xmlDump.append(" cancelRemainingInstances=\"false\"");
+ }
xmlDump.append(" ordering=\"parallel\" >" + EOL);
// nodes
List<Node> subNodes = getSubNodes(dynamicNode);
@@ -54,6 +72,9 @@
for (Connection connection: connections) {
XmlBPMNProcessDumper.INSTANCE.visitConnection(connection, xmlDump, includeMeta);
}
+ if (dynamicNode.isAutoComplete()) {
+ xmlDump.append(" <completionCondition xs:type=\"tFormalExpression\">getActivityInstanceAttribute(\"numberOfActiveInstances\") == 0</completionCondition>" + EOL);
+ }
endNode("adHocSubProcess", xmlDump);
}
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 2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/SequenceFlowHandler.java 2010-04-05 23:16:16 UTC (rev 32430)
@@ -48,6 +48,7 @@
final String sourceRef = attrs.getValue("sourceRef");
final String targetRef = attrs.getValue("targetRef");
final String bendpoints = attrs.getValue("g:bendpoints");
+ final String name = attrs.getValue("name");
NodeContainer nodeContainer = (NodeContainer) parser.getParent();
@@ -69,6 +70,7 @@
}
SequenceFlow connection = new SequenceFlow(id, sourceRef, targetRef);
connection.setBendpoints(bendpoints);
+ connection.setName(name);
connections.add(connection);
@@ -98,11 +100,6 @@
throw new IllegalArgumentException("Unknown language " + language);
}
}
- org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
- if (nameNode != null) {
- String name = nameNode.getNodeValue();
- sequenceFlow.setName(name);
- }
sequenceFlow.setExpression(expression);
}
xmlNode = xmlNode.getNextSibling();
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/main/java/org/drools/bpmn2/xml/XmlBPMNProcessDumper.java 2010-04-05 23:16:16 UTC (rev 32430)
@@ -350,11 +350,15 @@
Split split = (Split) connection.getFrom();
if (split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR) {
Constraint constraint = split.getConstraint(connection);
- xmlDump.append(">" + EOL +
- " <conditionExpression xs:type=\"tFormalExpression\" ");
if (constraint == null) {
- xmlDump.append("/>");
+ xmlDump.append(">" + EOL +
+ " <conditionExpression xs:type=\"tFormalExpression\" />");
} else {
+ if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
+ xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
+ }
+ xmlDump.append(">" + EOL +
+ " <conditionExpression xs:type=\"tFormalExpression\" ");
if ("code".equals(constraint.getType())) {
if (JavaDialect.ID.equals(constraint.getDialect())) {
xmlDump.append("language=\"" + JAVA_LANGUAGE + "\" ");
@@ -364,9 +368,6 @@
} else {
xmlDump.append("language=\"" + RULE_LANGUAGE + "\" ");
}
- if (constraint.getName() != null && constraint.getName().trim().length() > 0) {
- xmlDump.append("tns:name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
- }
String constraintString = constraint.getConstraint();
if (constraintString == null) {
constraintString = "";
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java 2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/BPMN2XMLTest.java 2010-04-05 23:16:16 UTC (rev 32430)
@@ -15,7 +15,8 @@
public class BPMN2XMLTest extends XMLTestCase {
private static final String[] processes = {
- "BPMN2-SimpleXMLProcess.xml"
+ "BPMN2-SimpleXMLProcess.xml",
+// "BPMN2-MinimalProcess.xml",
};
public void setUp() throws Exception {
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-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/java/org/drools/bpmn2/SimpleBPMNProcessTest.java 2010-04-05 23:16:16 UTC (rev 32430)
@@ -254,19 +254,84 @@
}
public void testAdHocSubProcess() throws Exception {
- KnowledgeBase kbase = createKnowledgeBase("BPMN2-AdHocSubProcess.xml");
+ KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+ ((PackageBuilderConfiguration) conf).initSemanticModules();
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
+ ((PackageBuilderConfiguration) conf).addDialect("XPath", new XPathDialectConfiguration());
+ XmlProcessReader processReader = new XmlProcessReader(
+ ((PackageBuilderConfiguration) conf).getSemanticModules());
+ RuleFlowProcess p = (RuleFlowProcess)
+ processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/BPMN2-AdHocSubProcess.xml"));
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+ System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+ kbuilder.add(ResourceFactory.newReaderResource(
+ new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
+ kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-AdHocSubProcess.drl"), ResourceType.DRL);
+ 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();
TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
ProcessInstance processInstance = ksession.startProcess("AdHocSubProcess");
assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
WorkItem workItem = workItemHandler.getWorkItem();
+ assertNull(workItem);
+ ksession.fireAllRules();
+ System.out.println("Signaling Hello2");
+ processInstance.signalEvent("Hello2", null);
+ workItem = workItemHandler.getWorkItem();
assertNotNull(workItem);
ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+// assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
+ }
+
+ public void testAdHocSubProcessAutoComplete() throws Exception {
+ KnowledgeBuilderConfiguration conf = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
+ ((PackageBuilderConfiguration) conf).initSemanticModules();
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNSemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMN2SemanticModule());
+ ((PackageBuilderConfiguration) conf).addSemanticModule(new BPMNDISemanticModule());
+ ((PackageBuilderConfiguration) conf).addDialect("XPath", new XPathDialectConfiguration());
+ XmlProcessReader processReader = new XmlProcessReader(
+ ((PackageBuilderConfiguration) conf).getSemanticModules());
+ RuleFlowProcess p = (RuleFlowProcess)
+ processReader.read(SimpleBPMNProcessTest.class.getResourceAsStream("/BPMN2-AdHocSubProcessAutoComplete.xml"));
+ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(conf);
+ System.out.println(XmlBPMNProcessDumper.INSTANCE.dump(p));
+ kbuilder.add(ResourceFactory.newReaderResource(
+ new StringReader(XmlBPMNProcessDumper.INSTANCE.dump(p))), ResourceType.DRF);
+ kbuilder.add(ResourceFactory.newClassPathResource("BPMN2-AdHocSubProcess.drl"), ResourceType.DRL);
+ 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();
+ TestWorkItemHandler workItemHandler = new TestWorkItemHandler();
+ ksession.getWorkItemManager().registerWorkItemHandler("Human Task", workItemHandler);
+ ProcessInstance processInstance = ksession.startProcess("AdHocSubProcess");
+ assertTrue(processInstance.getState() == ProcessInstance.STATE_ACTIVE);
+ WorkItem workItem = workItemHandler.getWorkItem();
+ assertNull(workItem);
+ ksession.fireAllRules();
+ workItem = workItemHandler.getWorkItem();
+ assertNotNull(workItem);
+ ksession.getWorkItemManager().completeWorkItem(workItem.getId(), null);
assertTrue(processInstance.getState() == ProcessInstance.STATE_COMPLETED);
}
-
- public void testIntermediateCatchEventSignal() throws Exception {
+
+ public void testIntermediateCatchEventSignal() throws Exception {
KnowledgeBase kbase = createKnowledgeBase("BPMN2-IntermediateCatchEventSignal.xml");
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.getWorkItemManager().registerWorkItemHandler("Human Task", new DoNothingWorkItemHandler());
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcess.drl 2010-04-05 23:16:16 UTC (rev 32430)
@@ -0,0 +1,9 @@
+package org.drools.bpmn2
+
+import org.drools.runtime.process.ProcessContext
+
+rule "Auto-activate Hello1" ruleflow-group "Hello"
+ when
+ then
+ drools.getContext(ProcessContext.class).getProcessInstance().signalEvent("Hello1", null);
+end
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-AdHocSubProcessAutoComplete.xml 2010-04-05 23:16:16 UTC (rev 32430)
@@ -0,0 +1,27 @@
+<?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="AdHocSubProcess" name="AdHoc SubProcess">
+ <startEvent id="_1" name="StartProcess"/>
+ <sequenceFlow sourceRef="_1" targetRef="_2"/>
+ <adHocSubProcess id="_2" name="Hello" >
+ <userTask id="_2-1" name="Hello1"/>
+ <completionCondition xs:type="tFormalExpression">getActivityInstanceAttribute("numberOfActiveInstances") == 0</completionCondition>
+ </adHocSubProcess>
+ <sequenceFlow sourceRef="_2" targetRef="_3"/>
+ <scriptTask id="_3" name="Goodbye">
+ <script>System.out.println("Goodbye World");</script>
+ </scriptTask>
+ <sequenceFlow sourceRef="_3" targetRef="_4"/>
+ <endEvent id="_4" name="EndProcess">
+ <terminateEventDefinition/>
+ </endEvent>
+ </process>
+</definitions>
Modified: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml 2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-EvaluationProcess2.xml 2010-04-05 23:16:16 UTC (rev 32430)
@@ -67,7 +67,12 @@
<targetRef>_2_PriorityInput</targetRef>
</dataInputAssociation>
<dataInputAssociation>
- <assignment>
+ <assignment>org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
+ if (nameNode != null) {
+ String name = nameNode.getNodeValue();
+ sequenceFlow.setName(name);
+ }
+
<from xs:type="tFormalExpression"></from>
<to xs:type="tFormalExpression">_2_ContentInput</to>
</assignment>
@@ -126,7 +131,12 @@
</assignment>
<sourceRef>_4_TaskName</sourceRef>
<targetRef>_4_TaskNameInput</targetRef>
- </dataInputAssociation>
+ </dataInputAssociation>org.w3c.dom.Node nameNode = xmlNode.getAttributes().getNamedItem("name");
+ if (nameNode != null) {
+ String name = nameNode.getNodeValue();
+ sequenceFlow.setName(name);
+ }
+
<dataInputAssociation>
<assignment>
<from xs:type="tFormalExpression">1</from>
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 2010-04-05 22:37:58 UTC (rev 32429)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMN2-ExclusiveSplit.xml 2010-04-05 23:16:16 UTC (rev 32430)
@@ -86,10 +86,10 @@
<!-- connections -->
<sequenceFlow sourceRef="_1" targetRef="_2" />
- <sequenceFlow sourceRef="_2" targetRef="_3" g:bendpoints="[120,40]" >
+ <sequenceFlow sourceRef="_2" targetRef="_3" name="First" g:bendpoints="[120,40]" >
<conditionExpression>return x == "First";</conditionExpression>
</sequenceFlow>
- <sequenceFlow sourceRef="_2" targetRef="_4" g:bendpoints="[120,120]" >
+ <sequenceFlow sourceRef="_2" targetRef="_4" name="Second" g:bendpoints="[120,120]" >
<conditionExpression>return x == "Second";</conditionExpression>
</sequenceFlow>
<sequenceFlow sourceRef="_3" targetRef="_5" g:bendpoints="[313,40]" />
Added: labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl (rev 0)
+++ labs/jbossrules/trunk/drools-process/drools-bpmn2/src/test/resources/BPMNB2-AdHocRules.drl 2010-04-05 23:16:16 UTC (rev 32430)
@@ -0,0 +1,8 @@
+package org.drools.bpmn2;
+
+rule "Start Hello1" ruleflow-group "Hello"
+ when
+ Person( age > 20 )
+ then
+ ksession.getKnowledgeSession().signalEvent("Hello1", null);
+end
\ No newline at end of file
More information about the jboss-svn-commits
mailing list