[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