[jboss-svn-commits] JBL Code SVN: r23933 - in labs/jbossrules/trunk/drools-compiler/src: main/resources/META-INF and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Nov 18 21:59:51 EST 2008
Author: KrisVerlaenen
Date: 2008-11-18 21:59:50 -0500 (Tue, 18 Nov 2008)
New Revision: 23933
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TriggerHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
Log:
JBRULES-1792: Start node triggers
- fixed XML persistence of triggers
- extended XML persistence test to include more elements
- added onEntry/Exit actions to milestone node in XML
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -1,6 +1,8 @@
package org.drools.xml.processes;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -215,14 +217,19 @@
public void writeTimers(final Map<Timer, DroolsAction> timers, final StringBuffer xmlDump) {
if (timers != null && !timers.isEmpty()) {
xmlDump.append(" <timers>" + EOL);
- for (Map.Entry<Timer, DroolsAction> entry: timers.entrySet()) {
- Timer timer = entry.getKey();
+ List<Timer> timerList = new ArrayList<Timer>(timers.keySet());
+ Collections.sort(timerList, new Comparator<Timer>() {
+ public int compare(Timer o1, Timer o2) {
+ return (int) (o2.getId() - o1.getId());
+ }
+ });
+ for (Timer timer: timerList) {
xmlDump.append(" <timer id=\"" + timer.getId() + "\" delay=\"" + timer.getDelay() + "\" ");
if (timer.getPeriod() > 0) {
xmlDump.append("period=\"" + timer.getPeriod() + "\" ");
}
xmlDump.append(">" + EOL);
- writeAction(entry.getValue(), xmlDump);
+ writeAction(timers.get(timer), xmlDump);
xmlDump.append(" </timer>" + EOL);
}
xmlDump.append(" </timers>" + EOL);
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -2,7 +2,11 @@
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.MilestoneNode;
+import org.drools.workflow.core.node.SubProcessNode;
+import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.XmlDumper;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
public class MilestoneNodeHandler extends AbstractNodeHandler {
@@ -15,7 +19,17 @@
return MilestoneNode.class;
}
- public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ public 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);
+ MilestoneNode milestoneNode = (MilestoneNode) node;
+ for (String eventType: milestoneNode.getActionTypes()) {
+ handleAction(node, element, eventType);
+ }
+ }
+
+ public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
MilestoneNode milestoneNode = (MilestoneNode) node;
writeNode("milestone", milestoneNode, xmlDump, includeMeta);
String constraint = milestoneNode.getConstraint();
@@ -25,6 +39,9 @@
xmlDump.append(" <constraint type=\"rule\" dialect=\"mvel\" >"
+ XmlDumper.replaceIllegalChars(constraint.trim()) + "</constraint>" + EOL);
}
+ for (String eventType: milestoneNode.getActionTypes()) {
+ writeActions(eventType, milestoneNode.getActions(eventType), xmlDump);
+ }
writeTimers(milestoneNode.getTimers(), xmlDump);
endNode("milestone", xmlDump);
} else {
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/RuleSetNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -18,7 +18,9 @@
super.handleNode(node, element, uri, localName, parser);
RuleSetNode ruleSetNode = (RuleSetNode) node;
String ruleFlowGroup = element.getAttribute("ruleFlowGroup");
- ruleSetNode.setRuleFlowGroup(ruleFlowGroup);
+ if (ruleFlowGroup != null && ruleFlowGroup.length() > 0) {
+ ruleSetNode.setRuleFlowGroup(ruleFlowGroup);
+ }
}
@SuppressWarnings("unchecked")
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StartNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -41,8 +41,8 @@
if (inMappings != null && !inMappings.isEmpty()) {
for (Map.Entry<String, String> entry: inMappings.entrySet()) {
xmlDump.append(" <mapping type=\"in\" from=\""
- + XmlDumper.replaceIllegalChars(entry.getKey())
- + "\" to=\"" + entry.getValue() + "\" />" + EOL);
+ + XmlDumper.replaceIllegalChars(entry.getValue())
+ + "\" to=\"" + entry.getKey() + "\" />" + EOL);
}
}
xmlDump.append(" </trigger>" + EOL);
@@ -60,6 +60,14 @@
}
}
xmlDump.append(" </eventFilters>" + EOL);
+ Map<String, String> inMappings = trigger.getInMappings();
+ if (inMappings != null && !inMappings.isEmpty()) {
+ for (Map.Entry<String, String> entry: inMappings.entrySet()) {
+ xmlDump.append(" <mapping type=\"in\" from=\""
+ + XmlDumper.replaceIllegalChars(entry.getValue())
+ + "\" to=\"" + entry.getKey() + "\" />" + EOL);
+ }
+ }
xmlDump.append(" </trigger>" + EOL);
} else {
throw new IllegalArgumentException(
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -20,7 +20,9 @@
super.handleNode(node, element, uri, localName, parser);
SubProcessNode subProcessNode = (SubProcessNode) node;
String processId = element.getAttribute("processId");
- subProcessNode.setProcessId(processId);
+ if (processId != null && processId.length() > 0) {
+ subProcessNode.setProcessId(processId);
+ }
String waitForCompletion = element.getAttribute("waitForCompletion");
subProcessNode.setWaitForCompletion(!"false".equals(waitForCompletion));
String independent = element.getAttribute("independent");
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -20,7 +20,7 @@
TimerNode timerNode = (TimerNode) node;
String delay = element.getAttribute("delay");
String period = element.getAttribute("period");
- if (delay != null || period != null) {
+ if ((delay != null && delay.length() > 0) || (period != null && period.length() > 0)) {
Timer timer = timerNode.getTimer();
if (timer == null) {
timer = new Timer();
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TriggerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TriggerHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TriggerHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -21,6 +21,7 @@
this.validPeers = new HashSet<Class<?>>();
this.validPeers.add( null );
+ this.validPeers.add( Trigger.class );
this.allowNesting = false;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -1,5 +1,9 @@
package org.drools.xml.processes;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
import java.util.Map;
import org.drools.process.core.ParameterDefinition;
@@ -77,7 +81,16 @@
protected void visitWork(Work work, StringBuffer xmlDump, boolean includeMeta) {
if (work != null) {
xmlDump.append(" <work name=\"" + work.getName() + "\" >" + EOL);
- for (ParameterDefinition paramDefinition: work.getParameterDefinitions()) {
+ List<ParameterDefinition> parameterDefinitions =
+ new ArrayList<ParameterDefinition>(work.getParameterDefinitions());
+ Collections.sort(parameterDefinitions, new Comparator<ParameterDefinition>() {
+ public int compare(ParameterDefinition o1,
+ ParameterDefinition o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+
+ });
+ for (ParameterDefinition paramDefinition: parameterDefinitions) {
DataType dataType = paramDefinition.getType();
xmlDump.append(" <parameter name=\"" + paramDefinition.getName() + "\" >" + EOL + " ");
XmlWorkflowProcessDumper.visitDataType(dataType, xmlDump);
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-4.0.xsd 2008-11-19 02:59:50 UTC (rev 23933)
@@ -290,6 +290,8 @@
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element ref="drools:constraint"/>
<xs:element ref="drools:timers"/>
+ <xs:element ref="drools:onEntry"/>
+ <xs:element ref="drools:onExit"/>
</xs:choice>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string"/>
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java 2008-11-19 02:08:53 UTC (rev 23932)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java 2008-11-19 02:59:50 UTC (rev 23933)
@@ -30,14 +30,18 @@
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.workflow.core.Connection;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.impl.ConnectionImpl;
import org.drools.workflow.core.impl.ConstraintImpl;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
import org.drools.workflow.core.node.ActionNode;
import org.drools.workflow.core.node.CompositeContextNode;
+import org.drools.workflow.core.node.ConstraintTrigger;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
+import org.drools.workflow.core.node.EventTrigger;
import org.drools.workflow.core.node.FaultNode;
import org.drools.workflow.core.node.ForEachNode;
import org.drools.workflow.core.node.HumanTaskNode;
@@ -96,8 +100,6 @@
assertEquals(15, process.getNodes().length);
-// System.out.println("************************************");
-
String xml2 = XmlRuleFlowProcessDumper.INSTANCE.dump(process, false);
if (xml2 == null) {
throw new IllegalArgumentException("Failed to persist empty nodes!");
@@ -183,6 +185,22 @@
startNode.setMetaData("y", 2);
startNode.setMetaData("width", 3);
startNode.setMetaData("height", 4);
+ ConstraintTrigger constraintTrigger = new ConstraintTrigger();
+ constraintTrigger.setConstraint("constraint");
+ Map<String, String> inMapping = new HashMap<String, String>();
+ inMapping.put("key", "value");
+ inMapping.put("key2", "value2");
+ constraintTrigger.setInMappings(inMapping);
+ startNode.addTrigger(constraintTrigger);
+ EventTrigger eventTrigger = new EventTrigger();
+ EventTypeFilter eventTypeFilter = new EventTypeFilter();
+ eventTypeFilter.setType("eventType");
+ eventTrigger.addEventFilter(eventTypeFilter);
+ inMapping = new HashMap<String, String>();
+ inMapping.put("key", "value");
+ inMapping.put("key2", "value2");
+ eventTrigger.setInMappings(inMapping);
+ startNode.addTrigger(eventTrigger);
process.addNode(startNode);
ActionNode actionNode = new ActionNode();
@@ -291,6 +309,13 @@
timer.setPeriod(200);
action = new DroolsConsequenceAction("dialect", "consequence");
milestone.addTimer(timer, action);
+ List<DroolsAction> actions = new ArrayList<DroolsAction>();
+ DroolsAction action1 = new DroolsConsequenceAction("java", "System.out.println(\"action1\");");
+ actions.add(action1);
+ DroolsAction action2 = new DroolsConsequenceAction("java", "System.out.println(\"action2\");");
+ actions.add(action2);
+ milestone.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
+ milestone.setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, actions);
process.addNode(milestone);
connection = new ConnectionImpl(join, Node.CONNECTION_DEFAULT_TYPE, milestone, Node.CONNECTION_DEFAULT_TYPE);
connection.setMetaData("bendpoints", "[10,10;20,20]");
@@ -316,6 +341,8 @@
timer.setPeriod(200);
action = new DroolsConsequenceAction("dialect", "consequence");
subProcess.addTimer(timer, action);
+ subProcess.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
+ subProcess.setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, actions);
process.addNode(subProcess);
connection = new ConnectionImpl(milestone, Node.CONNECTION_DEFAULT_TYPE, subProcess, Node.CONNECTION_DEFAULT_TYPE);
connection.setMetaData("bendpoints", "[10,10]");
@@ -346,6 +373,8 @@
timer.setPeriod(200);
action = new DroolsConsequenceAction("dialect", "consequence");
workItemNode.addTimer(timer, action);
+ workItemNode.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
+ workItemNode.setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, actions);
process.addNode(workItemNode);
connection = new ConnectionImpl(subProcess, Node.CONNECTION_DEFAULT_TYPE, workItemNode, Node.CONNECTION_DEFAULT_TYPE);
connection.setMetaData("bendpoints", "[]");
@@ -365,7 +394,9 @@
work.setParameterDefinitions(parameterDefinitions);
work.setParameter("TaskName", "Do something");
work.setParameter("ActorId", "John Doe");
- workItemNode.setWaitForCompletion(false);
+ humanTaskNode.setWaitForCompletion(false);
+ humanTaskNode.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
+ humanTaskNode.setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, actions);
process.addNode(humanTaskNode);
connection = new ConnectionImpl(workItemNode, Node.CONNECTION_DEFAULT_TYPE, humanTaskNode, Node.CONNECTION_DEFAULT_TYPE);
@@ -441,7 +472,7 @@
throw new IllegalArgumentException("Failed to persist full nodes!");
}
-// System.out.println(xml);
+ System.out.println(xml);
XmlProcessReader reader = new XmlProcessReader(
new PackageBuilderConfiguration().getSemanticModules());
@@ -458,7 +489,7 @@
assertEquals(2, process.getSwimlaneContext().getSwimlanes().size());
assertEquals(2, process.getExceptionScope().getExceptionHandlers().size());
-// System.out.println("************************************");
+ System.out.println("************************************");
String xml2 = XmlRuleFlowProcessDumper.INSTANCE.dump(process, true);
if (xml2 == null) {
More information about the jboss-svn-commits
mailing list