[jboss-svn-commits] JBL Code SVN: r26931 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/process/builder and 31 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jun 11 19:48:18 EDT 2009
Author: KrisVerlaenen
Date: 2009-06-11 19:48:18 -0400 (Thu, 11 Jun 2009)
New Revision: 26931
Added:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/DynamicNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessDynamicNodeTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/AbstractProcessInstanceFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/DynamicNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/DynamicNodeInstance.java
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ResourceTypeBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java
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/ConstraintHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessUpgradeTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/timer/Timer.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/RuleFlowProcessInstanceFactory.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Node.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/NodeInstanceContainer.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventBasedNodeInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimerDialog.java
labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
labs/jbossrules/trunk/drools-process/drools-bpel/.classpath
labs/jbossrules/trunk/drools-process/drools-bpel/.project
labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java
labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELWaitInstance.java
labs/jbossrules/trunk/drools-process/drools-jpdl/
labs/jbossrules/trunk/drools-process/drools-jpdl/.classpath
labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/instance/JpdlProcessInstanceFactory.java
labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/xml/StartStateHandler.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/
labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/StepNodeHandler.java
labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/XmlOSWorkflowProcessDumper.java
Log:
JBRULES-2119: Support more user-friendly time format in timers
- timer delay and period now expressed as a String
JBRULES-2107: Support StateNode for Finite State Machines
- state node now extends composite node and can handle rules for state transitions (immediate or delayed)
JBRULES-2120: Dynamic or Ah-Hoc node
- added initial implementation
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -55,6 +55,7 @@
import org.drools.workflow.core.node.StartNode;
import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.core.node.Trigger;
+import org.drools.workflow.core.node.StateNode.ConnectionRef;
import org.drools.xml.XmlProcessReader;
import org.drools.xml.processes.RuleFlowMigrator;
@@ -69,9 +70,6 @@
private PackageBuilder packageBuilder;
private final List<DroolsError> errors = new ArrayList<DroolsError>();
private Map<String, ProcessValidator> processValidators = new HashMap<String, ProcessValidator>();
- private static final String XSL_FROM_4_TO_5 = "/org/drools/xml/processes/RuleFlowFrom4To5.xsl";
- private static final String PROCESS_ELEMENT_WITH_NAMESPACE = "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" + " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
- + " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n";
public ProcessBuilder(PackageBuilder packageBuilder) {
this.packageBuilder = packageBuilder;
@@ -316,7 +314,7 @@
milestone ) );
} else if ( nodes[i] instanceof StateNode ) {
StateNode state = (StateNode) nodes[i];
- builder.append( createAllStateRules(process, state) );
+ builder.append( createStateRules(process, state) );
} else if ( nodes[i] instanceof StartNode ) {
StartNode startNode = (StartNode) nodes[i];
List<Trigger> triggers = startNode.getTriggers();
@@ -337,21 +335,43 @@
private String createSplitRule(Process process,
Connection connection,
String constraint) {
- return "rule \"RuleFlow-Split-" + process.getId() + "-" + connection.getFrom().getId() + "-" + connection.getTo().getId() + "\" \n" + " ruleflow-group \"DROOLS_SYSTEM\" \n" + " when \n" + " " + constraint + "\n" + " then \n"
- + "end \n\n";
+ return
+ "rule \"RuleFlow-Split-" + process.getId() + "-" +
+ ((org.drools.workflow.core.Node) connection.getFrom()).getUniqueId() + "-" +
+ ((org.drools.workflow.core.Node) connection.getTo()).getUniqueId() + "-" +
+ connection.getToType() + "\" \n" +
+ " ruleflow-group \"DROOLS_SYSTEM\" \n" +
+ " when \n" +
+ " " + constraint + "\n" +
+ " then \n" +
+ "end \n\n";
}
private String createMilestoneRule(Process process,
MilestoneNode milestone) {
- return "rule \"RuleFlow-Milestone-" + process.getId() + "-" + milestone.getId() + "\" \n" + " ruleflow-group \"DROOLS_SYSTEM\" \n" + " when \n" + " " + milestone.getConstraint() + "\n" + " then \n" + "end \n\n";
+ return
+ "rule \"RuleFlow-Milestone-" + process.getId() + "-" + milestone.getUniqueId() + "\" \n" +
+ " ruleflow-group \"DROOLS_SYSTEM\" \n" +
+ " when \n" +
+ " " + milestone.getConstraint() + "\n" +
+ " then \n" +
+ "end \n\n";
}
- private String createStateRule(Process process,
- StateNode state, String key) {
- return "rule \"RuleFlowStateNode-" + process.getId() + "-" + state.getId() + "-" + key + "\" \n" + " ruleflow-group \"DROOLS_SYSTEM\" \n" + " when \n" + " " + state.getConstraints().get(key).getConstraint() + "\n" + " then \n" + "end \n\n";
+
+ private String createStateRule(Process process, StateNode state, ConnectionRef key) {
+ return
+ "rule \"RuleFlowStateNode-" + process.getId() + "-" + state.getUniqueId() + "-" +
+ key.getNodeId() + "-" + key.getToType() + "\" \n" +
+ " ruleflow-group \"DROOLS_SYSTEM\" \n" +
+ " when \n" +
+ " " + state.getConstraints().get(key).getConstraint() + "\n" +
+ " then \n" +
+ "end \n\n";
}
- private String createAllStateRules(Process process, StateNode state){
+
+ private String createStateRules(Process process, StateNode state){
String result = "";
- for(String key : state.getConstraints().keySet()){
+ for(ConnectionRef key : state.getConstraints().keySet()){
result += createStateRule(process, state, key);
}
return result;
@@ -360,16 +380,20 @@
private String createStartConstraintRule(Process process,
ConstraintTrigger trigger) {
- String result = "rule \"RuleFlow-Start-" + process.getId() + "\" \n" + " when\n" + " " + trigger.getConstraint() + "\n" + " then\n";
+ String result =
+ "rule \"RuleFlow-Start-" + process.getId() + "\" \n" +
+ " when\n" +
+ " " + trigger.getConstraint() + "\n" +
+ " then\n";
Map<String, String> inMappings = trigger.getInMappings();
if ( inMappings != null && !inMappings.isEmpty() ) {
result += " java.util.Map params = new java.util.HashMap();\n";
for ( Map.Entry<String, String> entry : inMappings.entrySet() ) {
result += " params.put(\"" + entry.getKey() + "\", " + entry.getValue() + ");\n";
}
- result += " drools.getWorkingMemory().startProcess(\"" + process.getId() + "\", params);\n" + "end\n\n";
+ result += " kcontext.getKnowledgeRuntime().startProcess(\"" + process.getId() + "\", params);\n" + "end\n\n";
} else {
- result += " drools.getWorkingMemory().startProcess(\"" + process.getId() + "\");\n" + "end\n\n";
+ result += " kcontext.getKnowledgeRuntime().startProcess(\"" + process.getId() + "\");\n" + "end\n\n";
}
return result;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ResourceTypeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ResourceTypeBuilder.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ResourceTypeBuilder.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -8,6 +8,6 @@
void setPackageBuilder(PackageBuilder packageBuilder);
- void addKnowledgeResource(Resource resource, ResourceType type, ResourceConfiguration configuration);
+ void addKnowledgeResource(Resource resource, ResourceType type, ResourceConfiguration configuration) throws Exception;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -29,8 +29,6 @@
new ExtendedNodeBuilder() );
register( MilestoneNode.class,
new EventBasedNodeBuilder() );
- register( StateNode.class,
- new EventBasedNodeBuilder() );
register( RuleSetNode.class,
new EventBasedNodeBuilder() );
register( SubProcessNode.class,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/ProcessSemanticModule.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -4,6 +4,7 @@
import org.drools.xml.processes.CompositeNodeHandler;
import org.drools.xml.processes.ConnectionHandler;
import org.drools.xml.processes.ConstraintHandler;
+import org.drools.xml.processes.DynamicNodeHandler;
import org.drools.xml.processes.EndNodeHandler;
import org.drools.xml.processes.EventFilterHandler;
import org.drools.xml.processes.EventNodeHandler;
@@ -109,6 +110,8 @@
addHandler( "trigger",
new TriggerHandler() );
addHandler( "state",
- new StateNodeHandler() );
+ new StateNodeHandler() );
+ addHandler( "dynamic",
+ new DynamicNodeHandler() );
}
}
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 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -224,8 +224,11 @@
}
});
for (Timer timer: timerList) {
- xmlDump.append(" <timer id=\"" + timer.getId() + "\" delay=\"" + timer.getDelay() + "\" ");
- if (timer.getPeriod() > 0) {
+ xmlDump.append(" <timer id=\"" + timer.getId() + "\" ");
+ if (timer.getDelay() != null) {
+ xmlDump.append("delay=\"" + timer.getDelay() + "\" ");
+ }
+ if (timer.getPeriod() != null) {
xmlDump.append("period=\"" + timer.getPeriod() + "\" ");
}
xmlDump.append(">" + EOL);
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConstraintHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConstraintHandler.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConstraintHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -6,6 +6,7 @@
import org.drools.workflow.core.impl.ConstraintImpl;
import org.drools.workflow.core.node.Constrainable;
import org.drools.workflow.core.node.Split;
+import org.drools.workflow.core.node.StateNode;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
@@ -20,6 +21,7 @@
if ((this.validParents == null) && (this.validPeers == null)) {
this.validParents = new HashSet<Class<?>>();
this.validParents.add(Split.class);
+ this.validParents.add(StateNode.class);
this.validParents.add(Constrainable.class);
this.validPeers = new HashSet<Class<?>>();
@@ -74,11 +76,38 @@
}
}
constraint.setConstraint(text);
-
splitNode.internalSetConstraint(connectionRef, constraint);
-
-
-
+ } else if (parent instanceof StateNode) {
+ StateNode stateNode = (StateNode) parser.getParent();
+
+ final String toNodeIdString = element.getAttribute("toNodeId");
+ emptyAttributeCheck(localName, "toNodeId", toNodeIdString, parser);
+ int toNodeId = new Integer(toNodeIdString);
+ final String toType = element.getAttribute("toType");
+ emptyAttributeCheck(localName, "toType", toType, parser);
+ StateNode.ConnectionRef connectionRef = new StateNode.ConnectionRef(toNodeId, toType);
+ Constraint constraint = new ConstraintImpl();
+
+ final String name = element.getAttribute("name");
+ constraint.setName(name);
+ final String priority = element.getAttribute("priority");
+ if (priority != null && priority.length() != 0) {
+ constraint.setPriority(new Integer(priority));
+ }
+ final String type = element.getAttribute("type");
+ constraint.setType(type);
+ final String dialect = element.getAttribute("dialect");
+ constraint.setDialect(dialect);
+
+ String text = ((Text)element.getChildNodes().item( 0 )).getWholeText();
+ if (text != null) {
+ text = text.trim();
+ if ("".equals(text)) {
+ text = null;
+ }
+ }
+ constraint.setConstraint(text);
+ stateNode.internalSetConstraint(connectionRef, constraint);
} else if (parent instanceof Constrainable) {
Constrainable constrainable = (Constrainable) parent;
Constraint constraint = new ConstraintImpl();
Added: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/DynamicNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/DynamicNodeHandler.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/DynamicNodeHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -0,0 +1,20 @@
+package org.drools.xml.processes;
+
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.DynamicNode;
+
+public class DynamicNodeHandler extends CompositeNodeHandler {
+
+ protected Node createNode() {
+ return new DynamicNode();
+ }
+
+ public Class<?> generateNodeFor() {
+ return DynamicNode.class;
+ }
+
+ protected String getNodeName() {
+ return "dynamic";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,14 +1,12 @@
package org.drools.xml.processes;
import java.util.Map;
-import java.util.Set;
+
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.node.StateNode;
-import org.drools.xml.ExtensibleXmlParser;
+import org.drools.workflow.core.node.StateNode.ConnectionRef;
import org.drools.xml.XmlDumper;
-import org.w3c.dom.Element;
-import org.xml.sax.SAXException;
public class StateNodeHandler extends AbstractNodeHandler {
@@ -21,37 +19,37 @@
return StateNode.class;
}
- 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);
- StateNode stateNode = (StateNode) node;
- for (String eventType: stateNode.getActionTypes()) {
- handleAction(node, element, eventType);
- }
- }
-
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
StateNode stateNode = (StateNode) node;
writeNode("state", stateNode, xmlDump, includeMeta);
- Map<String,Constraint> constraints = stateNode.getConstraints();
- if (constraints != null || stateNode.getTimers() != null || stateNode.containsActions()) {
- xmlDump.append(">\n");
- Set<String> keys = constraints.keySet();
- for(String key : keys ){
- if (constraints.get(key) != null) {
- xmlDump.append(" <constraint type=\"rule\" dialect=\"mvel\" >"
- + XmlDumper.replaceIllegalChars(constraints.get(key).getConstraint().trim()) + "</constraint>" + EOL);
- }
- }
- for (String eventType: stateNode.getActionTypes()) {
- writeActions(eventType, stateNode.getActions(eventType), xmlDump);
- }
- writeTimers(stateNode.getTimers(), xmlDump);
- endNode("state", xmlDump);
- } else {
- endNode(xmlDump);
+ xmlDump.append(">\n");
+ if (!stateNode.getConstraints().isEmpty()) {
+ xmlDump.append(" <constraints>" + EOL);
+ for (Map.Entry<ConnectionRef, Constraint> entry: stateNode.getConstraints().entrySet()) {
+ ConnectionRef connection = entry.getKey();
+ Constraint constraint = entry.getValue();
+ xmlDump.append(" <constraint "
+ + "toNodeId=\"" + connection.getNodeId() + "\" "
+ + "toType=\"" + connection.getToType() + "\" ");
+ String name = constraint.getName();
+ if (name != null && !"".equals(name)) {
+ xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
+ }
+ int priority = constraint.getPriority();
+ if (priority != 0) {
+ xmlDump.append("priority=\"" + constraint.getPriority() + "\" ");
+ }
+ xmlDump.append("type=\"rule\" dialect=\"mvel\" ");
+ String constraintString = constraint.getConstraint();
+ if (constraintString != null) {
+ xmlDump.append(">" + XmlDumper.replaceIllegalChars(constraintString) + "</constraint>" + EOL);
+ } else {
+ xmlDump.append("/>" + EOL);
+ }
+ }
+ xmlDump.append(" </constraints>" + EOL);
}
+ endNode("state", xmlDump);
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerHandler.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -47,10 +47,10 @@
Timer timer = new Timer();
timer.setId(new Long(id));
if (delay != null && delay.length() != 0 ) {
- timer.setDelay(new Long(delay));
+ timer.setDelay(delay);
}
if (period != null && period.length() != 0 ) {
- timer.setPeriod(new Long(period));
+ timer.setPeriod(period);
}
org.w3c.dom.Node xmlNode = element.getFirstChild();
DroolsAction action = null;
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 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerNodeHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -27,10 +27,10 @@
timerNode.setTimer(timer);
}
if (delay != null && delay.length() != 0 ) {
- timer.setDelay(new Long(delay));
+ timer.setDelay(delay);
}
if (period != null && period.length() != 0 ) {
- timer.setPeriod(new Long(period));
+ timer.setPeriod(period);
}
}
}
@@ -46,7 +46,7 @@
Timer timer = timerNode.getTimer();
if (timer != null) {
xmlDump.append("delay=\"" + timer.getDelay() + "\" ");
- if (timer.getPeriod() > 0) {
+ if (timer.getPeriod() != null) {
xmlDump.append(" period=\"" + timer.getPeriod() + "\" ");
}
}
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-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd 2009-06-11 23:48:18 UTC (rev 26931)
@@ -140,6 +140,8 @@
<xs:element ref="drools:forEach"/>
<xs:element ref="drools:eventNode"/>
<xs:element ref="drools:fault"/>
+ <xs:element ref="drools:state"/>
+ <xs:element ref="drools:dynamic"/>
</xs:choice>
</xs:complexType>
</xs:element>
@@ -513,6 +515,38 @@
<xs:attribute name="faultVariable" type="xs:string"/>
</xs:complexType>
</xs:element>
+ <xs:element name="state">
+ <xs:complexType>
+ <xs:sequence minOccurs="0">
+ <xs:element ref="drools:constraints"/>
+ </xs:sequence>
+ <xs:attribute name="id" type="xs:string" use="required"/>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:attribute name="x" type="xs:string"/>
+ <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">
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="drools:variables"/>
+ <xs:element ref="drools:exceptionHandlers"/>
+ <xs:element ref="drools:nodes"/>
+ <xs:element ref="drools:connections"/>
+ <xs:element ref="drools:in-ports"/>
+ <xs:element ref="drools:out-ports"/>
+ </xs:choice>
+ <xs:attribute name="id" type="xs:string" use="required"/>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:attribute name="x" type="xs:string"/>
+ <xs:attribute name="y" type="xs:string"/>
+ <xs:attribute name="width" type="xs:string"/>
+ <xs:attribute name="height" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
<xs:element name="connections">
<xs:complexType>
<xs:sequence minOccurs="0" maxOccurs="unbounded">
Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessDynamicNodeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessDynamicNodeTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessDynamicNodeTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -0,0 +1,175 @@
+package org.drools.integrationtests;
+
+import java.io.Reader;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.WorkingMemory;
+import org.drools.compiler.DroolsError;
+import org.drools.compiler.PackageBuilder;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.rule.Package;
+import org.drools.runtime.process.WorkItem;
+import org.drools.runtime.process.WorkItemHandler;
+import org.drools.runtime.process.WorkItemManager;
+
+public class ProcessDynamicNodeTest extends TestCase {
+
+ public void testDynamicActions() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"org.drools.dynamic\" package-name=\"org.drools\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <dynamic id=\"2\" name=\"DynamicNode\" >\n" +
+ " <nodes>\n" +
+ " <actionNode id=\"1\" name=\"Action1\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action1\");\n" +
+ "list.add(\"Action1\");</action>\n" +
+ " </actionNode>\n" +
+ " <actionNode id=\"2\" name=\"Action2\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action2\");\n" +
+ "list.add(\"Action2\");</action>\n" +
+ " </actionNode>\n" +
+ " <actionNode id=\"3\" name=\"Action3\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action3\");\n" +
+ "list.add(\"Action3\");</action>\n" +
+ " </actionNode>\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"3\" />\n" +
+ " </connections>\n" +
+ " <in-ports/>\n" +
+ " <out-ports/>\n" +
+ " </dynamic>\n" +
+ " <actionNode id=\"3\" name=\"Action4\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action4\");\n" +
+ "list.add(\"Action4\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " </connections>\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ for (DroolsError error: builder.getErrors().getErrors()) {
+ System.err.println(error);
+ }
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = ( ProcessInstance )
+ workingMemory.startProcess("org.drools.dynamic");
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(4, list.size());
+ }
+
+ public void testDynamicAsyncActions() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"ruleflow\" id=\"org.drools.dynamic\" package-name=\"org.drools\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <dynamic id=\"2\" name=\"DynamicNode\" >\n" +
+ " <nodes>\n" +
+ " <workItem id=\"1\" name=\"Work\" >\n" +
+ " <work name=\"Work\" />\n" +
+ " </workItem>\n" +
+ " <actionNode id=\"2\" name=\"Action2\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action2\");\n" +
+ "list.add(\"Action2\");</action>\n" +
+ " </actionNode>\n" +
+ " <actionNode id=\"3\" name=\"Action3\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action3\");\n" +
+ "list.add(\"Action3\");</action>\n" +
+ " </actionNode>\n" +
+ " </nodes>\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"3\" />\n" +
+ " </connections>\n" +
+ " <in-ports/>\n" +
+ " <out-ports/>\n" +
+ " </dynamic>\n" +
+ " <actionNode id=\"3\" name=\"Action4\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >System.out.println(\"Action4\");\n" +
+ "list.add(\"Action4\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " </connections>\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ for (DroolsError error: builder.getErrors().getErrors()) {
+ System.err.println(error);
+ }
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ TestWorkItemHandler testHandler = new TestWorkItemHandler();
+ workingMemory.getWorkItemManager().registerWorkItemHandler("Work", testHandler);
+ ProcessInstance processInstance = ( ProcessInstance )
+ workingMemory.startProcess("org.drools.dynamic");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ assertEquals(1, list.size());
+ WorkItem workItem = testHandler.getWorkItem();
+ assertNotNull(workItem);
+ workingMemory.getWorkItemManager().completeWorkItem(workItem.getId(), null);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(3, list.size());
+ }
+
+ private static class TestWorkItemHandler implements WorkItemHandler {
+ private WorkItem workItem;
+ public void executeWorkItem(WorkItem workItem, WorkItemManager manager) {
+ this.workItem = workItem;
+ }
+ public void abortWorkItem(WorkItem workItem, WorkItemManager manager) {
+ }
+ public WorkItem getWorkItem() {
+ return workItem;
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -2,23 +2,23 @@
import java.io.Reader;
import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
import junit.framework.TestCase;
+import org.drools.Person;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.WorkingMemory;
-import org.drools.audit.WorkingMemoryConsoleLogger;
import org.drools.compiler.DroolsError;
import org.drools.compiler.PackageBuilder;
-import org.drools.compiler.PackageBuilderErrors;
import org.drools.process.instance.ProcessInstance;
import org.drools.rule.Package;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
public class ProcessStateTest extends TestCase {
- public void testOnEntryExit() {
+ public void testSignalState() {
PackageBuilder builder = new PackageBuilder();
Reader source = new StringReader(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
@@ -55,7 +55,7 @@
}
- public void testNewStateNode() {
+ public void testImmediateStateConstraint1() {
PackageBuilder builder = new PackageBuilder();
Reader source = new StringReader(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
@@ -65,48 +65,435 @@
" type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
"\n" +
" <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
" </header>\n" +
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
" <state id=\"2\" dialect=\"mvel\" >\n" +
- " <constraint name=\"one\" type=\"rule\" >" +
- " eval(true)" +
- " </constraint>"+
- " <constraint name=\"two\" type=\"rule\" >" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " eval(true)" +
+ " </constraint>"+
+ " <constraint toNodeId=\"4\" toType=\"DROOLS_DEFAULT\" name=\"two\" type=\"rule\" dialect=\"mvel\" >\n" +
" eval(false)" +
- " </constraint>"+
+ " </constraint>"+
+ " </constraints>\n" +
" </state>\n" +
- " <end id=\"3\" name=\"End\" />\n" +
- " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
" </nodes>\n" +
"\n" +
" <connections>\n" +
" <connection from=\"1\" to=\"2\" />\n" +
- " <connection from=\"2\" to=\"3\" fromType=\"one\" />\n" +
- " <connection from=\"2\" to=\"4\" fromType=\"two\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
" </connections>\n" +
"\n" +
"</process>");
builder.addRuleFlow(source);
- PackageBuilderErrors errors = builder.getErrors();
-
- for(DroolsError error: errors.getErrors()){
- System.out.println("Error: "+error);
- }
Package pkg = builder.getPackage();
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
WorkingMemory workingMemory = ruleBase.newStatefulSession();
- new WorkingMemoryConsoleLogger(workingMemory);
- ProcessInstance processInstance = ( ProcessInstance )
- workingMemory.startProcess("org.drools.state");
- //If the any constraint evaluates to true you can also signal the state node to continue
- // assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
- // assertEquals(2, ((RuleFlowProcessInstance)processInstance).getNodeInstances().iterator().next().getNodeId());
- // processInstance.signalEvent("signal", null);
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("1", list.get(0));
}
-
+ public void testImmediateStateConstraintPriorities1() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " eval(true)" +
+ " </constraint>"+
+ " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " eval(true)" +
+ " </constraint>"+
+ " </constraints>\n" +
+ " </state>\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("1", list.get(0));
+ }
+
+ public void testImmediateStateConstraintPriorities2() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " eval(true)" +
+ " </constraint>"+
+ " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " eval(true)" +
+ " </constraint>"+
+ " </constraints>\n" +
+ " </state>\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("2", list.get(0));
+ }
+
+ public void testDelayedStateConstraint() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <imports>\n" +
+ " <import name=\"org.drools.Person\" />\n" +
+ " </imports>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( age > 21 )" +
+ " </constraint>"+
+ " <constraint toNodeId=\"4\" toType=\"DROOLS_DEFAULT\" name=\"two\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( age <= 21 )" +
+ " </constraint>"+
+ " </constraints>\n" +
+ " </state>\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ assertTrue(list.isEmpty());
+ Person person = new Person("John Doe", 30);
+ workingMemory.insert(person);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("1", list.get(0));
+ }
+
+ public void testDelayedStateConstraint2() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <imports>\n" +
+ " <import name=\"org.drools.Person\" />\n" +
+ " </imports>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( age > 21 )" +
+ " </constraint>"+
+ " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( age <= 21 )" +
+ " </constraint>"+
+ " </constraints>\n" +
+ " </state>\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ assertTrue(list.isEmpty());
+ Person person = new Person("John Doe", 20);
+ workingMemory.insert(person);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("2", list.get(0));
+ }
+
+ public void FIXMEtestDelayedStateConstraintPriorities1() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <imports>\n" +
+ " <import name=\"org.drools.Person\" />\n" +
+ " </imports>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( )" +
+ " </constraint>"+
+ " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( )" +
+ " </constraint>"+
+ " </constraints>\n" +
+ " </state>\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ assertTrue(list.isEmpty());
+ Person person = new Person("John Doe", 30);
+ workingMemory.insert(person);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("1", list.get(0));
+ }
+
+ public void FIXMEtestDelayedStateConstraintPriorities2() {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.state\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <imports>\n" +
+ " <import name=\"org.drools.Person\" />\n" +
+ " </imports>\n" +
+ " <globals>\n" +
+ " <global identifier=\"list\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( )" +
+ " </constraint>"+
+ " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " Person( )" +
+ " </constraint>"+
+ " </constraints>\n" +
+ " </state>\n" +
+ " <actionNode id=\"3\" name=\"ActionNode1\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"1\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"4\" name=\"End\" />\n" +
+ " <actionNode id=\"5\" name=\"ActionNode2\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"2\");</action>\n" +
+ " </actionNode>\n" +
+ " <end id=\"6\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"4\" />\n" +
+ " <connection from=\"2\" to=\"5\" />\n" +
+ " <connection from=\"5\" to=\"6\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ ProcessInstance processInstance = workingMemory.startProcess("org.drools.state");
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ assertTrue(list.isEmpty());
+ Person person = new Person("John Doe", 30);
+ workingMemory.insert(person);
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(1, list.size());
+ assertEquals("2", list.get(0));
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessTimerTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -42,7 +42,7 @@
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
" <end id=\"2\" name=\"End\" />\n" +
- " <timerNode id=\"3\" name=\"Timer\" delay=\"800\" period=\"200\" />\n" +
+ " <timerNode id=\"3\" name=\"Timer\" delay=\"800ms\" period=\"200ms\" />\n" +
" <actionNode id=\"4\" name=\"Action\" >\n" +
" <action type=\"expression\" dialect=\"java\" >System.out.println(\"Triggered\");\n" +
"myList.add( new Message() );\n" +
@@ -120,6 +120,37 @@
session2.halt();
}
+
+ public void testIncorrectTimerNode() throws Exception {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.timer\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <end id=\"2\" name=\"End\" />\n" +
+ " <timerNode id=\"3\" name=\"Timer\" delay=\"800msdss\" period=\"200mssds\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"3\" />\n" +
+ " <connection from=\"3\" to=\"2\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+ assertEquals(2, builder.getErrors().size());
+ for (DroolsError error: builder.getErrors().getErrors()) {
+ System.err.println(error);
+ }
+ }
@SuppressWarnings("unchecked")
public void testOnEntryTimerExecuted() throws Exception {
@@ -202,6 +233,48 @@
session2.halt();
}
+ public void testIncorrectOnEntryTimer() throws Exception {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader(
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<process xmlns=\"http://drools.org/drools-5.0/process\"\n" +
+ " xmlns:xs=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+ " xs:schemaLocation=\"http://drools.org/drools-5.0/process drools-processes-5.0.xsd\"\n" +
+ " type=\"RuleFlow\" name=\"flow\" id=\"org.drools.timer\" package-name=\"org.drools\" version=\"1\" >\n" +
+ "\n" +
+ " <header>\n" +
+ " <globals>\n" +
+ " <global identifier=\"myList\" type=\"java.util.List\" />\n" +
+ " </globals>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <milestone id=\"2\" name=\"Wait\" >\n" +
+ " <timers>\n" +
+ " <timer id=\"1\" delay=\"300asdf\" period=\"asfd\" >\n" +
+ " <action type=\"expression\" dialect=\"java\" >myList.add(\"Executing timer\");</action>\n" +
+ " </timer>\n" +
+ " </timers>\n" +
+ " <constraint type=\"rule\" dialect=\"mvel\" >eval(false)</constraint>\n" +
+ " </milestone>\n" +
+ " <end id=\"3\" name=\"End\" />\n" +
+ " </nodes>\n" +
+ "\n" +
+ " <connections>\n" +
+ " <connection from=\"1\" to=\"2\" />\n" +
+ " <connection from=\"2\" to=\"3\" />\n" +
+ " </connections>\n" +
+ "\n" +
+ "</process>");
+ builder.addRuleFlow(source);
+
+ assertEquals(2, builder.getErrors().size());
+ for (DroolsError error: builder.getErrors().getErrors()) {
+ System.err.println(error);
+ }
+ }
+
@SuppressWarnings("unchecked")
public void testOnEntryTimerExecutedMultipleTimes() throws Exception {
PackageBuilder builder = new PackageBuilder();
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessUpgradeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessUpgradeTest.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessUpgradeTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -87,7 +87,7 @@
" <ruleSet id=\"2\" name=\"Hello\" ruleFlowGroup=\"hello\" />\n" +
" <actionNode id=\"4\" name=\"Action\" >" +
" <action type=\"expression\" dialect=\"java\">System.out.println();\n" +
- "list.add(\"Executed\");</action>/n" +
+ "list.add(\"Executed\");</action>\n" +
" </actionNode>\n" +
" <end id=\"3\" name=\"End\" />\n" +
" </nodes>\n" +
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 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -41,6 +41,7 @@
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.DynamicNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.EventTrigger;
@@ -52,6 +53,7 @@
import org.drools.workflow.core.node.RuleSetNode;
import org.drools.workflow.core.node.Split;
import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.core.node.SubProcessNode;
import org.drools.workflow.core.node.TimerNode;
import org.drools.workflow.core.node.WorkItemNode;
@@ -84,6 +86,8 @@
process.addNode(new CompositeContextNode());
process.addNode(new EventNode());
process.addNode(new FaultNode());
+ process.addNode(new StateNode());
+ process.addNode(new DynamicNode());
String xml = XmlRuleFlowProcessDumper.INSTANCE.dump(process, false);
if (xml == null) {
@@ -100,7 +104,7 @@
throw new IllegalArgumentException("Failed to reload process!");
}
- assertEquals(15, process.getNodes().length);
+ assertEquals(17, process.getNodes().length);
String xml2 = XmlRuleFlowProcessDumper.INSTANCE.dump(process, false);
if (xml2 == null) {
@@ -223,13 +227,13 @@
ruleSetNode.setMetaData("height", 4);
ruleSetNode.setRuleFlowGroup("ruleFlowGroup");
Timer timer = new Timer();
- timer.setDelay(100);
- timer.setPeriod(100);
+ timer.setDelay("100");
+ timer.setPeriod("100");
action = new DroolsConsequenceAction("dialect", "consequence");
ruleSetNode.addTimer(timer, action);
timer = new Timer();
- timer.setDelay(200);
- timer.setPeriod(200);
+ timer.setDelay("200");
+ timer.setPeriod("200");
action = new DroolsConsequenceAction("dialect", "consequence");
ruleSetNode.addTimer(timer, action);
process.addNode(ruleSetNode);
@@ -303,13 +307,13 @@
milestone.setMetaData("height", 4);
milestone.setConstraint("constraint");
timer = new Timer();
- timer.setDelay(100);
- timer.setPeriod(100);
+ timer.setDelay("100");
+ timer.setPeriod("100");
action = new DroolsConsequenceAction("dialect", "consequence");
milestone.addTimer(timer, action);
timer = new Timer();
- timer.setDelay(200);
- timer.setPeriod(200);
+ timer.setDelay("200");
+ timer.setPeriod("200");
action = new DroolsConsequenceAction("dialect", "consequence");
milestone.addTimer(timer, action);
List<DroolsAction> actions = new ArrayList<DroolsAction>();
@@ -335,13 +339,13 @@
subProcess.addInMapping("subvar1", "var1");
subProcess.addOutMapping("subvar2", "var2");
timer = new Timer();
- timer.setDelay(100);
- timer.setPeriod(100);
+ timer.setDelay("100");
+ timer.setPeriod("100");
action = new DroolsConsequenceAction("dialect", "consequence");
subProcess.addTimer(timer, action);
timer = new Timer();
- timer.setDelay(200);
- timer.setPeriod(200);
+ timer.setDelay("200");
+ timer.setPeriod("200");
action = new DroolsConsequenceAction("dialect", "consequence");
subProcess.addTimer(timer, action);
subProcess.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
@@ -367,13 +371,13 @@
workItemNode.addInMapping("param1", "var1");
workItemNode.addOutMapping("param2", "var2");
timer = new Timer();
- timer.setDelay(100);
- timer.setPeriod(100);
+ timer.setDelay("100");
+ timer.setPeriod("100");
action = new DroolsConsequenceAction("dialect", "consequence");
workItemNode.addTimer(timer, action);
timer = new Timer();
- timer.setDelay(200);
- timer.setPeriod(200);
+ timer.setDelay("200");
+ timer.setPeriod("200");
action = new DroolsConsequenceAction("dialect", "consequence");
workItemNode.addTimer(timer, action);
workItemNode.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
@@ -410,8 +414,8 @@
timerNode.setMetaData("width", 3);
timerNode.setMetaData("height", 4);
timer = new Timer();
- timer.setDelay(1000);
- timer.setPeriod(1000);
+ timer.setDelay("1000");
+ timer.setPeriod("1000");
timerNode.setTimer(timer);
process.addNode(timerNode);
new ConnectionImpl(humanTaskNode, Node.CONNECTION_DEFAULT_TYPE, timerNode, Node.CONNECTION_DEFAULT_TYPE);
@@ -468,8 +472,32 @@
endNode.setMetaData("width", 3);
endNode.setMetaData("height", 4);
process.addNode(endNode);
- new ConnectionImpl(compositeNode, Node.CONNECTION_DEFAULT_TYPE, endNode, Node.CONNECTION_DEFAULT_TYPE);
+ StateNode stateNode = new StateNode();
+ stateNode.setName("state");
+ stateNode.setMetaData("x", 1);
+ stateNode.setMetaData("y", 2);
+ stateNode.setMetaData("width", 3);
+ stateNode.setMetaData("height", 4);
+ new ConnectionImpl(compositeNode, Node.CONNECTION_DEFAULT_TYPE, stateNode, Node.CONNECTION_DEFAULT_TYPE);
+ connection = new ConnectionImpl(stateNode, Node.CONNECTION_DEFAULT_TYPE, join, Node.CONNECTION_DEFAULT_TYPE);
+ constraint = new ConstraintImpl();
+ constraint.setName("constraint1 ><&&");
+ constraint.setPriority(1);
+ constraint.setDialect("dialect1");
+ constraint.setType("type1");
+ constraint.setConstraint("constraint-text1 %&<>");
+ stateNode.setConstraint(connection, constraint);
+ connection = new ConnectionImpl(stateNode, Node.CONNECTION_DEFAULT_TYPE, endNode, Node.CONNECTION_DEFAULT_TYPE);
+ constraint = new ConstraintImpl();
+ constraint.setName("constraint2");
+ constraint.setPriority(2);
+ constraint.setDialect("dialect2");
+ constraint.setType("type2");
+ constraint.setConstraint("constraint-text2");
+ stateNode.setConstraint(connection, constraint);
+ process.addNode(stateNode);
+
String xml = XmlRuleFlowProcessDumper.INSTANCE.dump(process, true);
if (xml == null) {
throw new IllegalArgumentException("Failed to persist full nodes!");
@@ -484,7 +512,7 @@
throw new IllegalArgumentException("Failed to reload process!");
}
- assertEquals(15, process.getNodes().length);
+ assertEquals(16, process.getNodes().length);
assertEquals(2, process.getImports().size());
assertEquals(2, process.getGlobals().size());
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/AbstractWorkingMemory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -60,8 +60,6 @@
import org.drools.event.RuleFlowEventSupport;
import org.drools.event.WorkingMemoryEventListener;
import org.drools.event.WorkingMemoryEventSupport;
-import org.drools.process.core.ContextContainer;
-import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.core.event.EventFilter;
import org.drools.process.core.event.EventTypeFilter;
import org.drools.process.instance.ProcessInstance;
@@ -69,7 +67,6 @@
import org.drools.process.instance.ProcessInstanceFactoryRegistry;
import org.drools.process.instance.ProcessInstanceManager;
import org.drools.process.instance.WorkItemManager;
-import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.process.instance.event.SignalManager;
import org.drools.process.instance.timer.TimerManager;
import org.drools.reteoo.EntryPointNode;
@@ -1625,46 +1622,24 @@
if ( process == null ) {
throw new IllegalArgumentException( "Unknown process ID: " + processId );
}
- ProcessInstance processInstance = (ProcessInstance) getProcessInstance( process );
- processInstance.setWorkingMemory( this );
- processInstance.setProcess( process );
- processInstanceManager.addProcessInstance( processInstance );
- // set variable default values
- // TODO: should be part of processInstanceImpl?
- VariableScope variableScope = (VariableScope) ((ContextContainer) process).getDefaultContext( VariableScope.VARIABLE_SCOPE );
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
- // set input parameters
- if ( parameters != null ) {
- if ( variableScope != null ) {
- for ( Map.Entry<String, Object> entry : parameters.entrySet() ) {
- variableScopeInstance.setVariable( entry.getKey(),
- entry.getValue() );
- }
- } else {
- throw new IllegalArgumentException( "This process does not support parameters!" );
- }
+ ProcessInstance processInstance = startProcess( process, parameters );
+
+ if (processInstance != null) {
+ // start process instance
+ getRuleFlowEventSupport().fireBeforeRuleFlowProcessStarted( processInstance, this );
+ processInstance.start();
+ getRuleFlowEventSupport().fireAfterRuleFlowProcessStarted( processInstance, this );
}
- // start
- getRuleFlowEventSupport().fireBeforeRuleFlowProcessStarted( processInstance,
- this );
- processInstance.start();
- getRuleFlowEventSupport().fireAfterRuleFlowProcessStarted( processInstance,
- this );
-
return processInstance;
}
- public ProcessInstance getProcessInstance(final Process process) {
+ private ProcessInstance startProcess(final Process process, Map<String, Object> parameters) {
ProcessInstanceFactoryRegistry processRegistry = ((InternalRuleBase) getRuleBase()).getConfiguration().getProcessInstanceFactoryRegistry();
ProcessInstanceFactory conf = processRegistry.getProcessInstanceFactory( process );
if ( conf == null ) {
throw new IllegalArgumentException( "Illegal process type: " + process.getClass() );
}
- ProcessInstance processInstance = conf.createProcessInstance();
- if ( processInstance == null ) {
- throw new IllegalArgumentException( "Illegal process type: " + process.getClass() );
- }
- return processInstance;
+ return conf.createProcessInstance(process, this, parameters);
}
public ProcessInstanceManager getProcessInstanceManager() {
@@ -1784,6 +1759,27 @@
}
return result;
}
+
+ public List iterateNonDefaultEntryPointObjectsToList() {
+ List result = new ArrayList();
+ for (Map.Entry<String, WorkingMemoryEntryPoint> entry: getEntryPoints().entrySet()) {
+ WorkingMemoryEntryPoint entryPoint = entry.getValue();
+ if (entryPoint instanceof NamedEntryPoint) {
+ result.add(new EntryPointObjects(
+ entry.getKey(), new ArrayList(entry.getValue().getObjects())));
+ }
+ }
+ return result;
+ }
+
+ private class EntryPointObjects {
+ private String name;
+ private List objects;
+ public EntryPointObjects(String name, List objects) {
+ this.name = name;
+ this.objects = objects;
+ }
+ }
public Entry[] getActivationParameters(long activationId) {
Activation[] activations = getAgenda().getActivations();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/timer/Timer.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/timer/Timer.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/core/timer/Timer.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -9,8 +9,8 @@
public class Timer implements Serializable {
private long id;
- private long delay;
- private long period;
+ private String delay;
+ private String period;
public long getId() {
return id;
@@ -20,33 +20,33 @@
this.id = id;
}
- public long getDelay() {
+ public String getDelay() {
return delay;
}
- public void setDelay(long delay) {
+ public void setDelay(String delay) {
this.delay = delay;
}
- public long getPeriod() {
+ public String getPeriod() {
return period;
}
- public void setPeriod(long period) {
+ public void setPeriod(String period) {
this.period = period;
}
public String toString() {
String result = "Timer";
- if (delay != 0 || period != 0) {
+ if (delay != null || period != null) {
result += "[";
- if (delay != 0) {
+ if (delay != null) {
result += "delay=" + delay;
- if (period != 0) {
+ if (period != null) {
result += ", ";
}
}
- if (period != 0) {
+ if (period != null) {
result += "period=" + period;
}
result += "]";
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/AbstractProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/AbstractProcessInstanceFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/AbstractProcessInstanceFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -0,0 +1,44 @@
+package org.drools.process.instance;
+
+import java.util.Map;
+
+import org.drools.WorkingMemory;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.process.Process;
+import org.drools.process.core.ContextContainer;
+import org.drools.process.core.context.variable.VariableScope;
+import org.drools.process.instance.context.variable.VariableScopeInstance;
+
+public abstract class AbstractProcessInstanceFactory implements ProcessInstanceFactory {
+
+ public ProcessInstance createProcessInstance(Process process,
+ WorkingMemory workingMemory,
+ Map<String, Object> parameters) {
+ ProcessInstance processInstance = (ProcessInstance) createProcessInstance();
+ processInstance.setWorkingMemory( (InternalWorkingMemory) workingMemory );
+ processInstance.setProcess( process );
+
+ // set variable default values
+ // TODO: should be part of processInstanceImpl?
+ VariableScope variableScope = (VariableScope) ((ContextContainer) process).getDefaultContext( VariableScope.VARIABLE_SCOPE );
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ // set input parameters
+ if ( parameters != null ) {
+ if ( variableScope != null ) {
+ for ( Map.Entry<String, Object> entry : parameters.entrySet() ) {
+ variableScopeInstance.setVariable( entry.getKey(),
+ entry.getValue() );
+ }
+ } else {
+ throw new IllegalArgumentException( "This process does not support parameters!" );
+ }
+ }
+
+ ((InternalWorkingMemory) workingMemory).getProcessInstanceManager()
+ .addProcessInstance( processInstance );
+ return processInstance;
+ }
+
+ public abstract ProcessInstance createProcessInstance();
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/process/instance/ProcessInstanceFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,11 +1,16 @@
package org.drools.process.instance;
+import java.util.Map;
+
+import org.drools.WorkingMemory;
+import org.drools.definition.process.Process;
+
/**
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
public interface ProcessInstanceFactory {
- ProcessInstance createProcessInstance();
+ ProcessInstance createProcessInstance(Process process, WorkingMemory workingMemory, Map<String, Object> parameters);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/HumanTaskNodeFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -154,7 +154,7 @@
return this;
}
- public HumanTaskNodeFactory timer(long delay, long period, String dialect, String action) {
+ public HumanTaskNodeFactory timer(String delay, String period, String dialect, String action) {
Timer timer = new Timer();
timer.setDelay(delay);
timer.setPeriod(period);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/MilestoneNodeFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -76,7 +76,7 @@
return this;
}
- public MilestoneNodeFactory timer(long delay, long period, String dialect, String action) {
+ public MilestoneNodeFactory timer(String delay, String period, String dialect, String action) {
Timer timer = new Timer();
timer.setDelay(delay);
timer.setPeriod(period);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/RuleSetNodeFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -50,7 +50,7 @@
return this;
}
- public RuleSetNodeFactory timer(long delay, long period, String dialect, String action) {
+ public RuleSetNodeFactory timer(String delay, String period, String dialect, String action) {
Timer timer = new Timer();
timer.setDelay(delay);
timer.setPeriod(period);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SubProcessNodeFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -97,7 +97,7 @@
return this;
}
- public SubProcessNodeFactory timer(long delay, long period, String dialect, String action) {
+ public SubProcessNodeFactory timer(String delay, String period, String dialect, String action) {
Timer timer = new Timer();
timer.setDelay(delay);
timer.setPeriod(period);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/TimerNodeFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -44,7 +44,7 @@
return this;
}
- public TimerNodeFactory delay(long delay) {
+ public TimerNodeFactory delay(String delay) {
Timer timer = getTimerNode().getTimer();
if (timer == null) {
timer = new Timer();
@@ -54,7 +54,7 @@
return this;
}
- public TimerNodeFactory period(long period) {
+ public TimerNodeFactory period(String period) {
Timer timer = getTimerNode().getTimer();
if (timer == null) {
timer = new Timer();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/WorkItemNodeFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -126,7 +126,7 @@
return this;
}
- public WorkItemNodeFactory timer(long delay, long period, String dialect, String action) {
+ public WorkItemNodeFactory timer(String delay, String period, String dialect, String action) {
Timer timer = new Timer();
timer.setDelay(delay);
timer.setPeriod(period);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -22,18 +22,22 @@
import java.util.List;
import java.util.Map;
+import org.drools.RuntimeDroolsException;
import org.drools.definition.process.Connection;
import org.drools.definition.process.Node;
import org.drools.definition.process.Process;
import org.drools.process.core.Work;
import org.drools.process.core.context.variable.Variable;
+import org.drools.process.core.timer.Timer;
import org.drools.process.core.validation.ProcessValidationError;
import org.drools.process.core.validation.ProcessValidator;
import org.drools.process.core.validation.impl.ProcessValidationErrorImpl;
import org.drools.ruleflow.core.RuleFlowProcess;
+import org.drools.time.TimeUtils;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.node.ActionNode;
import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.DynamicNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.FaultNode;
@@ -43,10 +47,11 @@
import org.drools.workflow.core.node.RuleSetNode;
import org.drools.workflow.core.node.Split;
import org.drools.workflow.core.node.StartNode;
+import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.core.node.SubProcessNode;
+import org.drools.workflow.core.node.TimerNode;
import org.drools.workflow.core.node.WorkItemNode;
import org.drools.workflow.core.node.CompositeNode.NodeAndType;
-import org.drools.workflow.core.node.StateNode;
import org.mvel2.ErrorDetail;
import org.mvel2.ParserContext;
import org.mvel2.compiler.ExpressionCompiler;
@@ -144,11 +149,11 @@
}
} else if (node instanceof RuleSetNode) {
final RuleSetNode ruleSetNode = (RuleSetNode) node;
- if (ruleSetNode.getFrom() == null) {
+ if (ruleSetNode.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"RuleSet node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
- if (ruleSetNode.getTo() == null) {
+ if (ruleSetNode.getTo() == null && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"RuleSet node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
}
@@ -157,13 +162,18 @@
errors.add( new ProcessValidationErrorImpl(process,
"RuleSet node '" + node.getName() + "' [" + node.getId() + "] has no ruleflow-group."));
}
+ if (ruleSetNode.getTimers() != null) {
+ for (Timer timer: ruleSetNode.getTimers().keySet()) {
+ validateTimer(timer, node, process, errors);
+ }
+ }
} else if (node instanceof Split) {
final Split split = (Split) node;
if (split.getType() == Split.TYPE_UNDEFINED) {
errors.add(new ProcessValidationErrorImpl(process,
"Split node '" + node.getName() + "' [" + node.getId() + "] has no type."));
}
- if (split.getFrom() == null) {
+ if (split.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Split node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
@@ -180,7 +190,7 @@
}
}
}
- } else if ( node instanceof Join ) {
+ } else if (node instanceof Join) {
final Join join = (Join) node;
if (join.getType() == Join.TYPE_UNDEFINED) {
errors.add(new ProcessValidationErrorImpl(process,
@@ -190,7 +200,7 @@
errors.add(new ProcessValidationErrorImpl(process,
"Join node '" + node.getName() + "' [" + node.getId() + "] does not have more than one incoming connection: " + join.getIncomingConnections().size() + "."));
}
- if (join.getTo() == null) {
+ if (join.getTo() == null && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Join node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
}
@@ -207,12 +217,12 @@
}
} else if (node instanceof MilestoneNode) {
final MilestoneNode milestone = (MilestoneNode) node;
- if (milestone.getFrom() == null) {
+ if (milestone.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Milestone node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
- if (milestone.getTo() == null) {
+ if (milestone.getTo() == null && !acceptsNoOutgoingConnections(node)) {
errors.add( new ProcessValidationErrorImpl(process,
"Milestone node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
}
@@ -220,23 +230,25 @@
errors.add( new ProcessValidationErrorImpl(process,
"Milestone node '" + node.getName() + "' [" + node.getId() + "] has no constraint."));
}
- }else if (node instanceof StateNode) {
+ if (milestone.getTimers() != null) {
+ for (Timer timer: milestone.getTimers().keySet()) {
+ validateTimer(timer, node, process, errors);
+ }
+ }
+ } else if (node instanceof StateNode) {
final StateNode stateNode = (StateNode) node;
- if (stateNode.getFrom() == null) {
+ if (stateNode.getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0 && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
- "State node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
+ "State node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection"));
}
-
-
-
}
else if (node instanceof SubProcessNode) {
final SubProcessNode subProcess = (SubProcessNode) node;
- if (subProcess.getFrom() == null) {
+ if (subProcess.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"SubProcess node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
- if (subProcess.getTo() == null) {
+ if (subProcess.getTo() == null && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"SubProcess node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
}
@@ -244,13 +256,18 @@
errors.add(new ProcessValidationErrorImpl(process,
"SubProcess node '" + node.getName() + "' [" + node.getId() + "] has no process id."));
}
+ if (subProcess.getTimers() != null) {
+ for (Timer timer: subProcess.getTimers().keySet()) {
+ validateTimer(timer, node, process, errors);
+ }
+ }
} else if (node instanceof ActionNode) {
final ActionNode actionNode = (ActionNode) node;
- if (actionNode.getFrom() == null) {
+ if (actionNode.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Action node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
- if (actionNode.getTo() == null) {
+ if (actionNode.getTo() == null && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Action node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
}
@@ -288,11 +305,11 @@
}
} else if (node instanceof WorkItemNode) {
final WorkItemNode workItemNode = (WorkItemNode) node;
- if (workItemNode.getFrom() == null) {
+ if (workItemNode.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"WorkItem node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
- if (workItemNode.getTo() == null) {
+ if (workItemNode.getTo() == null && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"WorkItem node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
}
@@ -306,6 +323,11 @@
"WorkItem node '" + node.getName() + "' [" + node.getId() + "] has no work name."));
}
}
+ if (workItemNode.getTimers() != null) {
+ for (Timer timer: workItemNode.getTimers().keySet()) {
+ validateTimer(timer, node, process, errors);
+ }
+ }
} else if (node instanceof ForEachNode) {
final ForEachNode forEachNode = (ForEachNode) node;
String variableName = forEachNode.getVariableName();
@@ -318,11 +340,11 @@
errors.add(new ProcessValidationErrorImpl(process,
"ForEach node '" + node.getName() + "' [" + node.getId() + "] has no collection expression"));
}
- if (forEachNode.getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0) {
+ if (forEachNode.getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0 && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"ForEach node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection"));
}
- if (forEachNode.getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0) {
+ if (forEachNode.getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0 && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"ForEach node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection"));
}
@@ -335,14 +357,25 @@
"ForEach node '" + node.getName() + "' [" + node.getId() + "] has no linked end node"));
}
validateNodes(forEachNode.getNodes(), errors, process);
+ } else if (node instanceof DynamicNode) {
+ final DynamicNode dynamicNode = (DynamicNode) node;
+ if (dynamicNode.getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Dynamic node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection"));
+ }
+ if (dynamicNode.getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Dynamic node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection"));
+ }
+ validateNodes(dynamicNode.getNodes(), errors, process);
} else if (node instanceof CompositeNode) {
final CompositeNode compositeNode = (CompositeNode) node;
for (Map.Entry<String, NodeAndType> inType: compositeNode.getLinkedIncomingNodes().entrySet()) {
- if (compositeNode.getIncomingConnections(inType.getKey()).size() == 0) {
+ if (compositeNode.getIncomingConnections(inType.getKey()).size() == 0 && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Composite node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection for type " + inType.getKey()));
}
- if (inType.getValue().getNode() == null) {
+ if (inType.getValue().getNode() == null && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Composite node '" + node.getName() + "' [" + node.getId() + "] has invalid linked incoming node for type " + inType.getKey()));
}
@@ -371,7 +404,7 @@
} else if (node instanceof FaultNode) {
endNodeFound = true;
final FaultNode faultNode = (FaultNode) node;
- if (faultNode.getFrom() == null) {
+ if (faultNode.getFrom() == null && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"Fault node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
}
@@ -379,7 +412,26 @@
errors.add(new ProcessValidationErrorImpl(process,
"Fault node '" + node.getName() + "' [" + node.getId() + "] has no fault name."));
}
- }
+ } else if (node instanceof TimerNode) {
+ TimerNode timerNode = (TimerNode) node;
+ if (timerNode.getFrom() == null && !acceptsNoIncomingConnections(node)) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Timer node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection."));
+ }
+ if (timerNode.getTo() == null && !acceptsNoOutgoingConnections(node)) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Timer node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection."));
+ }
+ if (timerNode.getTimer() == null) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Timer node '" + node.getName() + "' [" + node.getId() + "] has no timer specified."));
+ } else {
+ validateTimer(timerNode.getTimer(), node, process, errors);
+ }
+ } else {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Unknown node type '" + node.getClass().getName() + "'"));
+ }
}
}
@@ -426,7 +478,38 @@
}
}
}
+
+ private boolean acceptsNoIncomingConnections(Node node) {
+ return node.getNodeContainer() instanceof DynamicNode;
+ }
+ private boolean acceptsNoOutgoingConnections(Node node) {
+ return node.getNodeContainer() instanceof DynamicNode;
+ }
+
+ private void validateTimer(final Timer timer, final Node node,
+ final RuleFlowProcess process, final List<ProcessValidationError> errors) {
+ if (timer.getDelay() == null) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Node '" + node.getName() + "' [" + node.getId() + "] has timer with no delay specified."));
+ } else {
+ try {
+ TimeUtils.parseTimeString(timer.getDelay());
+ } catch (RuntimeDroolsException e) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Could not parse delay '" + timer.getDelay() + "' of node '" + node.getName() + "': " + e.getMessage()));
+ }
+ }
+ if (timer.getPeriod() != null) {
+ try {
+ TimeUtils.parseTimeString(timer.getPeriod());
+ } catch (RuntimeDroolsException e) {
+ errors.add(new ProcessValidationErrorImpl(process,
+ "Could not parse period '" + timer.getPeriod() + "' of node '" + node.getName() + "': " + e.getMessage()));
+ }
+ }
+ }
+
public ProcessValidationError[] validateProcess(Process process) {
if (!(process instanceof RuleFlowProcess)) {
throw new IllegalArgumentException(
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/RuleFlowProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/RuleFlowProcessInstanceFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/RuleFlowProcessInstanceFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -5,10 +5,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.drools.process.instance.AbstractProcessInstanceFactory;
import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.ProcessInstanceFactory;
-public class RuleFlowProcessInstanceFactory implements ProcessInstanceFactory, Externalizable {
+public class RuleFlowProcessInstanceFactory extends AbstractProcessInstanceFactory implements Externalizable {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Node.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Node.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/Node.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -44,6 +44,8 @@
* @param name the name of the node
*/
void setName(String name);
+
+ String getUniqueId();
void addIncomingConnection(String type, Connection connection);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -28,6 +28,7 @@
import org.drools.process.core.Context;
import org.drools.process.core.ContextResolver;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.node.CompositeNode;
/**
* Default implementation of a node.
@@ -58,6 +59,17 @@
public long getId() {
return this.id;
}
+
+ public String getUniqueId() {
+ String result = id + "";
+ NodeContainer nodeContainer = getNodeContainer();
+ while (nodeContainer instanceof CompositeNode) {
+ CompositeNode composite = (CompositeNode) nodeContainer;
+ result = composite.getId() + ":" + result;
+ nodeContainer = composite.getNodeContainer();
+ }
+ return result;
+ }
public void setId(final long id) {
this.id = id;
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/DynamicNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/DynamicNode.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/DynamicNode.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -0,0 +1,17 @@
+package org.drools.workflow.core.node;
+
+public class DynamicNode extends CompositeContextNode {
+
+ private static final long serialVersionUID = 400L;
+
+ private String ruleFlowGroup;
+
+ public String getRuleFlowGroup() {
+ return ruleFlowGroup;
+ }
+
+ public void setRuleFlowGroup(String ruleFlowGroup) {
+ this.ruleFlowGroup = ruleFlowGroup;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,36 +1,87 @@
package org.drools.workflow.core.node;
+import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.drools.definition.process.Connection;
import org.drools.workflow.core.Constraint;
-import org.drools.workflow.core.Node;
-public class StateNode extends EventBasedNode implements Constrainable{
+public class StateNode extends CompositeContextNode {
- private static final long serialVersionUID = 1L;
- private Map<String,Constraint> constraints = new HashMap<String,Constraint>();
-
+ private static final long serialVersionUID = 4L;
+
+ private Map<ConnectionRef, Constraint> constraints = new HashMap<ConnectionRef, Constraint>();
+ // TODO timers, on-entry / on-exit actions ?
- public void setConstraints(Map<String, Constraint> constraints) {
+ public void setConstraints(Map<ConnectionRef, Constraint> constraints) {
this.constraints = constraints;
}
- public void addConstraint(String name, Constraint constraint) {
- this.constraints.put(name, constraint);
+ public void setConstraint(final Connection connection,
+ final Constraint constraint) {
+ if (connection == null) {
+ throw new IllegalArgumentException("connection is null");
+ }
+ if (getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE) != null
+ && !getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).contains(connection)) {
+ throw new IllegalArgumentException("connection is unknown:" + connection);
+ }
+ internalSetConstraint(
+ new ConnectionRef(connection.getTo().getId(), connection.getToType()), constraint);
+ }
+
+ public void internalSetConstraint(ConnectionRef connectionRef, Constraint constraint) {
+ constraints.put(connectionRef, constraint);
}
+
public Constraint getConstraint(String name){
-
- return this.constraints.get(name);
+ return constraints.get(name);
}
- public Map<String,Constraint> getConstraints(){
- return this.constraints;
+
+ public Map<ConnectionRef, Constraint> getConstraints(){
+ return constraints;
}
- public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ public Constraint getConstraint(final Connection connection) {
+ if (connection == null) {
+ throw new IllegalArgumentException("connection is null");
+ }
+ ConnectionRef ref = new ConnectionRef(connection.getTo().getId(), connection.getToType());
+ return this.constraints.get(ref);
+ }
+ public static class ConnectionRef implements Serializable {
+
+ private static final long serialVersionUID = 4L;
+
+ private String toType;
+ private long nodeId;
+
+ public ConnectionRef(long nodeId, String toType) {
+ this.nodeId = nodeId;
+ this.toType = toType;
+ }
+
+ public String getToType() {
+ return toType;
+ }
+
+ public long getNodeId() {
+ return nodeId;
+ }
+
+ public boolean equals(Object o) {
+ if (o instanceof ConnectionRef) {
+ ConnectionRef c = (ConnectionRef) o;
+ return toType.equals(c.toType) && nodeId == c.nodeId;
+ }
+ return false;
+ }
+
+ public int hashCode() {
+ return 7*toType.hashCode() + (int) nodeId;
+ }
}
-
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/NodeInstanceContainer.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/NodeInstanceContainer.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/NodeInstanceContainer.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -22,5 +22,7 @@
void removeNodeInstance(NodeInstance nodeInstance);
NodeContainer getNodeContainer();
+
+ void nodeInstanceCompleted(NodeInstance nodeInstance, String outType);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceFactoryRegistry.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -7,6 +7,7 @@
import org.drools.workflow.core.node.ActionNode;
import org.drools.workflow.core.node.CompositeContextNode;
import org.drools.workflow.core.node.CompositeNode;
+import org.drools.workflow.core.node.DynamicNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.EventNode;
import org.drools.workflow.core.node.FaultNode;
@@ -26,6 +27,7 @@
import org.drools.workflow.instance.node.ActionNodeInstance;
import org.drools.workflow.instance.node.CompositeContextNodeInstance;
import org.drools.workflow.instance.node.CompositeNodeInstance;
+import org.drools.workflow.instance.node.DynamicNodeInstance;
import org.drools.workflow.instance.node.EndNodeInstance;
import org.drools.workflow.instance.node.EventNodeInstance;
import org.drools.workflow.instance.node.FaultNodeInstance;
@@ -84,6 +86,8 @@
new CreateNewNodeFactory( EventNodeInstance.class ) );
register( StateNode.class,
new CreateNewNodeFactory( StateNodeInstance.class ) );
+ register( DynamicNode.class,
+ new CreateNewNodeFactory( DynamicNodeInstance.class ) );
}
public void register(Class< ? extends Node> cls,
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/NodeInstanceImpl.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -17,6 +17,7 @@
*/
import java.io.Serializable;
+import java.util.List;
import org.drools.WorkingMemory;
import org.drools.common.EventSupport;
@@ -118,9 +119,15 @@
protected void triggerCompleted(String type, boolean remove) {
if (remove) {
- ((org.drools.workflow.instance.NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
+ ((org.drools.workflow.instance.NodeInstanceContainer) getNodeInstanceContainer())
+ .removeNodeInstance(this);
}
- for (Connection connection: getNode().getOutgoingConnections(type)) {
+ List<Connection> connections = getNode().getOutgoingConnections(type);
+ if (connections == null || connections.isEmpty()) {
+ ((org.drools.workflow.instance.NodeInstanceContainer) getNodeInstanceContainer())
+ .nodeInstanceCompleted(this, type);
+ }
+ for (Connection connection: connections) {
// stop if this process instance has been aborted / completed
if (getProcessInstance().getState() != ProcessInstance.STATE_ACTIVE) {
return;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/RuleConstraintEvaluator.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -23,6 +23,7 @@
import org.drools.process.instance.ProcessInstance;
import org.drools.runtime.process.WorkflowProcessInstance;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.Node;
import org.drools.workflow.instance.node.SplitInstance;
/**
@@ -90,7 +91,9 @@
Constraint constraint) {
WorkflowProcessInstance processInstance = instance.getProcessInstance();
InternalAgenda agenda = (InternalAgenda) ((ProcessInstance) processInstance).getAgenda();
- String rule = "RuleFlow-Split-" + processInstance.getProcessId() + "-" + instance.getNode().getId() + "-" + connection.getTo().getId();
+ String rule = "RuleFlow-Split-" + processInstance.getProcessId() + "-" +
+ ((Node) instance.getNode()).getUniqueId() + "-" +
+ ((Node) connection.getTo()).getId() + "-" + connection.getToType();
boolean isActive = agenda.isRuleActiveInRuleFlowGroup( "DROOLS_SYSTEM", rule, processInstance.getId() );
return isActive;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -334,5 +334,10 @@
return externalEventListeners.keySet().toArray(
new String[externalEventListeners.size()]);
}
+
+ public void nodeInstanceCompleted(NodeInstance nodeInstance, String outType) {
+ throw new IllegalArgumentException(
+ "Completing a node instance that has no outgoing connection not suppoerted.");
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -245,4 +245,9 @@
}
}
+ public void nodeInstanceCompleted(NodeInstance nodeInstance, String outType) {
+ throw new IllegalArgumentException(
+ "Completing a node instance that has no outgoing connection not supported.");
+ }
+
}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/DynamicNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/DynamicNodeInstance.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/DynamicNodeInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -0,0 +1,43 @@
+package org.drools.workflow.instance.node;
+
+import java.util.List;
+import java.util.Map;
+
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.workflow.core.impl.NodeImpl;
+
+public class DynamicNodeInstance extends CompositeContextNodeInstance {
+
+ private static final long serialVersionUID = 4L;
+
+ private transient boolean executing = false;
+
+ public void internalTrigger(NodeInstance from, String type) {
+ executing = true;
+ createNodeInstances();
+ executing = false;
+ if (getNodeInstances(false).isEmpty()) {
+ triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE);
+ }
+ }
+
+ private void createNodeInstances() {
+ for (Node node: getCompositeNode().getNodes()) {
+ Map<String, List<Connection>> incomingConnections = node.getIncomingConnections();
+ if (incomingConnections.isEmpty()) {
+ NodeInstance nodeInstance = getNodeInstance(node);
+ ((org.drools.workflow.instance.NodeInstance) nodeInstance)
+ .trigger(null, NodeImpl.CONNECTION_DEFAULT_TYPE);
+ }
+ }
+ }
+
+ public void nodeInstanceCompleted(org.drools.workflow.instance.NodeInstance nodeInstance, String outType) {
+ if (!executing && getNodeInstances(false).isEmpty()) {
+ triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE);
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventBasedNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventBasedNodeInstance.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventBasedNodeInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -11,6 +11,7 @@
import org.drools.runtime.process.EventListener;
import org.drools.runtime.process.NodeInstance;
import org.drools.spi.KnowledgeHelper;
+import org.drools.time.TimeUtils;
import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.node.EventBasedNode;
import org.drools.workflow.instance.WorkflowProcessInstance;
@@ -44,8 +45,12 @@
protected TimerInstance createTimerInstance(Timer timer) {
TimerInstance timerInstance = new TimerInstance();
- timerInstance.setDelay(timer.getDelay());
- timerInstance.setPeriod(timer.getPeriod());
+ timerInstance.setDelay(TimeUtils.parseTimeString(timer.getDelay()));
+ if (timer.getPeriod() == null) {
+ timerInstance.setPeriod(0);
+ } else {
+ timerInstance.setPeriod(TimeUtils.parseTimeString(timer.getPeriod()));
+ }
timerInstance.setTimerId(timer.getId());
return timerInstance;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -56,7 +56,7 @@
"A MilestoneNode only accepts default incoming connections!");
}
String rule = "RuleFlow-Milestone-" + getProcessInstance().getProcessId()
- + "-" + getNode().getId();
+ + "-" + getMilestoneNode().getUniqueId();
boolean isActive = ((InternalAgenda) getProcessInstance().getAgenda())
.isRuleActiveInRuleFlowGroup("DROOLS_SYSTEM", rule, getProcessInstance().getId());
if (isActive) {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,39 +1,65 @@
package org.drools.workflow.instance.node;
-import java.util.Set;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.drools.WorkingMemory;
import org.drools.common.InternalAgenda;
+import org.drools.common.InternalFactHandle;
+import org.drools.common.InternalWorkingMemory;
+import org.drools.definition.process.Connection;
+import org.drools.event.ActivationCancelledEvent;
+import org.drools.event.ActivationCreatedEvent;
+import org.drools.event.AfterActivationFiredEvent;
+import org.drools.event.AgendaEventListener;
+import org.drools.event.AgendaGroupPoppedEvent;
+import org.drools.event.AgendaGroupPushedEvent;
+import org.drools.event.BeforeActivationFiredEvent;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.rule.Declaration;
+import org.drools.runtime.process.EventListener;
import org.drools.runtime.process.NodeInstance;
+import org.drools.spi.Activation;
+import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.StateNode;
+import org.drools.workflow.instance.NodeInstanceContainer;
-public class StateNodeInstance extends EventBasedNodeInstance {
+public class StateNodeInstance extends CompositeContextNodeInstance implements EventListener, AgendaEventListener {
private static final long serialVersionUID = 4L;
protected StateNode getStateNode() {
return (StateNode) getNode();
}
+
public void internalTrigger(NodeInstance from, String type) {
- super.internalTrigger(from, type);
+ // TODO: composite states trigger
StateNode stateNode = getStateNode();
- Set<String> keys = stateNode.getConstraints().keySet();
- int triggeredActivation = 0;
- for(String key:keys){
- String rule = "RuleFlowStateNode-" + getProcessInstance().getProcessId()
- + "-" + getNode().getId() +"-"+ key ;
-
- boolean isActive = ((InternalAgenda) getProcessInstance().getAgenda())
- .isRuleActiveInRuleFlowGroup("DROOLS_SYSTEM", rule, getProcessInstance().getId());
- if (isActive) {
- triggerCompleted(key, true);
- triggeredActivation++;
+ Connection selected = null;
+ int priority = Integer.MAX_VALUE;
+ for (Connection connection: stateNode.getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
+ Constraint constraint = stateNode.getConstraint(connection);
+ if (constraint != null && constraint.getPriority() < priority) {
+ String rule = "RuleFlowStateNode-" + getProcessInstance().getProcessId() + "-" +
+ getStateNode().getUniqueId() + "-" +
+ connection.getTo().getId() + "-" +
+ connection.getToType();
+ boolean isActive = ((InternalAgenda) getProcessInstance().getAgenda())
+ .isRuleActiveInRuleFlowGroup("DROOLS_SYSTEM", rule, getProcessInstance().getId());
+ if (isActive) {
+ selected = connection;
+ priority = constraint.getPriority();
+ }
}
}
- if(triggeredActivation == 0){
- addTriggerListener();
+ if (selected != null) {
+ ((NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
+ triggerConnection(selected);
+ } else {
+ addTriggerListener();
+ addActivationListener();
}
-
-
}
public void signalEvent(String type, Object event) {
@@ -53,14 +79,98 @@
getProcessInstance().addEventListener("signal", this, false);
}
+ private void addActivationListener() {
+ ((ProcessInstance) getProcessInstance()).getWorkingMemory().addEventListener(this);
+ }
+
public void addEventListeners() {
super.addEventListeners();
addTriggerListener();
+ addActivationListener();
}
public void removeEventListeners() {
super.removeEventListeners();
getProcessInstance().removeEventListener("signal", this, false);
+ ((ProcessInstance) getProcessInstance()).getWorkingMemory().removeEventListener(this);
}
+ public String[] getEventTypes() {
+ return new String[] { "signal" };
+ }
+
+ private boolean checkProcessInstance(Activation activation) {
+ final Map<?, ?> declarations = activation.getSubRule().getOuterDeclarations();
+ for ( Iterator<?> it = declarations.values().iterator(); it.hasNext(); ) {
+ Declaration declaration = (Declaration) it.next();
+ if ("processInstance".equals(declaration.getIdentifier())) {
+ Object value = declaration.getValue(
+ (InternalWorkingMemory) getProcessInstance().getWorkingMemory(),
+ ((InternalFactHandle) activation.getTuple().get(declaration)).getObject());
+ if (value instanceof ProcessInstance) {
+ return ((ProcessInstance) value).getId() == getProcessInstance().getId();
+ }
+ }
+ }
+ return true;
+ }
+
+ public void activationCancelled(ActivationCancelledEvent event, WorkingMemory workingMemory) {
+ // Do nothing
+ }
+
+ public void activationCreated(ActivationCreatedEvent event, WorkingMemory workingMemory) {
+ // check whether this activation is from the DROOLS_SYSTEM agenda group
+ String ruleFlowGroup = event.getActivation().getRule().getRuleFlowGroup();
+ if ("DROOLS_SYSTEM".equals(ruleFlowGroup)) {
+ // new activations of the rule associate with a milestone node
+ // trigger node instances of that milestone node
+ String ruleName = event.getActivation().getRule().getName();
+ String constraintNameStart = "RuleFlowStateNode-"
+ + getProcessInstance().getProcessId() + "-" + getNode().getId();
+ if (ruleName.startsWith(constraintNameStart)) {
+ Connection selected = null;
+ int priority = Integer.MAX_VALUE;
+ for (Connection connection: getNode().getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
+ Constraint constraint = getStateNode().getConstraint(connection);
+ if (constraint != null && constraint.getPriority() < priority) {
+ String constraintName = constraintNameStart + "-"
+ + connection.getTo().getId() + "-" + connection.getToType();
+ if (constraintName.equals(ruleName) && checkProcessInstance(event.getActivation())) {
+ selected = connection;
+ priority = constraint.getPriority();
+ }
+ }
+ }
+ if (selected != null) {
+ synchronized(getProcessInstance()) {
+ removeEventListeners();
+ ((NodeInstanceContainer) getNodeInstanceContainer()).removeNodeInstance(this);
+ triggerConnection(selected);
+ }
+ }
+ }
+ }
+ }
+
+ public void afterActivationFired(AfterActivationFiredEvent event,
+ WorkingMemory workingMemory) {
+ // Do nothing
+ }
+
+ public void agendaGroupPopped(AgendaGroupPoppedEvent event,
+ WorkingMemory workingMemory) {
+ // Do nothing
+ }
+
+ public void agendaGroupPushed(AgendaGroupPushedEvent event,
+ WorkingMemory workingMemory) {
+ // Do nothing
+ }
+
+ public void beforeActivationFired(BeforeActivationFiredEvent event,
+ WorkingMemory workingMemory) {
+ // Do nothing
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -5,6 +5,7 @@
import org.drools.process.instance.timer.TimerInstance;
import org.drools.runtime.process.EventListener;
import org.drools.runtime.process.NodeInstance;
+import org.drools.time.TimeUtils;
import org.drools.workflow.core.node.TimerNode;
import org.drools.workflow.instance.WorkflowProcessInstance;
@@ -43,8 +44,12 @@
protected TimerInstance createTimerInstance() {
Timer timer = getTimerNode().getTimer();
TimerInstance timerInstance = new TimerInstance();
- timerInstance.setDelay(timer.getDelay());
- timerInstance.setPeriod(timer.getPeriod());
+ timerInstance.setDelay(TimeUtils.parseTimeString(timer.getDelay()));
+ if (timer.getPeriod() == null) {
+ timerInstance.setPeriod(0);
+ } else {
+ timerInstance.setPeriod(TimeUtils.parseTimeString(timer.getPeriod()));
+ }
timerInstance.setTimerId(timer.getId());
return timerInstance;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/RuleFlowGroupTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -497,7 +497,7 @@
process.addNode( end );
// rules for split
- final Rule splitRule1 = new Rule( "RuleFlow-Split-1-" + split.getId() + "-" + ruleSet1.getId() );
+ final Rule splitRule1 = new Rule( "RuleFlow-Split-1-" + split.getUniqueId() + "-" + ruleSet1.getUniqueId() + "-" + Node.CONNECTION_DEFAULT_TYPE );
splitRule1.setRuleFlowGroup( "DROOLS_SYSTEM" );
splitRule1.setConsequence( consequence );
@@ -507,7 +507,7 @@
splitRule1.getLhs(),
buildContext );
- final Rule splitRule2 = new Rule( "RuleFlow-Split-1-" + split.getId() + "-" + ruleSet2.getId() );
+ final Rule splitRule2 = new Rule( "RuleFlow-Split-1-" + split.getUniqueId() + "-" + ruleSet2.getUniqueId() + "-" + Node.CONNECTION_DEFAULT_TYPE );
splitRule2.setRuleFlowGroup( "DROOLS_SYSTEM" );
splitRule2.setConsequence( consequence );
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -76,10 +76,12 @@
public Object getPropertyValue(Object id) {
Timer timer = getTimerNode().getTimer();
if (TIMER_DELAY.equals(id)) {
- return timer == null ? "" : timer.getDelay() + "";
+ return timer == null ? "" :
+ (timer.getDelay() == null? "" : timer.getDelay());
}
if (TIMER_PERIOD.equals(id)) {
- return timer == null ? "" : timer.getPeriod() + "";
+ return timer == null ? "" :
+ (timer.getPeriod() == null ? "" : timer.getPeriod());
}
return super.getPropertyValue(id);
}
@@ -91,14 +93,14 @@
timer = new Timer();
getTimerNode().setTimer(timer);
} else {
- timer.setDelay(0);
+ timer.setDelay(null);
}
} else if (TIMER_PERIOD.equals(id)) {
if (timer == null) {
timer = new Timer();
getTimerNode().setTimer(timer);
} else {
- timer.setPeriod(0);
+ timer.setPeriod(null);
}
} else {
super.resetPropertyValue(id);
@@ -107,14 +109,22 @@
public void setPropertyValue(Object id, Object value) {
Timer timer = getTimerNode().getTimer();
+ if (timer == null) {
+ timer = new Timer();
+ getTimerNode().setTimer(timer);
+ }
if (TIMER_DELAY.equals(id)) {
- if (timer == null) {
- timer = new Timer();
- getTimerNode().setTimer(timer);
- }
- timer.setDelay(new Long((String) value));
+ String s = ((String) value).trim();
+ if (s.length() == 0) {
+ s = null;
+ }
+ timer.setDelay(s);
} else if (TIMER_PERIOD.equals(id)) {
- timer.setPeriod(new Long((String) value));
+ String s = ((String) value).trim();
+ if (s.length() == 0) {
+ s = null;
+ }
+ timer.setPeriod(s);
} else {
super.setPropertyValue(id, value);
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/action/ActionDialog.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -222,7 +222,7 @@
int code = dialog.open();
if (code != CANCEL) {
List<String> imports = dialog.getImports();
- ((Process) process).setImports(imports);
+ process.setImports(imports);
List<String> functionImports = dialog.getFunctionImports();
process.setFunctionImports(functionImports);
completionProcessor.reset();
@@ -241,7 +241,7 @@
int code = dialog.open();
if (code != CANCEL) {
Map<String, String> globals = dialog.getGlobals();
- ((Process) process).setGlobals(globals);
+ process.setGlobals(globals);
completionProcessor.reset();
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/MilestoneConstraintDialog.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -53,7 +53,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class MilestoneConstraintDialog extends EditBeanDialog {
+public class MilestoneConstraintDialog extends EditBeanDialog<String> {
private WorkflowProcess process;
private TabFolder tabFolder;
@@ -66,7 +66,7 @@
setValue(milestone.getConstraint());
}
- protected Object updateValue(Object value) {
+ protected String updateValue(String value) {
if (tabFolder.getSelectionIndex() == 0) {
return getConstraintText();
}
@@ -180,8 +180,10 @@
dialog.create();
int code = dialog.open();
if (code != CANCEL) {
- List imports = dialog.getImports();
- ((org.drools.process.core.Process) process).setImports(imports);
+ List<String> imports = dialog.getImports();
+ process.setImports(imports);
+ List<String> functionImports = dialog.getFunctionImports();
+ process.setFunctionImports(functionImports);
completionProcessor.reset();
}
}
@@ -197,8 +199,8 @@
dialog.create();
int code = dialog.open();
if (code != CANCEL) {
- Map globals = dialog.getGlobals();
- ((org.drools.process.core.Process) process).setGlobals(globals);
+ Map<String, String> globals = dialog.getGlobals();
+ process.setGlobals(globals);
completionProcessor.reset();
}
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimerDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimerDialog.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimerDialog.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -276,25 +276,17 @@
if (key == null) {
key = new Timer();
}
- try {
- String delayString = delayText.getText().trim();
- long delay = 0;
- if (delayString.length() > 0) {
- delay = new Long(delayString);
- }
+ String delay = delayText.getText().trim();
+ if (delay.length() == 0) {
+ key.setDelay(null);
+ } else {
key.setDelay(delay);
- } catch (NumberFormatException e) {
- throw new IllegalArgumentException("Delay should be a long value");
}
- try {
- String periodString = periodText.getText().trim();
- long period = 0;
- if (periodString.length() > 0) {
- period = new Long(periodString);
- }
+ String period = periodText.getText().trim();
+ if (period.length() == 0) {
+ key.setPeriod(null);
+ } else {
key.setPeriod(period);
- } catch (NumberFormatException e) {
- throw new IllegalArgumentException("Period should be a long value");
}
if (tabFolder.getSelectionIndex() == 0) {
return getAction();
Modified: labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java
===================================================================
--- labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-persistence-jpa/src/test/java/org/drools/persistence/session/SingleSessionCommandServiceTest.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -17,19 +17,16 @@
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.SessionConfiguration;
-import org.drools.audit.WorkingMemoryConsoleLogger;
import org.drools.compiler.PackageBuilder;
import org.drools.compiler.ProcessBuilder;
import org.drools.definition.KnowledgePackage;
import org.drools.definitions.impl.KnowledgePackageImp;
-import org.drools.event.RuleFlowEventListener;
import org.drools.process.command.CompleteWorkItemCommand;
import org.drools.process.command.GetProcessInstanceCommand;
import org.drools.process.command.StartProcessCommand;
import org.drools.process.core.Work;
import org.drools.process.core.impl.WorkImpl;
import org.drools.process.core.timer.Timer;
-import org.drools.process.instance.impl.demo.SystemOutWorkItemHandler;
import org.drools.rule.Package;
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
@@ -634,7 +631,7 @@
timerNode.setId( 2 );
timerNode.setName( "Timer" );
Timer timer = new Timer();
- timer.setDelay( 2000 );
+ timer.setDelay( "2000" );
timerNode.setTimer( timer );
process.addNode( timerNode );
new ConnectionImpl( start,
@@ -727,7 +724,7 @@
timerNode.setId( 2 );
timerNode.setName( "Timer" );
Timer timer = new Timer();
- timer.setDelay( 0 );
+ timer.setDelay( "0" );
timerNode.setTimer( timer );
process.addNode( timerNode );
new ConnectionImpl( start,
Modified: labs/jbossrules/trunk/drools-process/drools-bpel/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/.classpath 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/.classpath 2009-06-11 23:48:18 UTC (rev 26931)
@@ -5,29 +5,33 @@
<classpathentry kind="src" path="src/test/resources" output="target/test-classes" including="**" excluding="**/*.java"/>
<classpathentry kind="output" path="target/classes"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.13/log4j-1.2.13.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
<classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/avalon-framework/avalon-framework/4.1.3/avalon-framework-4.1.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon/8.7/saxon-8.7.jar"/>
- <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon-xpath/8.7/saxon-xpath-8.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.10/mvel2-2.0.10.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-compiler/1.2/ode-bpel-compiler-1.2.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-bpel-schemas/1.2/ode-bpel-schemas-1.2.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/ode/ode-utils/1.2/ode-utils-1.2.jar"/>
- <classpathentry kind="src" path="/drools-api"/>
- <classpathentry kind="src" path="/drools-compiler"/>
- <classpathentry kind="src" path="/drools-core"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.1-SNAPSHOT/mvel2-2.0.1-SNAPSHOT.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/antlr/antlr-runtime/3.0.1/antlr-runtime-3.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
- <classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon/8.7/saxon-8.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/net/sf/saxon/saxon-xpath/8.7/saxon-xpath-8.7.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javax/servlet/servlet-api/2.3/servlet-api-2.3.jar"/>
<classpathentry kind="var" path="M2_REPO/wsdl4j/wsdl4j/1.6.1/wsdl4j-1.6.1.jar"/>
<classpathentry kind="var" path="M2_REPO/xalan/xalan/2.7.0/xalan-2.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-bpel/.project
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/.project 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/.project 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,11 +1,7 @@
<projectDescription>
<name>drools-bpel</name>
<comment>A rule production system</comment>
- <projects>
- <project>drools-api</project>
- <project>drools-compiler</project>
- <project>drools-core</project>
- </projects>
+ <projects/>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELProcessInstanceFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -5,10 +5,10 @@
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import org.drools.process.instance.AbstractProcessInstanceFactory;
import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.ProcessInstanceFactory;
-public class BPELProcessInstanceFactory implements ProcessInstanceFactory, Externalizable {
+public class BPELProcessInstanceFactory extends AbstractProcessInstanceFactory implements Externalizable {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELWaitInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELWaitInstance.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-bpel/src/main/java/org/drools/bpel/instance/BPELWaitInstance.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -42,11 +42,11 @@
} else if (wait.getUntilExpression() != null) {
timer.setDelay(getTimerDelayUntil(wait.getUntilExpression()));
}
- timer.setPeriod(0);
+ timer.setPeriod("0");
return timer;
}
- private long getTimerDelayFor(String forExpression) {
+ private String getTimerDelayFor(String forExpression) {
try {
XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
evaluator.setExpression(forExpression);
@@ -62,20 +62,20 @@
if (delay < 0) {
delay = 0;
}
- return delay;
+ return delay + "";
} catch (Throwable t) {
throw new IllegalArgumentException(
"Could not get timer delay for", t);
}
}
- private long getTimerDelayUntil(String untilExpression) {
+ private String getTimerDelayUntil(String untilExpression) {
try {
XPathReturnValueEvaluator evaluator = new XPathReturnValueEvaluator();
evaluator.setExpression(untilExpression);
ProcessContext processContext = new ProcessContext();
processContext.setNodeInstance(this);
- List literal = (List) evaluator.evaluate(
+ List<?> literal = (List<?>) evaluator.evaluate(
((ProcessInstance) getProcessInstance()).getWorkingMemory(), processContext, XPathConstants.NODESET);
Calendar calendar = null;
if (literal.size() == 0) {
@@ -98,7 +98,7 @@
if (delay < 0) {
delay = 0;
}
- return delay;
+ return delay + "";
} catch (Throwable t) {
throw new IllegalArgumentException(
"Could not get timer delay until", t);
Property changes on: labs/jbossrules/trunk/drools-process/drools-jpdl
___________________________________________________________________
Name: svn:ignore
- target
local
.metadata
.settings
.wtpmodules
nbproject
*.ipr
*.iws
*.iml
+ target
local
.metadata
.settings
.wtpmodules
nbproject
*.ipr
*.iws
*.iml
bin
Modified: labs/jbossrules/trunk/drools-process/drools-jpdl/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-jpdl/.classpath 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-jpdl/.classpath 2009-06-11 23:48:18 UTC (rev 26931)
@@ -13,15 +13,16 @@
<classpathentry kind="var" path="M2_REPO/asm/asm-attrs/1.5.3/asm-attrs-1.5.3.jar"/>
<classpathentry kind="var" path="M2_REPO/bsh/bsh/1.3.0/bsh-1.3.0.jar"/>
<classpathentry kind="var" path="M2_REPO/cglib/cglib/2.1_3/cglib-2.1_3.jar"/>
+ <classpathentry kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-collections/commons-collections/3.1/commons-collections-3.1.jar"/>
<classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/concurrent/concurrent/1.3.4/concurrent-1.3.4.jar"/>
<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/derby/derby/10.2.1.6/derby-10.2.1.6.jar"/>
<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.0/drools-api-5.0.0.jar" sourcepath="M2_REPO/org/drools/drools-api/5.0.0/drools-api-5.0.0-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.0/drools-compiler-5.0.0.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.0.0/drools-compiler-5.0.0-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.0/drools-core-5.0.0.jar" sourcepath="M2_REPO/org/drools/drools-core/5.0.0/drools-core-5.0.0-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/net/sf/ehcache/ehcache/1.2.3/ehcache-1.2.3.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-library/1.1/hamcrest-library-1.1.jar"/>
@@ -34,16 +35,18 @@
<classpathentry kind="var" path="M2_REPO/org/apache/jackrabbit/jackrabbit-text-extractors/1.4/jackrabbit-text-extractors-1.4.jar"/>
<classpathentry kind="var" path="M2_REPO/janino/janino/2.5.15/janino-2.5.15.jar"/>
<classpathentry kind="var" path="M2_REPO/org/jbpm/jbpm3/jbpm-jpdl/3.3.0.GA/jbpm-jpdl-3.3.0.GA.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.0.1/jmock-2.5.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.5.2/joda-time-1.5.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock/2.5.1/jmock-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jmock/jmock-legacy/2.5.1/jmock-legacy-2.5.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/joda-time/joda-time/1.6/joda-time-1.6.jar"/>
<classpathentry kind="var" path="M2_REPO/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar"/>
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/lucene/lucene-core/2.2.0/lucene-core-2.2.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.4-SNAPSHOT/mvel2-2.0.4-SNAPSHOT.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.10/mvel2-2.0.10.jar"/>
<classpathentry kind="var" path="M2_REPO/nekohtml/nekohtml/0.9.4/nekohtml-0.9.4.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/pdfbox/pdfbox/0.6.4/pdfbox-0.6.4.jar"/>
<classpathentry kind="var" path="M2_REPO/poi/poi/2.5.1-final-20040804/poi-2.5.1-final-20040804.jar"/>
<classpathentry kind="var" path="M2_REPO/org/textmining/tm-extractors/0.4/tm-extractors-0.4.jar"/>
- <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.8.0/xercesImpl-2.8.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
<classpathentry kind="var" path="M2_REPO/xml-apis/xml-apis/2.0.2/xml-apis-2.0.2.jar"/>
-</classpath>
+</classpath>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/instance/JpdlProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/instance/JpdlProcessInstanceFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/instance/JpdlProcessInstanceFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,16 +1,16 @@
package org.drools.jpdl.instance;
import java.io.Externalizable;
-import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.drools.process.instance.AbstractProcessInstanceFactory;
import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.ProcessInstanceFactory;
-public class JpdlProcessInstanceFactory implements ProcessInstanceFactory, Externalizable {
+public class JpdlProcessInstanceFactory extends AbstractProcessInstanceFactory implements Externalizable {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 4L;
public ProcessInstance createProcessInstance() {
return new JpdlProcessInstance();
@@ -22,5 +22,4 @@
public void writeExternal(ObjectOutput out) throws IOException {
}
-
}
Modified: labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/xml/StartStateHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/xml/StartStateHandler.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-jpdl/src/main/java/org/drools/jpdl/xml/StartStateHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -14,7 +14,7 @@
return StartState.class;
}
- public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
StartState startNode = (StartState) node;
writeNode("start", startNode, xmlDump, includeMeta);
endNode(xmlDump);
Property changes on: labs/jbossrules/trunk/drools-process/drools-osworkflow
___________________________________________________________________
Name: svn:ignore
- target
local
.metadata
.settings
.wtpmodules
nbproject
*.ipr
*.iws
*.iml
+ target
local
.metadata
.settings
.wtpmodules
nbproject
*.ipr
*.iws
*.iml
bin
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/.classpath 2009-06-11 23:48:18 UTC (rev 26931)
@@ -15,10 +15,10 @@
<classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1/commons-logging-1.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/eclipse/jdt/core/3.4.2.v_883_R34x/core-3.4.2.v_883_R34x.jar"/>
<classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.0.1.SNAPSHOT/drools-api-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.0.1.SNAPSHOT/drools-api-5.0.1.SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.0.1.SNAPSHOT/drools-compiler-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.0.1.SNAPSHOT/drools-compiler-5.0.1.SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.0.1.SNAPSHOT/drools-core-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.0.1.SNAPSHOT/drools-core-5.0.1.SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.0.1.SNAPSHOT/drools-persistence-jpa-5.0.1.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-persistence-jpa/5.0.1.SNAPSHOT/drools-persistence-jpa-5.0.1.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-api/5.1.0.SNAPSHOT/drools-api-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-compiler/5.1.0.SNAPSHOT/drools-compiler-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-core/5.1.0.SNAPSHOT/drools-core-5.1.0.SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT.jar" sourcepath="M2_REPO/org/drools/drools-persistence-jpa/5.1.0.SNAPSHOT/drools-persistence-jpa-5.1.0.SNAPSHOT-sources.jar"/>
<classpathentry kind="var" path="M2_REPO/org/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jms_1.1_spec/1.0.1/geronimo-jms_1.1_spec-1.0.1.jar"/>
<classpathentry kind="var" path="M2_REPO/org/apache/geronimo/specs/geronimo-jta_1.0.1B_spec/1.0.1/geronimo-jta_1.0.1B_spec-1.0.1.jar"/>
@@ -38,7 +38,7 @@
<classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
<classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar"/>
<classpathentry kind="var" path="M2_REPO/logkit/logkit/1.0.1/logkit-1.0.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.9pre2/mvel2-2.0.9pre2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/mvel/mvel2/2.0.10/mvel2-2.0.10.jar"/>
<classpathentry kind="var" path="M2_REPO/org/objenesis/objenesis/1.0/objenesis-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/opensymphony/oscore/2.2.5/oscore-2.2.5.jar"/>
<classpathentry kind="var" path="M2_REPO/opensymphony/osworkflow/2.8.0/osworkflow-2.8.0.jar"/>
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/instance/OSWorkflowProcessInstanceFactory.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -1,9 +1,9 @@
package org.drools.osworkflow.instance;
+import org.drools.process.instance.AbstractProcessInstanceFactory;
import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.ProcessInstanceFactory;
-public class OSWorkflowProcessInstanceFactory implements ProcessInstanceFactory {
+public class OSWorkflowProcessInstanceFactory extends AbstractProcessInstanceFactory {
public ProcessInstance createProcessInstance() {
return new OSWorkflowProcessInstance();
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/StepNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/StepNodeHandler.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/StepNodeHandler.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -36,7 +36,7 @@
}
}
- public void writeNode(Node node, StringBuffer xmlDump, boolean includeMeta) {
+ public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
StepNode stepNode = (StepNode) node;
writeNode("step", stepNode, xmlDump, includeMeta);
xmlDump.append(">" + EOL);
@@ -51,7 +51,7 @@
endNode("step", xmlDump);
}
- public Class generateNodeFor() {
+ public Class<?> generateNodeFor() {
return StepNode.class;
}
Modified: labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/XmlOSWorkflowProcessDumper.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/XmlOSWorkflowProcessDumper.java 2009-06-11 23:41:46 UTC (rev 26930)
+++ labs/jbossrules/trunk/drools-process/drools-osworkflow/src/main/java/org/drools/osworkflow/xml/XmlOSWorkflowProcessDumper.java 2009-06-11 23:48:18 UTC (rev 26931)
@@ -3,13 +3,9 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Collection;
-import java.util.List;
import org.drools.definition.process.WorkflowProcess;
import org.drools.osworkflow.core.OSWorkflowProcess;
-import org.drools.process.core.context.exception.ExceptionScope;
-import org.drools.process.core.context.swimlane.SwimlaneContext;
-import org.drools.process.core.context.variable.VariableScope;
import org.drools.xml.XmlWorkflowProcessDumper;
import com.opensymphony.workflow.loader.ActionDescriptor;
@@ -27,13 +23,13 @@
);
}
@Override
- protected void visitHeader(WorkflowProcess process, StringBuffer xmlDump, boolean includeMeta) {
+ protected void visitHeader(WorkflowProcess process, StringBuilder xmlDump, boolean includeMeta) {
xmlDump.append(" <header>" + EOL);
visitInitialActions(((OSWorkflowProcess) process).getInitialActions(), xmlDump);
xmlDump.append(" </header>" + EOL + EOL);
}
- private void visitInitialActions(Collection<ActionDescriptor> initialActions, StringBuffer xmlDump) {
+ private void visitInitialActions(Collection<ActionDescriptor> initialActions, StringBuilder xmlDump) {
if (initialActions != null && initialActions.size() > 0) {
xmlDump.append("<initial-actions>" + EOL);
for (ActionDescriptor action: initialActions) {
More information about the jboss-svn-commits
mailing list