[jboss-svn-commits] JBL Code SVN: r26986 - in labs/jbossrules/trunk: drools-compiler/src/main/java/org/drools/process/builder and 26 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jun 16 21:43:57 EDT 2009
Author: KrisVerlaenen
Date: 2009-06-16 21:43:57 -0400 (Tue, 16 Jun 2009)
New Revision: 26986
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionRef.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateBasedNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateBasedNodeInstance.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateBasedNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StateNodeEditPart.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNStateFigure.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListCellEditor.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListDialog.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintsPropertyDescriptor.java
Removed:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventBasedNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SequenceNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventBasedNodeInstance.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventBasedNodeWrapper.java
labs/jbossrules/trunk/drools-process/drools-gwt-graph/src/main/resources/com.sample.eventing.png
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.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/process/builder/SplitNodeBuilder.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/CompositeNodeHandler.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/MilestoneNodeHandler.java
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.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/SubProcessNodeHandler.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/WorkItemNodeHandler.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/lang/DRLContextTest.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/marshalling/impl/AbstractProcessInstanceMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.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/workflow/core/impl/ConstraintImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ExtendedNodeImpl.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/ActionNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/CompositeNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Constrainable.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EndNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ForEachNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/MilestoneNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/RuleSetNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StartNode.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/core/node/SubProcessNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/TimerNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Trigger.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.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/DynamicNodeInstance.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/RuleSetNodeInstance.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/SubProcessNodeInstance.java
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/WorkItemNodeInstance.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNode.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeContextNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/FaultNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ForEachNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubProcessWrapper.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/core/WorkItemWrapper.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/BPMNSkinProvider.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/DefaultSkinProvider.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/SkinProvider.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.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-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersCellEditor.java
labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersPropertyDescriptor.java
labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath
labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml
labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java
labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath
labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml
labs/jbossrules/trunk/drools-process/drools-gwt-graph/.classpath
labs/jbossrules/trunk/drools-process/drools-gwt-graph/pom.xml
labs/jbossrules/trunk/drools-process/drools-gwt-graph/src/main/java/org/drools/integration/console/graph/GraphViewerPluginImpl.java
Log:
JBRULES-2107: Support StateNode for Finite State Machines
- added support for on-entry/exit actions and timers
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/compiler/ProcessBuilder.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -47,6 +47,7 @@
import org.drools.ruleflow.core.RuleFlowProcess;
import org.drools.ruleflow.core.validation.RuleFlowProcessValidator;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.DroolsConsequenceAction;
import org.drools.workflow.core.impl.WorkflowProcessImpl;
import org.drools.workflow.core.node.ConstraintTrigger;
@@ -55,7 +56,6 @@
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;
@@ -358,24 +358,28 @@
"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 createStateRule(Process process, StateNode state, ConnectionRef key, Constraint constraint) {
+ if (constraint.getConstraint() == null
+ || constraint.getConstraint().trim().length() == 0) {
+ return "";
+ } else {
+ 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 createStateRules(Process process, StateNode state){
+ private String createStateRules(Process process, StateNode state) {
String result = "";
- for(ConnectionRef key : state.getConstraints().keySet()){
- result += createStateRule(process, state, key);
+ for (Map.Entry<ConnectionRef, Constraint> entry: state.getConstraints().entrySet()) {
+ result += createStateRule(process, state, entry.getKey(), entry.getValue());
}
return result;
-
}
private String createStartConstraintRule(Process process,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/EventBasedNodeBuilder.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -9,7 +9,7 @@
import org.drools.rule.builder.ProcessBuildContext;
import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.impl.NodeImpl;
-import org.drools.workflow.core.node.EventBasedNode;
+import org.drools.workflow.core.node.StateBasedNode;
public class EventBasedNodeBuilder extends ExtendedNodeBuilder {
@@ -18,7 +18,7 @@
ProcessBuildContext context,
Node node) {
super.build(process, processDescr, context, node);
- Map<Timer, DroolsAction> timers = ((EventBasedNode) node).getTimers();
+ Map<Timer, DroolsAction> timers = ((StateBasedNode) node).getTimers();
if (timers != null) {
for (DroolsAction action: timers.values()) {
buildAction(action, context, (NodeImpl) node );
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/ProcessNodeBuilderRegistry.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -5,6 +5,7 @@
import org.drools.definition.process.Node;
import org.drools.workflow.core.node.ActionNode;
+import org.drools.workflow.core.node.CompositeContextNode;
import org.drools.workflow.core.node.EndNode;
import org.drools.workflow.core.node.FaultNode;
import org.drools.workflow.core.node.HumanTaskNode;
@@ -45,6 +46,10 @@
new ActionNodeBuilder() );
register( Split.class,
new SplitNodeBuilder() );
+ register( CompositeContextNode.class,
+ new EventBasedNodeBuilder() );
+ register( StateNode.class,
+ new EventBasedNodeBuilder() );
}
public void register(Class< ? extends Node> cls,
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/process/builder/SplitNodeBuilder.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -12,6 +12,7 @@
import org.drools.lang.descr.ProcessDescr;
import org.drools.rule.builder.ProcessBuildContext;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.ConstraintImpl;
import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.Split;
@@ -31,10 +32,10 @@
return;
}
// we need to clone the map, so we can update the original while iterating.
- Map<Split.ConnectionRef, Constraint> map = new HashMap<Split.ConnectionRef, Constraint>( splitNode.getConstraints() );
- for ( Iterator<Map.Entry<Split.ConnectionRef, Constraint>> it = map.entrySet().iterator(); it.hasNext(); ) {
- Map.Entry<Split.ConnectionRef, Constraint> entry = it.next();
- Split.ConnectionRef connection = entry.getKey();
+ Map<ConnectionRef, Constraint> map = new HashMap<ConnectionRef, Constraint>( splitNode.getConstraints() );
+ for ( Iterator<Map.Entry<ConnectionRef, Constraint>> it = map.entrySet().iterator(); it.hasNext(); ) {
+ Map.Entry<ConnectionRef, Constraint> entry = it.next();
+ ConnectionRef connection = entry.getKey();
ConstraintImpl constraint = (ConstraintImpl) entry.getValue();
Connection outgoingConnection = null;
for (Connection out: splitNode.getDefaultOutgoingConnections()) {
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/AbstractNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -118,7 +118,7 @@
}
}
- protected void handleAction(final Node node, final Element element, String type) {
+ protected void handleAction(final ExtendedNodeImpl node, final Element element, String type) {
NodeList nodeList = element.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
org.w3c.dom.Node xmlNode = nodeList.item(i);
@@ -131,7 +131,7 @@
DroolsAction action = extractAction(subXmlNode);
actions.add(action);
}
- ((ExtendedNodeImpl) node).setActions(type, actions);
+ node.setActions(type, actions);
return;
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/CompositeNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -37,6 +37,10 @@
CompositeNode compositeNode = (CompositeNode) node;
writeAttributes(compositeNode, xmlDump, includeMeta);
xmlDump.append(">" + EOL);
+ for (String eventType: compositeNode.getActionTypes()) {
+ writeActions(eventType, compositeNode.getActions(eventType), xmlDump);
+ }
+ writeTimers(compositeNode.getTimers(), xmlDump);
if (compositeNode instanceof CompositeContextNode) {
VariableScope variableScope = (VariableScope)
((CompositeContextNode) compositeNode).getDefaultContext(VariableScope.VARIABLE_SCOPE);
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/ConstraintHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -3,10 +3,10 @@
import java.util.HashSet;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.ConstraintImpl;
+import org.drools.workflow.core.impl.NodeImpl;
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,8 +20,6 @@
public ConstraintHandler() {
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<?>>();
@@ -44,96 +42,42 @@
final String localName,
final ExtensibleXmlParser parser) throws SAXException {
final Element element = parser.endElementBuilder();
- Object parent = parser.getParent();
- // TODO use Constraintable interface
- if (parent instanceof Split) {
- Split splitNode = (Split) 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);
- Split.ConnectionRef connectionRef = new Split.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);
- 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();
+ Constrainable parent = (Constrainable) parser.getParent();
+ 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);
- constrainable.addConstraint(name, constraint);
- } else {
- throw new SAXException("Invalid parent node " + parent);
+ final String toNodeIdString = element.getAttribute("toNodeId");
+ String toType = element.getAttribute("toType");
+ ConnectionRef connectionRef = null;
+ if (toNodeIdString != null && toNodeIdString.trim().length() > 0) {
+ int toNodeId = new Integer(toNodeIdString);
+ if (toType == null || toType.trim().length() == 0) {
+ toType = NodeImpl.CONNECTION_DEFAULT_TYPE;
+ }
+ connectionRef = new ConnectionRef(toNodeId, toType);
}
+
+ 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);
+ parent.addConstraint(connectionRef, constraint);
return null;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/MilestoneNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -25,7 +25,7 @@
super.handleNode(node, element, uri, localName, parser);
MilestoneNode milestoneNode = (MilestoneNode) node;
for (String eventType: milestoneNode.getActionTypes()) {
- handleAction(node, element, eventType);
+ handleAction(milestoneNode, element, eventType);
}
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SplitNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -4,6 +4,7 @@
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.node.Split;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.XmlDumper;
@@ -44,12 +45,11 @@
} else {
xmlDump.append(">" + EOL);
xmlDump.append(" <constraints>" + EOL);
- for (Map.Entry<Split.ConnectionRef, Constraint> entry: splitNode.getConstraints().entrySet()) {
- Split.ConnectionRef connection = entry.getKey();
+ for (Map.Entry<ConnectionRef, Constraint> entry: splitNode.getConstraints().entrySet()) {
+ ConnectionRef connection = entry.getKey();
Constraint constraint = entry.getValue();
xmlDump.append(" <constraint "
- + "toNodeId=\"" + connection.getNodeId() + "\" "
- + "toType=\"" + connection.getToType() + "\" ");
+ + "toNodeId=\"" + connection.getNodeId() + "\" ");
String name = constraint.getName();
if (name != null && !"".equals(name)) {
xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/StateNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -4,9 +4,12 @@
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.node.StateNode;
-import org.drools.workflow.core.node.StateNode.ConnectionRef;
+import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.XmlDumper;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
public class StateNodeHandler extends AbstractNodeHandler {
@@ -19,18 +22,31 @@
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(stateNode, element, eventType);
+ }
+ }
+
public void writeNode(Node node, StringBuilder xmlDump, boolean includeMeta) {
StateNode stateNode = (StateNode) node;
writeNode("state", stateNode, xmlDump, includeMeta);
xmlDump.append(">\n");
+ for (String eventType: stateNode.getActionTypes()) {
+ writeActions(eventType, stateNode.getActions(eventType), xmlDump);
+ }
+ writeTimers(stateNode.getTimers(), xmlDump);
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() + "\" ");
+ + "toNodeId=\"" + connection.getNodeId() + "\" ");
String name = constraint.getName();
if (name != null && !"".equals(name)) {
xmlDump.append("name=\"" + XmlDumper.replaceIllegalChars(constraint.getName()) + "\" ");
@@ -39,7 +55,6 @@
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);
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/SubProcessNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -28,7 +28,7 @@
String independent = element.getAttribute("independent");
subProcessNode.setIndependent(!"false".equals(independent));
for (String eventType: subProcessNode.getActionTypes()) {
- handleAction(node, element, eventType);
+ handleAction(subProcessNode, element, eventType);
}
}
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/TimerHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -4,8 +4,7 @@
import org.drools.process.core.timer.Timer;
import org.drools.workflow.core.DroolsAction;
-import org.drools.workflow.core.impl.ExtendedNodeImpl;
-import org.drools.workflow.core.node.EventBasedNode;
+import org.drools.workflow.core.node.StateBasedNode;
import org.drools.xml.BaseAbstractHandler;
import org.drools.xml.ExtensibleXmlParser;
import org.drools.xml.Handler;
@@ -18,7 +17,7 @@
public TimerHandler() {
if ( (this.validParents == null) && (this.validPeers == null) ) {
this.validParents = new HashSet<Class<?>>();
- this.validParents.add( ExtendedNodeImpl.class );
+ this.validParents.add( StateBasedNode.class );
this.validPeers = new HashSet<Class<?>>();
this.validPeers.add( null );
@@ -39,7 +38,7 @@
final String localName,
final ExtensibleXmlParser parser) throws SAXException {
Element element = parser.endElementBuilder();
- EventBasedNode eventBasedNode = (EventBasedNode) parser.getParent();
+ StateBasedNode parent = (StateBasedNode) parser.getParent();
String id = element.getAttribute("id");
emptyAttributeCheck( localName, "id", id, parser );
String delay = element.getAttribute("delay");
@@ -58,7 +57,7 @@
Element actionXml = (Element) xmlNode;
action = AbstractNodeHandler.extractAction(actionXml);
}
- eventBasedNode.addTimer(timer, action);
+ parent.addTimer(timer, action);
return null;
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/xml/processes/WorkItemNodeHandler.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -26,7 +26,7 @@
final String waitForCompletion = element.getAttribute("waitForCompletion");
workItemNode.setWaitForCompletion(!"false".equals(waitForCompletion));
for (String eventType: workItemNode.getActionTypes()) {
- handleAction(node, element, eventType);
+ handleAction(workItemNode, element, eventType);
}
}
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/META-INF/drools-processes-5.0.xsd 2009-06-17 01:43:57 UTC (rev 26986)
@@ -413,6 +413,9 @@
<xs:element name="composite">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="drools:timers"/>
+ <xs:element ref="drools:onEntry"/>
+ <xs:element ref="drools:onExit"/>
<xs:element ref="drools:variables"/>
<xs:element ref="drools:exceptionHandlers"/>
<xs:element ref="drools:nodes"/>
@@ -517,9 +520,12 @@
</xs:element>
<xs:element name="state">
<xs:complexType>
- <xs:sequence minOccurs="0">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="drools:timers"/>
+ <xs:element ref="drools:onEntry"/>
+ <xs:element ref="drools:onExit"/>
<xs:element ref="drools:constraints"/>
- </xs:sequence>
+ </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"/>
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/ProcessStateTest.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -3,6 +3,7 @@
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.List;
import junit.framework.TestCase;
@@ -10,15 +11,18 @@
import org.drools.Person;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
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.ruleflow.instance.RuleFlowProcessInstance;
+import org.drools.runtime.process.NodeInstance;
+import org.drools.workflow.instance.node.StateNodeInstance;
public class ProcessStateTest extends TestCase {
- public void testSignalState() {
+ public void testManualSignalState() {
PackageBuilder builder = new PackageBuilder();
Reader source = new StringReader(
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
@@ -32,13 +36,23 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" name=\"State\" />\n" +
- " <end id=\"3\" name=\"End\" />\n" +
+ " <state id=\"2\" name=\"StateA\" >\n" +
+ " <constraints>\n" +
+ " <constraint toNodeId=\"3\" name=\"toB\" />\n" +
+ " <constraint toNodeId=\"4\" name=\"toC\" />\n" +
+ " </constraints>\n" +
+ " </state>\n" +
+ " <state id=\"3\" name=\"StateB\" />\n" +
+ " <state id=\"4\" name=\"StateC\" />\n" +
+ " <end id=\"5\" name=\"End\" />\n" +
" </nodes>\n" +
"\n" +
" <connections>\n" +
" <connection from=\"1\" to=\"2\" />\n" +
" <connection from=\"2\" to=\"3\" />\n" +
+ " <connection from=\"2\" to=\"4\" />\n" +
+ " <connection from=\"3\" to=\"2\" />\n" +
+ " <connection from=\"4\" to=\"5\" />\n" +
" </connections>\n" +
"\n" +
"</process>");
@@ -47,14 +61,48 @@
RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
WorkingMemory workingMemory = ruleBase.newStatefulSession();
- ProcessInstance processInstance = ( ProcessInstance )
+ // start process
+ RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance)
workingMemory.startProcess("org.drools.state");
+ // should be in state A
assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
- processInstance.signalEvent("signal", null);
+ Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ StateNodeInstance stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("StateA", stateInstance.getNodeName());
+ // signal "toB" so we move to state B
+ processInstance.signalEvent("signal", "toB");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("StateB", stateInstance.getNodeName());
+ // if no constraint specified for a connection,
+ // we default to the name of the target node
+ // signal "StateA", so we move back to state A
+ processInstance.signalEvent("signal", "StateA");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("StateA", stateInstance.getNodeName());
+ // signal "toC" so we move to state C
+ processInstance.signalEvent("signal", "toC");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("StateC", stateInstance.getNodeName());
+ // signal something completely wrong, this should simply be ignored
+ processInstance.signalEvent("signal", "Invalid");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("StateC", stateInstance.getNodeName());
+ // signal "End", so we move to the end
+ processInstance.signalEvent("signal", "End");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(0, nodeInstances.size());
assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
}
-
public void testImmediateStateConstraint1() {
PackageBuilder builder = new PackageBuilder();
Reader source = new StringReader(
@@ -72,12 +120,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"one\" >\n" +
" eval(true)" +
" </constraint>"+
- " <constraint toNodeId=\"4\" toType=\"DROOLS_DEFAULT\" name=\"two\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"4\" name=\"two\" >\n" +
" eval(false)" +
" </constraint>"+
" </constraints>\n" +
@@ -131,12 +179,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"one\" priority=\"1\" >\n" +
" eval(true)" +
" </constraint>"+
- " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"5\" name=\"two\" priority=\"2\" >\n" +
" eval(true)" +
" </constraint>"+
" </constraints>\n" +
@@ -190,12 +238,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"one\" priority=\"2\" >\n" +
" eval(true)" +
" </constraint>"+
- " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"5\" name=\"two\" priority=\"1\" >\n" +
" eval(true)" +
" </constraint>"+
" </constraints>\n" +
@@ -252,12 +300,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"one\" >\n" +
" Person( age > 21 )" +
" </constraint>"+
- " <constraint toNodeId=\"4\" toType=\"DROOLS_DEFAULT\" name=\"two\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"4\" name=\"two\" >\n" +
" Person( age <= 21 )" +
" </constraint>"+
" </constraints>\n" +
@@ -318,12 +366,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"age > 21\" >\n" +
" Person( age > 21 )" +
" </constraint>"+
- " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"5\" name=\"age <=21 \" >\n" +
" Person( age <= 21 )" +
" </constraint>"+
" </constraints>\n" +
@@ -384,12 +432,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"one\" priority=\"1\" >\n" +
" Person( )" +
" </constraint>"+
- " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"5\" name=\"two\" priority=\"2\" >\n" +
" Person( )" +
" </constraint>"+
" </constraints>\n" +
@@ -450,12 +498,12 @@
"\n" +
" <nodes>\n" +
" <start id=\"1\" name=\"Start\" />\n" +
- " <state id=\"2\" dialect=\"mvel\" >\n" +
+ " <state id=\"2\" >\n" +
" <constraints>\n" +
- " <constraint toNodeId=\"3\" toType=\"DROOLS_DEFAULT\" name=\"one\" priority=\"2\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"3\" name=\"one\" priority=\"2\" >\n" +
" Person( )" +
" </constraint>"+
- " <constraint toNodeId=\"5\" toType=\"DROOLS_DEFAULT\" name=\"two\" priority=\"1\" type=\"rule\" dialect=\"mvel\" >\n" +
+ " <constraint toNodeId=\"5\" name=\"two\" priority=\"1\" >\n" +
" Person( )" +
" </constraint>"+
" </constraints>\n" +
@@ -496,4 +544,158 @@
assertEquals("2", list.get(0));
}
+ public void testActionState() {
+ 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" +
+ " <variables>\n" +
+ " <variable name=\"s\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>a</value>\n" +
+ " </variable>\n" +
+ " </variables>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" name=\"State\" >\n" +
+ " <onEntry>" +
+ " <action type=\"expression\" dialect=\"mvel\" >list.add(\"Action1\" + s);</action>\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"Action2\" + s);</action>\n" +
+ " </onEntry>\n" +
+ " <onExit>\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >list.add(\"Action3\" + s);</action>\n" +
+ " <action type=\"expression\" dialect=\"java\" >list.add(\"Action4\" + s);</action>\n" +
+ " </onExit>\n" +
+ " </state>\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);
+ 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);
+ // start process
+ RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance)
+ workingMemory.startProcess("org.drools.state");
+ // should be in state A
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ StateNodeInstance stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("State", stateInstance.getNodeName());
+ assertEquals(2, list.size());
+ assertTrue(list.contains("Action1a"));
+ assertTrue(list.contains("Action2a"));
+ processInstance.signalEvent("signal", "End");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(0, nodeInstances.size());
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(4, list.size());
+ assertTrue(list.contains("Action3a"));
+ assertTrue(list.contains("Action4a"));
+ }
+
+ public void testTimerState() {
+ 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" +
+ " <variables>\n" +
+ " <variable name=\"s\" >\n" +
+ " <type name=\"org.drools.process.core.datatype.impl.type.StringDataType\" />\n" +
+ " <value>a</value>\n" +
+ " </variable>\n" +
+ " </variables>\n" +
+ " </header>\n" +
+ "\n" +
+ " <nodes>\n" +
+ " <start id=\"1\" name=\"Start\" />\n" +
+ " <state id=\"2\" name=\"State\" >\n" +
+ " <timers>\n" +
+ " <timer id=\"1\" delay=\"1s\" period=\"2s\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >list.add(\"Timer1\" + s);</action>\n" +
+ " </timer>\n" +
+ " <timer id=\"2\" delay=\"1s\" period=\"2s\" >\n" +
+ " <action type=\"expression\" dialect=\"mvel\" >list.add(\"Timer2\" + s);</action>\n" +
+ " </timer>\n" +
+ " </timers>\n" +
+ " </state>\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);
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ final StatefulSession workingMemory = ruleBase.newStatefulSession();
+ List<String> list = new ArrayList<String>();
+ workingMemory.setGlobal("list", list);
+ new Thread(new Runnable() {
+ public void run() {
+ workingMemory.fireUntilHalt();
+ }
+ }).start();
+ // start process
+ RuleFlowProcessInstance processInstance = (RuleFlowProcessInstance)
+ workingMemory.startProcess("org.drools.state");
+ // should be in state A
+ assertEquals(ProcessInstance.STATE_ACTIVE, processInstance.getState());
+ Collection<NodeInstance> nodeInstances = processInstance.getNodeInstances();
+ assertEquals(1, nodeInstances.size());
+ StateNodeInstance stateInstance = (StateNodeInstance) nodeInstances.iterator().next();
+ assertEquals("State", stateInstance.getNodeName());
+ assertEquals(0, list.size());
+ try {
+ Thread.sleep(4000);
+ } catch (InterruptedException e) {
+ }
+ assertEquals(4, list.size());
+ assertTrue(list.contains("Timer1a"));
+ assertTrue(list.contains("Timer2a"));
+ processInstance.signalEvent("signal", "End");
+ nodeInstances = processInstance.getNodeInstances();
+ assertEquals(0, nodeInstances.size());
+ assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getState());
+ assertEquals(4, list.size());
+ try {
+ Thread.sleep(2000);
+ } catch (InterruptedException e) {
+ }
+ assertEquals(4, list.size());
+ workingMemory.halt();
+ }
+
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/DRLContextTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/DRLContextTest.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/lang/DRLContextTest.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -888,6 +888,10 @@
} catch (Exception ex) {
}
+ LinkedList list = parser.getEditorInterface().get(0).getContent();
+ for (Object o: list) {
+ System.out.println(o);
+ }
assertEquals(Location.LOCATION_LHS_INSIDE_CONDITION_START,
getLastIntegerValue(parser.getEditorInterface().get(0)
.getContent()));
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/xml/processes/XMLPersistenceTest.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -479,6 +479,23 @@
stateNode.setMetaData("y", 2);
stateNode.setMetaData("width", 3);
stateNode.setMetaData("height", 4);
+ timer = new Timer();
+ timer.setDelay("100");
+ timer.setPeriod("100");
+ action = new DroolsConsequenceAction("dialect", "consequence");
+ stateNode.addTimer(timer, action);
+ timer = new Timer();
+ timer.setDelay("200");
+ timer.setPeriod("200");
+ action = new DroolsConsequenceAction("dialect", "consequence");
+ stateNode.addTimer(timer, action);
+ actions = new ArrayList<DroolsAction>();
+ action1 = new DroolsConsequenceAction("java", "System.out.println(\"action1\");");
+ actions.add(action1);
+ action2 = new DroolsConsequenceAction("java", "System.out.println(\"action2\");");
+ actions.add(action2);
+ stateNode.setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, actions);
+ stateNode.setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, actions);
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();
@@ -529,7 +546,7 @@
System.out.println(xml2);
-// assertEquals(xml, xml2);
+ assertEquals(xml, xml2);
// test serialization of process elements
new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(process);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/AbstractProcessInstanceMarshaller.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -18,7 +18,6 @@
import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
import org.drools.process.instance.context.variable.VariableScopeInstance;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
import org.drools.runtime.process.NodeInstance;
import org.drools.runtime.process.NodeInstanceContainer;
import org.drools.runtime.process.ProcessInstance;
@@ -31,6 +30,7 @@
import org.drools.workflow.instance.node.JoinInstance;
import org.drools.workflow.instance.node.MilestoneNodeInstance;
import org.drools.workflow.instance.node.RuleSetNodeInstance;
+import org.drools.workflow.instance.node.StateNodeInstance;
import org.drools.workflow.instance.node.SubProcessNodeInstance;
import org.drools.workflow.instance.node.TimerNodeInstance;
import org.drools.workflow.instance.node.WorkItemNodeInstance;
@@ -158,6 +158,16 @@
} else if ( nodeInstance instanceof CompositeContextNodeInstance ) {
stream.writeShort( PersisterEnums.COMPOSITE_NODE_INSTANCE );
CompositeContextNodeInstance compositeNodeInstance = (CompositeContextNodeInstance) nodeInstance;
+ List<Long> timerInstances =
+ ((CompositeContextNodeInstance) nodeInstance).getTimerInstances();
+ if (timerInstances != null) {
+ stream.writeInt(timerInstances.size());
+ for (Long id: timerInstances) {
+ stream.writeLong(id);
+ }
+ } else {
+ stream.writeInt(0);
+ }
VariableScopeInstance variableScopeInstance = (VariableScopeInstance) compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
Map<String, Object> variables = variableScopeInstance.getVariables();
List<String> keys = new ArrayList<String>( variables.keySet() );
@@ -206,6 +216,18 @@
}
}
stream.writeShort( PersisterEnums.END );
+ } else if ( nodeInstance instanceof StateNodeInstance ) {
+ stream.writeShort( PersisterEnums.STATE_NODE_INSTANCE );
+ List<Long> timerInstances =
+ ((StateNodeInstance) nodeInstance).getTimerInstances();
+ if (timerInstances != null) {
+ stream.writeInt(timerInstances.size());
+ for (Long id: timerInstances) {
+ stream.writeLong(id);
+ }
+ } else {
+ stream.writeInt(0);
+ }
} else {
throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
}
@@ -378,10 +400,29 @@
break;
case PersisterEnums.COMPOSITE_NODE_INSTANCE :
nodeInstance = new CompositeContextNodeInstance();
+ nbTimerInstances = stream.readInt();
+ if (nbTimerInstances > 0) {
+ List<Long> timerInstances = new ArrayList<Long>();
+ for (int i = 0; i < nbTimerInstances; i++) {
+ timerInstances.add(stream.readLong());
+ }
+ ((CompositeContextNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances);
+ }
break;
case PersisterEnums.FOR_EACH_NODE_INSTANCE :
nodeInstance = new ForEachNodeInstance();
break;
+ case PersisterEnums.STATE_NODE_INSTANCE :
+ nodeInstance = new StateNodeInstance();
+ nbTimerInstances = stream.readInt();
+ if (nbTimerInstances > 0) {
+ List<Long> timerInstances = new ArrayList<Long>();
+ for (int i = 0; i < nbTimerInstances; i++) {
+ timerInstances.add(stream.readLong());
+ }
+ ((CompositeContextNodeInstance) nodeInstance).internalSetTimerInstances(timerInstances);
+ }
+ break;
default :
throw new IllegalArgumentException( "Unknown node type: " + nodeType );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/PersisterEnums.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -39,5 +39,6 @@
public static final short HUMAN_TASK_NODE_INSTANCE = 27;
public static final short FOR_EACH_NODE_INSTANCE = 28;
public static final short TIMER = 29;
+ public static final short STATE_NODE_INSTANCE = 30;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/impl/ProcessMarshallerRegistry.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -3,36 +3,29 @@
import java.util.HashMap;
import java.util.Map;
-import org.drools.process.instance.impl.ProcessInstanceImpl;
import org.drools.ruleflow.core.RuleFlowProcess;
-import org.drools.ruleflow.instance.RuleFlowProcessInstance;
/**
-* Registry for Process/ProcessMarshaller
-*/
+ * Registry for Process/ProcessMarshaller
+ */
public class ProcessMarshallerRegistry {
public static ProcessMarshallerRegistry INSTANCE = new ProcessMarshallerRegistry();
- private Map<String , ProcessInstanceMarshaller> registry;
+ private Map<String, ProcessInstanceMarshaller> registry;
private ProcessMarshallerRegistry() {
- this.registry = new HashMap<String, ProcessInstanceMarshaller >();
-
- // default logic that used to be in OutPutMarshaller:
- register( RuleFlowProcess.RULEFLOW_TYPE,
- RuleFlowProcessInstanceMarshaller.INSTANCE );
+ this.registry = new HashMap<String, ProcessInstanceMarshaller>();
+ register(RuleFlowProcess.RULEFLOW_TYPE,
+ RuleFlowProcessInstanceMarshaller.INSTANCE);
}
- public void register(String cls,
- ProcessInstanceMarshaller marchaller) {
- this.registry.put(cls, marchaller);
+ public void register(String type, ProcessInstanceMarshaller marchaller) {
+ this.registry.put(type, marchaller);
}
- @SuppressWarnings("unchecked")
public ProcessInstanceMarshaller getMarshaller(String type) {
return this.registry.get(type);
}
-
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/factory/SplitFactory.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -18,9 +18,9 @@
import org.drools.ruleflow.core.RuleFlowNodeContainerFactory;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.NodeContainer;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.ConstraintImpl;
import org.drools.workflow.core.node.Split;
-import org.drools.workflow.core.node.Split.ConnectionRef;
/**
*
@@ -61,7 +61,7 @@
constraintImpl.setDialect(dialect);
constraintImpl.setConstraint(constraint);
constraintImpl.setPriority(priority);
- getSplit().internalSetConstraint(
+ getSplit().addConstraint(
new ConnectionRef(toNodeId, Node.CONNECTION_DEFAULT_TYPE), constraintImpl);
return this;
}
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -237,7 +237,7 @@
}
} else if (node instanceof StateNode) {
final StateNode stateNode = (StateNode) node;
- if (stateNode.getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0 && !acceptsNoIncomingConnections(node)) {
+ if (stateNode.getDefaultIncomingConnections().size() == 0 && !acceptsNoIncomingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"State node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection"));
}
@@ -340,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 && !acceptsNoIncomingConnections(node)) {
+ if (forEachNode.getDefaultIncomingConnections().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 && !acceptsNoOutgoingConnections(node)) {
+ if (forEachNode.getDefaultOutgoingConnections().size() == 0 && !acceptsNoOutgoingConnections(node)) {
errors.add(new ProcessValidationErrorImpl(process,
"ForEach node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection"));
}
@@ -359,11 +359,11 @@
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) {
+ if (dynamicNode.getDefaultIncomingConnections().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) {
+ if (dynamicNode.getDefaultOutgoingConnections().size() == 0) {
errors.add(new ProcessValidationErrorImpl(process,
"Dynamic node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection"));
}
@@ -397,7 +397,7 @@
errors.add(new ProcessValidationErrorImpl(process,
"Event node '" + node.getName() + "' [" + node.getId() + "] should specify an event type"));
}
- if (eventNode.getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).size() == 0) {
+ if (eventNode.getDefaultOutgoingConnections().size() == 0) {
errors.add(new ProcessValidationErrorImpl(process,
"Event node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection"));
}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionRef.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionRef.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConnectionRef.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,37 @@
+package org.drools.workflow.core.impl;
+
+import java.io.Serializable;
+
+public 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;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ConstraintImpl.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -36,8 +36,8 @@
private String name;
private String constraint;
private int priority;
- private String dialect;
- private String type;
+ private String dialect = "mvel";
+ private String type = "rule";
public String getConstraint() {
return this.constraint;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ExtendedNodeImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ExtendedNodeImpl.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/ExtendedNodeImpl.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -8,9 +8,6 @@
public class ExtendedNodeImpl extends NodeImpl {
- // TODO: not all sequence nodes need entry/exit actions or timers,
- // could this be added in a more modular way ?
-
public static final String EVENT_NODE_ENTER = "onEntry";
public static final String EVENT_NODE_EXIT = "onExit";
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/impl/NodeImpl.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -183,6 +183,44 @@
}
}
+ /** Helper method for nodes that have at most one default incoming connection */
+ public Connection getFrom() {
+ final List<Connection> list =
+ getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
+ if (list.size() == 0) {
+ return null;
+ }
+ if (list.size() == 1) {
+ return list.get(0);
+ }
+ throw new IllegalArgumentException(
+ "Trying to retrieve the from connection but multiple connections are present");
+ }
+
+ /** Helper method for nodes that have at most one default outgoing connection */
+ public Connection getTo() {
+ final List<Connection> list =
+ getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
+ if (list.size() == 0) {
+ return null;
+ }
+ if (list.size() == 1) {
+ return list.get(0);
+ }
+ throw new IllegalArgumentException(
+ "Trying to retrieve the to connection but multiple connections are present");
+ }
+
+ /** Helper method for nodes that have multiple default incoming connections */
+ public List<Connection> getDefaultIncomingConnections() {
+ return getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
+ }
+
+ /** Helper method for nodes that have multiple default outgoing connections */
+ public List<Connection> getDefaultOutgoingConnections() {
+ return getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
+ }
+
public NodeContainer getNodeContainer() {
return nodeContainer;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ActionNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ActionNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ActionNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,6 +1,8 @@
package org.drools.workflow.core.node;
+import org.drools.definition.process.Connection;
import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
/*
* Copyright 2005 JBoss Inc
@@ -24,7 +26,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class ActionNode extends SequenceNode {
+public class ActionNode extends ExtendedNodeImpl {
private static final long serialVersionUID = 400L;
@@ -38,4 +40,28 @@
this.action = action;
}
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/CompositeNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/CompositeNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/CompositeNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -17,7 +17,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class CompositeNode extends NodeImpl implements NodeContainer, EventNodeInterface {
+public class CompositeNode extends StateBasedNode implements NodeContainer, EventNodeInterface {
private static final long serialVersionUID = 400L;
@@ -323,7 +323,9 @@
public class NodeAndType implements Serializable {
- private long nodeId;
+ private static final long serialVersionUID = 1L;
+
+ private long nodeId;
private String type;
private transient Node node;
@@ -410,15 +412,6 @@
return inType;
}
- public Connection getTo() {
- final List<Connection> list =
- getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- if (list.size() > 0) {
- return (Connection) list.get(0);
- }
- return null;
- }
-
}
public class CompositeNodeEnd extends NodeImpl {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Constrainable.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Constrainable.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Constrainable.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,10 +1,19 @@
package org.drools.workflow.core.node;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
public interface Constrainable {
- public void addConstraint(String name, Constraint constraint);
+ /**
+ * Adds the given constraint.
+ * In cases where the constraint is associated with a specific connection,
+ * this connection will be identified using a ConnectionRef. In other cases
+ * the ConnectionRef will be null and can be ignored.
+ * @param connection
+ * @param constraint
+ */
+ public void addConstraint(ConnectionRef connection, Constraint constraint);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ConstraintTrigger.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,9 +1,12 @@
package org.drools.workflow.core.node;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
public class ConstraintTrigger extends Trigger implements Constrainable {
+ private static final long serialVersionUID = 4L;
+
private String constraint;
public String getConstraint() {
@@ -14,7 +17,11 @@
this.constraint = constraint;
}
- public void addConstraint(String name, Constraint constraint) {
+ public void addConstraint(ConnectionRef connection, Constraint constraint) {
+ if (connection != null) {
+ throw new IllegalArgumentException(
+ "A constraint trigger only accepts one simple constraint");
+ }
this.constraint = constraint.getConstraint();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EndNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EndNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EndNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -17,14 +17,18 @@
*/
import org.drools.definition.process.Connection;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
/**
* Default implementation of an end node.
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class EndNode extends SequenceNode {
+public class EndNode extends ExtendedNodeImpl {
+ private static final String[] EVENT_TYPES =
+ new String[] { EVENT_NODE_ENTER };
+
private static final long serialVersionUID = 400L;
private boolean terminate = true;
@@ -37,6 +41,22 @@
this.terminate = terminate;
}
+ public String[] getActionTypes() {
+ return EVENT_TYPES;
+ }
+
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
public void validateAddOutgoingConnection(final String type, final Connection connection) {
throw new UnsupportedOperationException(
"An end node does not have an outgoing connection!");
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventBasedNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventBasedNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventBasedNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,39 +0,0 @@
-package org.drools.workflow.core.node;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.drools.process.core.timer.Timer;
-import org.drools.workflow.core.DroolsAction;
-
-public class EventBasedNode extends SequenceNode {
-
- private static final long serialVersionUID = 400L;
-
- private Map<Timer, DroolsAction> timers;
-
- public Map<Timer, DroolsAction> getTimers() {
- return timers;
- }
-
- public void addTimer(Timer timer, DroolsAction action) {
- if (timers == null) {
- timers = new HashMap<Timer, DroolsAction>();
- }
- if (timer.getId() == 0) {
- long id = 0;
- for (Timer t: timers.keySet()) {
- if (t.getId() > id) {
- id = t.getId();
- }
- }
- timer.setId(++id);
- }
- timers.put(timer, action);
- }
-
- public void internalSetTimers(Map<Timer, DroolsAction> timers) {
- this.timers = timers;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/FaultNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,6 +1,7 @@
package org.drools.workflow.core.node;
import org.drools.definition.process.Connection;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
/*
@@ -25,8 +26,11 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class FaultNode extends SequenceNode {
+public class FaultNode extends ExtendedNodeImpl {
+ private static final String[] EVENT_TYPES =
+ new String[] { EVENT_NODE_ENTER };
+
private static final long serialVersionUID = 400L;
private String faultName;
@@ -48,9 +52,29 @@
this.faultName = faultName;
}
+ public String[] getActionTypes() {
+ return EVENT_TYPES;
+ }
+
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
public void validateAddOutgoingConnection(final String type, final Connection connection) {
throw new UnsupportedOperationException(
"A fault node does not have an outgoing connection!");
}
+ public void validateRemoveOutgoingConnection(final String type, final Connection connection) {
+ throw new UnsupportedOperationException(
+ "A fault node does not have an outgoing connection!");
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ForEachNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ForEachNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/ForEachNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -8,6 +8,7 @@
import org.drools.process.core.context.variable.VariableScope;
import org.drools.process.core.datatype.DataType;
import org.drools.workflow.core.impl.ConnectionImpl;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
/*
* Copyright 2005 JBoss Inc
@@ -163,11 +164,11 @@
this.waitForCompletion = waitForCompletion;
}
- public class ForEachSplitNode extends SequenceNode {
+ public class ForEachSplitNode extends ExtendedNodeImpl {
private static final long serialVersionUID = 4L;
}
- public class ForEachJoinNode extends SequenceNode {
+ public class ForEachJoinNode extends ExtendedNodeImpl {
private static final long serialVersionUID = 4L;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Join.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -77,21 +77,7 @@
return n;
}
- public Connection getTo() {
- final List<Connection> list =
- getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- if (list.size() > 0) {
- return (Connection) list.get(0);
- }
- return null;
- }
-
- public List<Connection> getDefaultIncomingConnections() {
- return getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- }
-
- public void validateAddIncomingConnection(final String type,
- final Connection connection) {
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
super.validateAddIncomingConnection(type, connection);
if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
throw new IllegalArgumentException(
@@ -105,7 +91,7 @@
throw new IllegalArgumentException(
"This type of node only accepts default outgoing connection type!");
}
- if (!getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).isEmpty()) {
+ if (getTo() != null) {
throw new IllegalArgumentException(
"This type of node cannot have more than one outgoing connection");
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/MilestoneNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/MilestoneNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/MilestoneNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,6 +1,8 @@
package org.drools.workflow.core.node;
+import org.drools.definition.process.Connection;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
/*
* Copyright 2005 JBoss Inc
@@ -24,15 +26,20 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class MilestoneNode extends EventBasedNode implements Constrainable {
+public class MilestoneNode extends StateBasedNode implements Constrainable {
- private static final long serialVersionUID = 8552568488755348247L;
+ private static final long serialVersionUID = 4L;
- private String constraint;
+ private String constraint;
- public void addConstraint(String name, Constraint constraint) {
+ public void addConstraint(ConnectionRef connection, Constraint constraint) {
+ if (connection != null) {
+ throw new IllegalArgumentException(
+ "A Milestone node only accepts one simple constraint");
+ }
this.constraint = constraint.getConstraint();
}
+
public void setConstraint(String constraint){
this.constraint = constraint;
}
@@ -41,4 +48,28 @@
return this.constraint;
}
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/RuleSetNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/RuleSetNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/RuleSetNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,5 +1,7 @@
package org.drools.workflow.core.node;
+import org.drools.definition.process.Connection;
+
/*
* Copyright 2005 JBoss Inc
*
@@ -22,7 +24,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class RuleSetNode extends EventBasedNode {
+public class RuleSetNode extends StateBasedNode {
private static final long serialVersionUID = 400L;
@@ -36,4 +38,28 @@
return this.ruleFlowGroup;
}
-}
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SequenceNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SequenceNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SequenceNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,60 +0,0 @@
-package org.drools.workflow.core.node;
-
-import java.util.List;
-
-import org.drools.definition.process.Connection;
-import org.drools.workflow.core.impl.ExtendedNodeImpl;
-
-/**
- *
- * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
- */
-public abstract class SequenceNode extends ExtendedNodeImpl {
-
- private static final long serialVersionUID = 4L;
-
- public Connection getFrom() {
- final List<Connection> list =
- getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- if (list.size() > 0) {
- return (Connection) list.get(0);
- }
- return null;
- }
-
- public Connection getTo() {
- final List<Connection> list =
- getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- if (list.size() > 0) {
- return (Connection) list.get(0);
- }
- return null;
- }
-
- public void validateAddIncomingConnection(final String type,
- final Connection connection) {
- super.validateAddIncomingConnection(type, connection);
- if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
- throw new IllegalArgumentException(
- "This type of node only accepts default incoming connection type!");
- }
- if (getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE) != null
- && !getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).isEmpty()) {
- throw new IllegalArgumentException(
- "This type of node cannot have more than one incoming connection!");
- }
- }
-
- public void validateAddOutgoingConnection(final String type, final Connection connection) {
- super.validateAddOutgoingConnection(type, connection);
- if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
- throw new IllegalArgumentException(
- "This type of node only accepts default outgoing connection type!");
- }
- if (getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE) != null
- && !getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE).isEmpty()) {
- throw new IllegalArgumentException(
- "This type of node cannot have more than one outgoing connection!");
- }
- }
-}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Split.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -16,7 +16,6 @@
* limitations under the License.
*/
-import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -24,6 +23,7 @@
import org.drools.definition.process.Connection;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.impl.NodeImpl;
/**
@@ -31,7 +31,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class Split extends NodeImpl {
+public class Split extends NodeImpl implements Constrainable {
public static final int TYPE_UNDEFINED = 0;
/**
@@ -101,11 +101,10 @@
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)) {
+ if (!getDefaultOutgoingConnections().contains(connection)) {
throw new IllegalArgumentException("connection is unknown:" + connection);
}
- internalSetConstraint(
+ addConstraint(
new ConnectionRef(connection.getTo().getId(), connection.getToType()),
constraint);
} else {
@@ -113,7 +112,11 @@
}
}
- public void internalSetConstraint(ConnectionRef connectionRef, Constraint constraint) {
+ public void addConstraint(ConnectionRef connectionRef, Constraint constraint) {
+ if (connectionRef == null) {
+ throw new IllegalArgumentException(
+ "A split node only accepts constraints linked to a connection");
+ }
this.constraints.put(connectionRef, constraint);
}
@@ -121,21 +124,7 @@
return Collections.unmodifiableMap( this.constraints );
}
- public Connection getFrom() {
- final List<Connection> list =
- getIncomingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- if (list.size() > 0) {
- return (Connection) list.get(0);
- }
- return null;
- }
-
- public List<Connection> getDefaultOutgoingConnections() {
- return getOutgoingConnections(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE);
- }
-
- public void validateAddIncomingConnection(final String type,
- final Connection connection) {
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
super.validateAddIncomingConnection(type, connection);
if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
throw new IllegalArgumentException(
@@ -169,37 +158,4 @@
this.constraints.remove(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/core/node/StartNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StartNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StartNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -20,14 +20,18 @@
import java.util.List;
import org.drools.definition.process.Connection;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
/**
* Default implementation of a start node.
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class StartNode extends SequenceNode {
+public class StartNode extends ExtendedNodeImpl {
+ private static final String[] EVENT_TYPES =
+ new String[] { EVENT_NODE_EXIT };
+
private static final long serialVersionUID = 400L;
private List<Trigger> triggers;
@@ -53,6 +57,10 @@
this.triggers = triggers;
}
+ public String[] getActionTypes() {
+ return EVENT_TYPES;
+ }
+
public void validateAddIncomingConnection(final String type, final Connection connection) {
throw new UnsupportedOperationException(
"A start node does not have an incoming connection!");
@@ -63,4 +71,16 @@
"A start node does not have an incoming connection!");
}
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
}
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateBasedNode.java (from rev 26918, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/EventBasedNode.java)
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateBasedNode.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateBasedNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,42 @@
+package org.drools.workflow.core.node;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.process.core.timer.Timer;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
+
+public class StateBasedNode extends ExtendedNodeImpl {
+
+ private static final long serialVersionUID = 400L;
+
+ private Map<Timer, DroolsAction> timers;
+
+ public Map<Timer, DroolsAction> getTimers() {
+ return timers;
+ }
+
+ public void addTimer(Timer timer, DroolsAction action) {
+ if (timers == null) {
+ timers = new HashMap<Timer, DroolsAction>();
+ }
+ if (timer.getId() == 0) {
+ long id = 0;
+ for (Timer t: timers.keySet()) {
+ if (t.getId() > id) {
+ id = t.getId();
+ }
+ }
+ timer.setId(++id);
+ }
+ timers.put(timer, action);
+ }
+
+ public void removeAllTimers() {
+ if (timers != null) {
+ timers.clear();
+ }
+ }
+
+}
\ No newline at end of file
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateBasedNode.java
___________________________________________________________________
Name: svn:mergeinfo
+
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/StateNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,37 +1,38 @@
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.impl.ConnectionRef;
-public class StateNode extends CompositeContextNode {
+public class StateNode extends CompositeContextNode implements Constrainable {
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<ConnectionRef, Constraint> constraints) {
this.constraints = constraints;
}
- public void setConstraint(final Connection connection,
- final Constraint 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)) {
+ if (!getDefaultOutgoingConnections().contains(connection)) {
throw new IllegalArgumentException("connection is unknown:" + connection);
}
- internalSetConstraint(
- new ConnectionRef(connection.getTo().getId(), connection.getToType()), constraint);
+ addConstraint(new ConnectionRef(
+ connection.getTo().getId(), connection.getToType()), constraint);
}
- public void internalSetConstraint(ConnectionRef connectionRef, Constraint constraint) {
+ public void addConstraint(ConnectionRef connectionRef, Constraint constraint) {
+ if (connectionRef == null) {
+ throw new IllegalArgumentException(
+ "A state node only accepts constraints linked to a connection");
+ }
constraints.put(connectionRef, constraint);
}
@@ -51,37 +52,4 @@
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/core/node/SubProcessNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SubProcessNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/SubProcessNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -4,6 +4,7 @@
import java.util.HashMap;
import java.util.Map;
+import org.drools.definition.process.Connection;
import org.drools.process.core.context.variable.Mappable;
/*
@@ -28,7 +29,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class SubProcessNode extends EventBasedNode implements Mappable {
+public class SubProcessNode extends StateBasedNode implements Mappable {
private static final long serialVersionUID = 400L;
@@ -94,4 +95,28 @@
this.independent = independent;
}
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/TimerNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/TimerNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/TimerNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,8 +1,10 @@
package org.drools.workflow.core.node;
+import org.drools.definition.process.Connection;
import org.drools.process.core.timer.Timer;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
-public class TimerNode extends SequenceNode {
+public class TimerNode extends ExtendedNodeImpl {
private static final long serialVersionUID = 400L;
@@ -16,4 +18,28 @@
return this.timer;
}
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Trigger.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Trigger.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/Trigger.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -9,7 +9,9 @@
public class Trigger implements Mappable, Serializable {
- private Map<String, String> inMapping = new HashMap<String, String>();
+ private static final long serialVersionUID = 4L;
+
+ private Map<String, String> inMapping = new HashMap<String, String>();
public void addInMapping(String subVariableName, String variableName) {
inMapping.put(subVariableName, variableName);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/WorkItemNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -20,6 +20,7 @@
import java.util.HashMap;
import java.util.Map;
+import org.drools.definition.process.Connection;
import org.drools.process.core.Work;
import org.drools.process.core.context.variable.Mappable;
@@ -28,7 +29,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class WorkItemNode extends EventBasedNode implements Mappable {
+public class WorkItemNode extends StateBasedNode implements Mappable {
private static final long serialVersionUID = 400L;
@@ -86,4 +87,28 @@
this.waitForCompletion = waitForCompletion;
}
+ public void validateAddIncomingConnection(final String type, final Connection connection) {
+ super.validateAddIncomingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default incoming connection type!");
+ }
+ if (getFrom() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one incoming connection!");
+ }
+ }
+
+ public void validateAddOutgoingConnection(final String type, final Connection connection) {
+ super.validateAddOutgoingConnection(type, connection);
+ if (!org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE.equals(type)) {
+ throw new IllegalArgumentException(
+ "This type of node only accepts default outgoing connection type!");
+ }
+ if (getTo() != null) {
+ throw new IllegalArgumentException(
+ "This type of node cannot have more than one outgoing connection!");
+ }
+ }
+
}
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/impl/WorkflowProcessInstanceImpl.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -42,7 +42,7 @@
import org.drools.workflow.core.node.EventNodeInterface;
import org.drools.workflow.instance.NodeInstance;
import org.drools.workflow.instance.WorkflowProcessInstance;
-import org.drools.workflow.instance.node.EventBasedNodeInstance;
+import org.drools.workflow.instance.node.StateBasedNodeInstance;
import org.drools.workflow.instance.node.EventBasedNodeInstanceInterface;
import org.drools.workflow.instance.node.EventNodeInstance;
import org.drools.workflow.instance.node.EventNodeInstanceInterface;
@@ -195,8 +195,8 @@
public void disconnect() {
removeEventListeners();
for (NodeInstance nodeInstance : nodeInstances) {
- if (nodeInstance instanceof EventBasedNodeInstance) {
- ((EventBasedNodeInstance) nodeInstance).removeEventListeners();
+ if (nodeInstance instanceof StateBasedNodeInstance) {
+ ((StateBasedNodeInstance) nodeInstance).removeEventListeners();
}
}
super.disconnect();
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/CompositeNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -34,6 +34,7 @@
import org.drools.workflow.instance.NodeInstance;
import org.drools.workflow.instance.NodeInstanceContainer;
import org.drools.workflow.instance.WorkflowProcessInstance;
+import org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl;
import org.drools.workflow.instance.impl.NodeInstanceFactory;
import org.drools.workflow.instance.impl.NodeInstanceFactoryRegistry;
import org.drools.workflow.instance.impl.NodeInstanceImpl;
@@ -43,7 +44,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class CompositeNodeInstance extends NodeInstanceImpl implements NodeInstanceContainer, EventNodeInstanceInterface, EventBasedNodeInstanceInterface {
+public class CompositeNodeInstance extends StateBasedNodeInstance implements NodeInstanceContainer, EventNodeInstanceInterface, EventBasedNodeInstanceInterface {
private static final long serialVersionUID = 400L;
@@ -81,21 +82,30 @@
}
public void internalTrigger(final org.drools.runtime.process.NodeInstance from, String type) {
+ super.internalTrigger(from, type);
CompositeNode.NodeAndType nodeAndType = getCompositeNode().internalGetLinkedIncomingNode(type);
- List<Connection> connections = nodeAndType.getNode().getIncomingConnections(nodeAndType.getType());
- for (Iterator<Connection> iterator = connections.iterator(); iterator.hasNext(); ) {
- Connection connection = iterator.next();
- if ((connection.getFrom() instanceof CompositeNode.CompositeNodeStart) &&
- (from == null ||
- ((CompositeNode.CompositeNodeStart) connection.getFrom()).getInNode().getId() == from.getNodeId())) {
- NodeInstance nodeInstance = getNodeInstance(connection.getFrom());
- ((org.drools.workflow.instance.NodeInstance) nodeInstance).trigger(null, nodeAndType.getType());
- return;
- }
+ if (nodeAndType != null) {
+ List<Connection> connections = nodeAndType.getNode().getIncomingConnections(nodeAndType.getType());
+ for (Iterator<Connection> iterator = connections.iterator(); iterator.hasNext(); ) {
+ Connection connection = iterator.next();
+ if ((connection.getFrom() instanceof CompositeNode.CompositeNodeStart) &&
+ (from == null ||
+ ((CompositeNode.CompositeNodeStart) connection.getFrom()).getInNode().getId() == from.getNodeId())) {
+ NodeInstance nodeInstance = getNodeInstance(connection.getFrom());
+ ((org.drools.workflow.instance.NodeInstance) nodeInstance).trigger(null, nodeAndType.getType());
+ return;
+ }
+ }
}
- throw new IllegalArgumentException(
- "Could not find start for composite node: " + type);
+ if (isLinkedIncomingNodeRequired()) {
+ throw new IllegalArgumentException(
+ "Could not find start for composite node: " + type);
+ }
}
+
+ protected boolean isLinkedIncomingNodeRequired() {
+ return true;
+ }
public void triggerCompleted(String outType) {
triggerCompleted(outType, true);
@@ -182,6 +192,7 @@
}
public void signalEvent(String type, Object event) {
+ super.signalEvent(type, event);
for (Node node: getCompositeNode().getNodes()) {
if (node instanceof EventNodeInterface) {
if (((EventNodeInterface) node).acceptsEvent(type, event)) {
Modified: 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 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/DynamicNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -35,6 +35,8 @@
}
public void nodeInstanceCompleted(org.drools.workflow.instance.NodeInstance nodeInstance, String outType) {
+ // TODO what if we reach the end of one branch but others might still need to be created ?
+ // TODO are we sure there will always be node instances left if we are not done yet?
if (!executing && getNodeInstances(false).isEmpty()) {
triggerCompleted(NodeImpl.CONNECTION_DEFAULT_TYPE);
}
Deleted: 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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/EventBasedNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,128 +0,0 @@
-package org.drools.workflow.instance.node;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.drools.process.core.timer.Timer;
-import org.drools.process.instance.ProcessInstance;
-import org.drools.process.instance.timer.TimerInstance;
-import org.drools.process.instance.timer.TimerManager;
-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;
-import org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl;
-
-public abstract class EventBasedNodeInstance extends ExtendedNodeInstanceImpl implements EventBasedNodeInstanceInterface, EventListener {
-
- private static final long serialVersionUID = 4L;
-
- private List<Long> timerInstances;
-
- public EventBasedNode getEventBasedNode() {
- return (EventBasedNode) getNode();
- }
-
- public void internalTrigger(NodeInstance from, String type) {
- super.internalTrigger(from, type);
- // activate timers
- Map<Timer, DroolsAction> timers = getEventBasedNode().getTimers();
- if (timers != null) {
- addTimerListener();
- timerInstances = new ArrayList<Long>(timers.size());
- TimerManager timerManager = ((ProcessInstance) getProcessInstance()).getWorkingMemory().getTimerManager();
- for (Timer timer: timers.keySet()) {
- TimerInstance timerInstance = createTimerInstance(timer);
- timerManager.registerTimer(timerInstance, (ProcessInstance) getProcessInstance());
- timerInstances.add(timerInstance.getId());
- }
- }
- }
-
- protected TimerInstance createTimerInstance(Timer timer) {
- TimerInstance timerInstance = new TimerInstance();
- 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;
- }
-
- public void signalEvent(String type, Object event) {
- if ("timerTriggered".equals(type)) {
- TimerInstance timerInstance = (TimerInstance) event;
- if (timerInstances.contains(timerInstance.getId())) {
- triggerTimer(timerInstance);
- }
- }
- }
-
- private void triggerTimer(TimerInstance timerInstance) {
- for (Map.Entry<Timer, DroolsAction> entry: getEventBasedNode().getTimers().entrySet()) {
- if (entry.getKey().getId() == timerInstance.getTimerId()) {
- KnowledgeHelper knowledgeHelper = createKnowledgeHelper();
- executeAction(entry.getValue(), knowledgeHelper);
- return;
- }
- }
- }
-
- public String[] getEventTypes() {
- return new String[] { "timerTriggered" };
- }
-
- public void triggerCompleted() {
- triggerCompleted(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE, true);
- }
-
- public void addEventListeners() {
- if (timerInstances != null && timerInstances.size() > 0) {
- addTimerListener();
- }
- }
-
- protected void addTimerListener() {
- ((WorkflowProcessInstance) getProcessInstance()).addEventListener("timerTriggered", this, false);
- }
-
- public void removeEventListeners() {
- ((WorkflowProcessInstance) getProcessInstance()).removeEventListener("timerTriggered", this, false);
- }
-
- protected void triggerCompleted(String type, boolean remove) {
- cancelTimers();
- super.triggerCompleted(type, remove);
- }
-
- public List<Long> getTimerInstances() {
- return timerInstances;
- }
-
- public void internalSetTimerInstances(List<Long> timerInstances) {
- this.timerInstances = timerInstances;
- }
-
- public void cancel() {
- cancelTimers();
- removeEventListeners();
- super.cancel();
- }
-
- private void cancelTimers() {
- // deactivate still active timers
- if (timerInstances != null) {
- TimerManager timerManager = ((ProcessInstance) getProcessInstance()).getWorkingMemory().getTimerManager();
- for (Long id: timerInstances) {
- timerManager.cancelTimer(id);
- }
- }
- }
-
-}
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/MilestoneNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -41,7 +41,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class MilestoneNodeInstance extends EventBasedNodeInstance implements AgendaEventListener {
+public class MilestoneNodeInstance extends StateBasedNodeInstance implements AgendaEventListener {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/RuleSetNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -27,7 +27,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class RuleSetNodeInstance extends EventBasedNodeInstance
+public class RuleSetNodeInstance extends StateBasedNodeInstance
implements
RuleFlowGroupListener {
Copied: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateBasedNodeInstance.java (from rev 26931, 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/StateBasedNodeInstance.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateBasedNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,128 @@
+package org.drools.workflow.instance.node;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.process.core.timer.Timer;
+import org.drools.process.instance.ProcessInstance;
+import org.drools.process.instance.timer.TimerInstance;
+import org.drools.process.instance.timer.TimerManager;
+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.StateBasedNode;
+import org.drools.workflow.instance.WorkflowProcessInstance;
+import org.drools.workflow.instance.impl.ExtendedNodeInstanceImpl;
+
+public abstract class StateBasedNodeInstance extends ExtendedNodeInstanceImpl implements EventBasedNodeInstanceInterface, EventListener {
+
+ private static final long serialVersionUID = 4L;
+
+ private List<Long> timerInstances;
+
+ public StateBasedNode getEventBasedNode() {
+ return (StateBasedNode) getNode();
+ }
+
+ public void internalTrigger(NodeInstance from, String type) {
+ super.internalTrigger(from, type);
+ // activate timers
+ Map<Timer, DroolsAction> timers = getEventBasedNode().getTimers();
+ if (timers != null) {
+ addTimerListener();
+ timerInstances = new ArrayList<Long>(timers.size());
+ TimerManager timerManager = ((ProcessInstance) getProcessInstance()).getWorkingMemory().getTimerManager();
+ for (Timer timer: timers.keySet()) {
+ TimerInstance timerInstance = createTimerInstance(timer);
+ timerManager.registerTimer(timerInstance, (ProcessInstance) getProcessInstance());
+ timerInstances.add(timerInstance.getId());
+ }
+ }
+ }
+
+ protected TimerInstance createTimerInstance(Timer timer) {
+ TimerInstance timerInstance = new TimerInstance();
+ 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;
+ }
+
+ public void signalEvent(String type, Object event) {
+ if ("timerTriggered".equals(type)) {
+ TimerInstance timerInstance = (TimerInstance) event;
+ if (timerInstances.contains(timerInstance.getId())) {
+ triggerTimer(timerInstance);
+ }
+ }
+ }
+
+ private void triggerTimer(TimerInstance timerInstance) {
+ for (Map.Entry<Timer, DroolsAction> entry: getEventBasedNode().getTimers().entrySet()) {
+ if (entry.getKey().getId() == timerInstance.getTimerId()) {
+ KnowledgeHelper knowledgeHelper = createKnowledgeHelper();
+ executeAction(entry.getValue(), knowledgeHelper);
+ return;
+ }
+ }
+ }
+
+ public String[] getEventTypes() {
+ return new String[] { "timerTriggered" };
+ }
+
+ public void triggerCompleted() {
+ triggerCompleted(org.drools.workflow.core.Node.CONNECTION_DEFAULT_TYPE, true);
+ }
+
+ public void addEventListeners() {
+ if (timerInstances != null && timerInstances.size() > 0) {
+ addTimerListener();
+ }
+ }
+
+ protected void addTimerListener() {
+ ((WorkflowProcessInstance) getProcessInstance()).addEventListener("timerTriggered", this, false);
+ }
+
+ public void removeEventListeners() {
+ ((WorkflowProcessInstance) getProcessInstance()).removeEventListener("timerTriggered", this, false);
+ }
+
+ protected void triggerCompleted(String type, boolean remove) {
+ cancelTimers();
+ super.triggerCompleted(type, remove);
+ }
+
+ public List<Long> getTimerInstances() {
+ return timerInstances;
+ }
+
+ public void internalSetTimerInstances(List<Long> timerInstances) {
+ this.timerInstances = timerInstances;
+ }
+
+ public void cancel() {
+ cancelTimers();
+ removeEventListeners();
+ super.cancel();
+ }
+
+ private void cancelTimers() {
+ // deactivate still active timers
+ if (timerInstances != null) {
+ TimerManager timerManager = ((ProcessInstance) getProcessInstance()).getWorkingMemory().getTimerManager();
+ for (Long id: timerInstances) {
+ timerManager.cancelTimer(id);
+ }
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateBasedNodeInstance.java
___________________________________________________________________
Name: svn:mergeinfo
+
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/StateNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -21,6 +21,7 @@
import org.drools.runtime.process.NodeInstance;
import org.drools.spi.Activation;
import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
import org.drools.workflow.core.impl.NodeImpl;
import org.drools.workflow.core.node.StateNode;
import org.drools.workflow.instance.NodeInstanceContainer;
@@ -34,6 +35,7 @@
}
public void internalTrigger(NodeInstance from, String type) {
+ super.internalTrigger(from, type);
// TODO: composite states trigger
StateNode stateNode = getStateNode();
Connection selected = null;
@@ -62,14 +64,33 @@
}
}
+ protected boolean isLinkedIncomingNodeRequired() {
+ return false;
+ }
+
public void signalEvent(String type, Object event) {
if ("signal".equals(type)) {
- String connectionType = NodeImpl.CONNECTION_DEFAULT_TYPE;
if (event instanceof String) {
- connectionType = (String) event;
+ for (Connection connection: getStateNode().getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
+ boolean selected = false;
+ Constraint constraint = getStateNode().getConstraint(connection);
+ if (constraint == null) {
+ if (((String) event).equals(connection.getTo().getName())) {
+ selected = true;
+ }
+ } else if (((String) event).equals(constraint.getName())) {
+ selected = true;
+ }
+ if (selected) {
+ triggerEvent(ExtendedNodeImpl.EVENT_NODE_EXIT);
+ removeEventListeners();
+ ((org.drools.workflow.instance.NodeInstanceContainer) getNodeInstanceContainer())
+ .removeNodeInstance(this);
+ triggerConnection(connection);
+ return;
+ }
+ }
}
- removeEventListeners();
- triggerCompleted(connectionType, true);
} else {
super.signalEvent(type, event);
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/SubProcessNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -38,7 +38,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class SubProcessNodeInstance extends EventBasedNodeInstance implements EventListener {
+public class SubProcessNodeInstance extends StateBasedNodeInstance implements EventListener {
private static final long serialVersionUID = 400L;
private static final Pattern PARAMETER_MATCHER = Pattern.compile("#\\{(\\S+)\\}", Pattern.DOTALL);
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/TimerNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -9,7 +9,7 @@
import org.drools.workflow.core.node.TimerNode;
import org.drools.workflow.instance.WorkflowProcessInstance;
-public class TimerNodeInstance extends EventBasedNodeInstance implements EventListener {
+public class TimerNodeInstance extends StateBasedNodeInstance implements EventListener {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/instance/node/WorkItemNodeInstance.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -43,7 +43,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class WorkItemNodeInstance extends EventBasedNodeInstance implements EventListener {
+public class WorkItemNodeInstance extends StateBasedNodeInstance implements EventListener {
private static final long serialVersionUID = 400L;
private static final Pattern PARAMETER_MATCHER = Pattern.compile("#\\{(\\S+)\\}", Pattern.DOTALL);
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNode.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/workflow/instance/node/MockNode.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,8 +1,8 @@
package org.drools.workflow.instance.node;
-import org.drools.workflow.core.node.SequenceNode;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
-public class MockNode extends SequenceNode {
+public class MockNode extends ExtendedNodeImpl {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/DefaultElementWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -41,17 +41,20 @@
*/
public abstract class DefaultElementWrapper implements ElementWrapper, IPropertySource, Serializable {
+ private static final long serialVersionUID = 4L;
+
private static boolean allowNodeCustomization =
- DroolsEclipsePlugin.getDefault().getPreferenceStore().getBoolean(IDroolsConstants.ALLOW_NODE_CUSTOMIZATION);
+ DroolsEclipsePlugin.getDefault().getPreferenceStore().getBoolean(
+ IDroolsConstants.ALLOW_NODE_CUSTOMIZATION);
- protected static IPropertyDescriptor[] descriptors;
+ protected static IPropertyDescriptor[] DESCRIPTORS;
public static final String NAME = "Name";
public static final String ID = "Id";
public static final String COLOR = "Color";
static {
if (allowNodeCustomization) {
- descriptors = new IPropertyDescriptor[] {
+ DESCRIPTORS = new IPropertyDescriptor[] {
new TextPropertyDescriptor(NAME, "Name"),
new TextPropertyDescriptor(ID, "Id") {
public CellEditor createPropertyEditor(Composite parent) {
@@ -61,7 +64,7 @@
new ColorPropertyDescriptor(COLOR, "Color"),
};
} else {
- descriptors = new IPropertyDescriptor[] {
+ DESCRIPTORS = new IPropertyDescriptor[] {
new TextPropertyDescriptor(NAME, "Name"),
new TextPropertyDescriptor(ID, "Id") {
public CellEditor createPropertyEditor(Composite parent) {
@@ -215,7 +218,7 @@
}
public IPropertyDescriptor[] getPropertyDescriptors() {
- return descriptors;
+ return DESCRIPTORS;
}
public Object getEditableValue() {
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/common/editor/core/ElementContainerElementWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -5,9 +5,11 @@
public abstract class ElementContainerElementWrapper extends DefaultElementWrapper implements ElementContainer {
- public static final int ADD_ELEMENT = 5;
+ public static final int ADD_ELEMENT = 5;
public static final int REMOVE_ELEMENT = 6;
+ private static final long serialVersionUID = 4L;
+
List<ElementWrapper> elements = new ArrayList<ElementWrapper>();
public void addElement(ElementWrapper element) {
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ActionWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -43,8 +43,8 @@
}
private void setDescriptors() {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 1];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 1] =
new ActionPropertyDescriptor(ACTION, "Action", getActionNode(), (WorkflowProcess) getParent().getProcessWrapper().getProcess());
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeContextNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeContextNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeContextNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -48,8 +48,8 @@
}
private void initPropertyDescriptors() {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 4];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 4];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 4] =
new TextPropertyDescriptor(START_NODE, "StartNodeId");
descriptors[descriptors.length - 3] =
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/CompositeNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,17 +1,35 @@
package org.drools.eclipse.flow.ruleflow.core;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
import org.drools.eclipse.flow.common.editor.core.ElementConnection;
import org.drools.eclipse.flow.common.editor.core.ElementContainerElementWrapper;
import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.eclipse.flow.ruleflow.view.property.action.OnEntryActionsPropertyDescriptor;
+import org.drools.eclipse.flow.ruleflow.view.property.action.OnExitActionsPropertyDescriptor;
+import org.drools.eclipse.flow.ruleflow.view.property.timers.TimersPropertyDescriptor;
+import org.drools.process.core.timer.Timer;
+import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.Node;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.ExtendedNodeImpl;
import org.drools.workflow.core.node.CompositeNode;
import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
public abstract class CompositeNodeWrapper extends ElementContainerElementWrapper implements NodeWrapper {
- private static final long serialVersionUID = 400L;
+ public static final String ON_ENTRY_ACTIONS = "OnEntryActions";
+ public static final String ON_EXIT_ACTIONS = "OnExitActions";
+ public static final String TIMERS = "Timers";
+
+ protected IPropertyDescriptor[] descriptors;
- public void setNode(Node node) {
+ private static final long serialVersionUID = 4L;
+
+ public void setNode(Node node) {
setElement(node);
}
@@ -80,4 +98,68 @@
getCompositeNode().removeNode(((NodeWrapper) element).getNode());
}
+ public IPropertyDescriptor[] getPropertyDescriptors() {
+ if (descriptors == null) {
+ initDescriptors();
+ }
+ return descriptors;
+ }
+
+ protected void initDescriptors() {
+ IPropertyDescriptor[] oldDescriptors = DefaultElementWrapper.DESCRIPTORS;
+ descriptors = new IPropertyDescriptor[oldDescriptors.length + 3];
+ System.arraycopy(oldDescriptors, 0, descriptors, 0, oldDescriptors.length);
+ descriptors[descriptors.length - 3] = new OnEntryActionsPropertyDescriptor(
+ ON_ENTRY_ACTIONS, "On Entry Actions", getCompositeNode(),
+ (WorkflowProcess) getParent().getProcessWrapper().getProcess());
+ descriptors[descriptors.length - 2] = new OnExitActionsPropertyDescriptor(
+ ON_EXIT_ACTIONS, "On Exit Actions", getCompositeNode(),
+ (WorkflowProcess) getParent().getProcessWrapper().getProcess());
+ descriptors[descriptors.length - 1] =
+ new TimersPropertyDescriptor(TIMERS, "Timers", getCompositeNode(),
+ (WorkflowProcess) getParent().getProcessWrapper().getProcess());
+ }
+
+ public Object getPropertyValue(Object id) {
+ if (ON_ENTRY_ACTIONS.equals(id)) {
+ return getCompositeNode().getActions(ExtendedNodeImpl.EVENT_NODE_ENTER);
+ }
+ if (ON_EXIT_ACTIONS.equals(id)) {
+ return getCompositeNode().getActions(ExtendedNodeImpl.EVENT_NODE_EXIT);
+ }
+ if (TIMERS.equals(id)) {
+ return getCompositeNode().getTimers();
+ }
+ return super.getPropertyValue(id);
+ }
+
+ public void resetPropertyValue(Object id) {
+ if (ON_ENTRY_ACTIONS.equals(id)) {
+ getCompositeNode().setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, null);
+ } else if (ON_EXIT_ACTIONS.equals(id)) {
+ getCompositeNode().setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, null);
+ } else if (TIMERS.equals(id)) {
+ getCompositeNode().removeAllTimers();
+ } else {
+ super.resetPropertyValue(id);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void setPropertyValue(Object id, Object value) {
+ if (ON_ENTRY_ACTIONS.equals(id)) {
+ getCompositeNode().setActions(ExtendedNodeImpl.EVENT_NODE_ENTER, (List<DroolsAction>) value);
+ } else if (ON_EXIT_ACTIONS.equals(id)) {
+ getCompositeNode().setActions(ExtendedNodeImpl.EVENT_NODE_EXIT, (List<DroolsAction>) value);
+ } else if (TIMERS.equals(id)) {
+ getCompositeNode().removeAllTimers();
+ // adding one by one so the ids are set correctly
+ for (Map.Entry<Timer, DroolsAction> entry: ((Map<Timer, DroolsAction>) value).entrySet()) {
+ getCompositeNode().addTimer(entry.getKey(), entry.getValue());
+ }
+ } else {
+ super.setPropertyValue(id, value);
+ }
+ }
+
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EndNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -35,8 +35,8 @@
private static IPropertyDescriptor[] descriptors;
static {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 1];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 1] =
new ComboBoxPropertyDescriptor(TERMINATE, "Terminate", new String[] { "true", "false" });
}
Deleted: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventBasedNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventBasedNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventBasedNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,64 +0,0 @@
-package org.drools.eclipse.flow.ruleflow.core;
-
-import java.util.Map;
-
-import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
-import org.drools.eclipse.flow.ruleflow.view.property.timers.TimersPropertyDescriptor;
-import org.drools.process.core.timer.Timer;
-import org.drools.workflow.core.DroolsAction;
-import org.drools.workflow.core.WorkflowProcess;
-import org.drools.workflow.core.node.EventBasedNode;
-import org.eclipse.ui.views.properties.IPropertyDescriptor;
-
-public class EventBasedNodeWrapper extends ExtendedNodeWrapper {
-
- public static final String TIMERS = "Timers";
-
- private static final long serialVersionUID = 1L;
-
- protected IPropertyDescriptor[] descriptors;
-
- public EventBasedNode getEventBasedNode() {
- return (EventBasedNode) getNode();
- }
-
- protected void initDescriptors() {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
- descriptors[descriptors.length - 1] =
- new TimersPropertyDescriptor(TIMERS, "Timers", getEventBasedNode(),
- (WorkflowProcess) getParent().getProcessWrapper().getProcess());
- }
-
- public IPropertyDescriptor[] getPropertyDescriptors() {
- if (descriptors == null) {
- initDescriptors();
- }
- return descriptors;
- }
-
- public Object getPropertyValue(Object id) {
- if (TIMERS.equals(id)) {
- return getEventBasedNode().getTimers();
- }
- return super.getPropertyValue(id);
- }
-
- public void resetPropertyValue(Object id) {
- if (TIMERS.equals(id)) {
- getEventBasedNode().internalSetTimers(null);
- } else {
- super.resetPropertyValue(id);
- }
- }
-
- @SuppressWarnings("unchecked")
- public void setPropertyValue(Object id, Object value) {
- if (TIMERS.equals(id)) {
- getEventBasedNode().internalSetTimers((Map<Timer, DroolsAction>) value);
- } else {
- super.setPropertyValue(id, value);
- }
- }
-
-}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -42,8 +42,8 @@
public static final String EVENT_TYPE = "eventType";
public static final String SCOPE = "scope";
static {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 3];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 3];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 3] =
new ComboBoxPropertyDescriptor(SCOPE, "Scope", new String[] { "internal", "external" });
descriptors[descriptors.length - 2] =
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/FaultNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/FaultNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/FaultNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -35,8 +35,8 @@
private static final long serialVersionUID = 4L;
private static IPropertyDescriptor[] descriptors;
static {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 2];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 2];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 2] =
new TextPropertyDescriptor(FAULT_NAME, "FaultName");
descriptors[descriptors.length - 1] =
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ForEachNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ForEachNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/ForEachNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -21,8 +21,8 @@
private static IPropertyDescriptor[] descriptors;
static {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 4];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 4];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 4] =
new TextPropertyDescriptor(VARIABLE_NAME, "Variable Name");
descriptors[descriptors.length - 3] =
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/JoinWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -54,8 +54,8 @@
}
private void setDescriptors() {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 1];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 1] =
new ComboBoxPropertyDescriptor(TYPE, "Type", new String[] { "", "AND", "XOR", "Discriminator", "n-of-m" });
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/MilestoneWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -27,7 +27,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class MilestoneWrapper extends EventBasedNodeWrapper {
+public class MilestoneWrapper extends StateBasedNodeWrapper {
public static final String CONSTRAINT = "Constraint";
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleFlowWrapperBuilder.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -7,13 +7,13 @@
import java.util.Map;
import java.util.Set;
+import org.drools.definition.process.Connection;
+import org.drools.definition.process.Node;
+import org.drools.definition.process.Process;
import org.drools.eclipse.WorkItemDefinitions;
import org.drools.eclipse.flow.common.editor.core.ElementContainer;
import org.drools.eclipse.flow.common.editor.core.ProcessWrapper;
import org.drools.eclipse.flow.common.editor.core.ProcessWrapperBuilder;
-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.WorkDefinition;
import org.drools.process.core.impl.WorkDefinitionImpl;
@@ -31,11 +31,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.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jface.dialogs.MessageDialog;
public class RuleFlowWrapperBuilder implements ProcessWrapperBuilder {
@@ -76,7 +76,9 @@
for (Node subNode: ((CompositeNode) node).getNodes()) {
subNodes.add(subNode);
}
- processNodes(subNodes, new HashSet<Connection>(), (CompositeNodeWrapper) nodeWrapper, project);
+ if (subNodes.size() > 0) {
+ processNodes(subNodes, new HashSet<Connection>(), (CompositeNodeWrapper) nodeWrapper, project);
+ }
}
}
for (Connection connection: connections) {
@@ -107,6 +109,8 @@
return new SubProcessWrapper();
} else if (node instanceof ForEachNode) {
return new ForEachNodeWrapper();
+ } else if (node instanceof StateNode) {
+ return new StateNodeWrapper();
} else if (node instanceof CompositeContextNode) {
return new CompositeContextNodeWrapper();
} else if (node instanceof Join) {
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/RuleSetNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -26,7 +26,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class RuleSetNodeWrapper extends EventBasedNodeWrapper {
+public class RuleSetNodeWrapper extends StateBasedNodeWrapper {
private static final long serialVersionUID = 400L;
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SplitWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -21,16 +21,16 @@
import java.util.Iterator;
import java.util.Map;
+import org.drools.definition.process.Connection;
import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
import org.drools.eclipse.flow.common.editor.core.ElementConnection;
import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
import org.drools.eclipse.flow.ruleflow.view.property.constraint.ConstraintsPropertyDescriptor;
-import org.drools.definition.process.Connection;
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.Node;
import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.node.Split;
-import org.drools.workflow.core.node.Split.ConnectionRef;
import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
@@ -88,8 +88,8 @@
}
private void setDescriptors() {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 1];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 1];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 1] =
new ComboBoxPropertyDescriptor(TYPE, "Type",
new String[] { "", "AND", "XOR", "OR" });
@@ -123,8 +123,8 @@
if (CONSTRAINTS.equals(id)) {
return getSplit().getType() == Split.TYPE_XOR
|| getSplit().getType() == Split.TYPE_OR
- ? new MyHashMap<Split.ConnectionRef, Constraint>(getSplit().getConstraints())
- : new MyHashMap<Split.ConnectionRef, Constraint>();
+ ? new MyHashMap<ConnectionRef, Constraint>(getSplit().getConstraints())
+ : new MyHashMap<ConnectionRef, Constraint>();
}
return super.getPropertyValue(id);
}
@@ -151,10 +151,10 @@
notifyListeners(CHANGE_TYPE);
updateConnectionLabels();
} else if (CONSTRAINTS.equals(id)) {
- Iterator<Map.Entry<Split.ConnectionRef, Constraint>> iterator = ((Map<Split.ConnectionRef, Constraint>) value).entrySet().iterator();
+ Iterator<Map.Entry<ConnectionRef, Constraint>> iterator = ((Map<ConnectionRef, Constraint>) value).entrySet().iterator();
while (iterator.hasNext()) {
- Map.Entry<Split.ConnectionRef, Constraint> element = iterator.next();
- Split.ConnectionRef connectionRef = element.getKey();
+ Map.Entry<ConnectionRef, Constraint> element = iterator.next();
+ ConnectionRef connectionRef = element.getKey();
Connection outgoingConnection = null;
for (Connection out: getSplit().getDefaultOutgoingConnections()) {
if (out.getToType().equals(connectionRef.getToType())
Copied: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateBasedNodeWrapper.java (from rev 26936, labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/EventBasedNodeWrapper.java)
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateBasedNodeWrapper.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateBasedNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,68 @@
+package org.drools.eclipse.flow.ruleflow.core;
+
+import java.util.Map;
+
+import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
+import org.drools.eclipse.flow.ruleflow.view.property.timers.TimersPropertyDescriptor;
+import org.drools.process.core.timer.Timer;
+import org.drools.workflow.core.DroolsAction;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.node.StateBasedNode;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+
+public class StateBasedNodeWrapper extends ExtendedNodeWrapper {
+
+ public static final String TIMERS = "Timers";
+
+ private static final long serialVersionUID = 4L;
+
+ protected IPropertyDescriptor[] descriptors;
+
+ public StateBasedNode getStateBasedNode() {
+ return (StateBasedNode) getNode();
+ }
+
+ protected void initDescriptors() {
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 1];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
+ descriptors[descriptors.length - 1] =
+ new TimersPropertyDescriptor(TIMERS, "Timers", getStateBasedNode(),
+ (WorkflowProcess) getParent().getProcessWrapper().getProcess());
+ }
+
+ public IPropertyDescriptor[] getPropertyDescriptors() {
+ if (descriptors == null) {
+ initDescriptors();
+ }
+ return descriptors;
+ }
+
+ public Object getPropertyValue(Object id) {
+ if (TIMERS.equals(id)) {
+ return getStateBasedNode().getTimers();
+ }
+ return super.getPropertyValue(id);
+ }
+
+ public void resetPropertyValue(Object id) {
+ if (TIMERS.equals(id)) {
+ getStateBasedNode().removeAllTimers();
+ } else {
+ super.resetPropertyValue(id);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void setPropertyValue(Object id, Object value) {
+ if (TIMERS.equals(id)) {
+ getStateBasedNode().removeAllTimers();
+ // adding one by one so the ids are set correctly
+ for (Map.Entry<Timer, DroolsAction> entry: ((Map<Timer, DroolsAction>) value).entrySet()) {
+ getStateBasedNode().addTimer(entry.getKey(), entry.getValue());
+ }
+ } else {
+ super.setPropertyValue(id, value);
+ }
+ }
+
+}
Property changes on: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateBasedNodeWrapper.java
___________________________________________________________________
Name: svn:mergeinfo
+
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateNodeWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateNodeWrapper.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/StateNodeWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,165 @@
+package org.drools.eclipse.flow.ruleflow.core;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.drools.definition.process.Connection;
+import org.drools.eclipse.flow.common.editor.core.DefaultElementWrapper;
+import org.drools.eclipse.flow.common.editor.core.ElementConnection;
+import org.drools.eclipse.flow.common.editor.core.ElementWrapper;
+import org.drools.eclipse.flow.ruleflow.view.property.constraint.StateConstraintsPropertyDescriptor;
+import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.Node;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.ConnectionRef;
+import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.StateNode;
+import org.eclipse.ui.views.properties.IPropertyDescriptor;
+
+/**
+ * Wrapper for a milestone node.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class StateNodeWrapper extends StateBasedNodeWrapper {
+
+ public static final String CONSTRAINTS = "constraints";
+
+ private static final long serialVersionUID = 4L;
+
+ public StateNodeWrapper() {
+ setNode(new StateNode());
+ getStateNode().setName("State");
+ }
+
+ protected void initDescriptors() {
+ super.initDescriptors();
+ IPropertyDescriptor[] oldDescriptors = descriptors;
+ descriptors = new IPropertyDescriptor[oldDescriptors.length + 3];
+ System.arraycopy(oldDescriptors, 0, descriptors, 0, oldDescriptors.length);
+ descriptors[descriptors.length - 3] = getOnEntryPropertyDescriptor();
+ descriptors[descriptors.length - 2] = getOnExitPropertyDescriptor();
+ descriptors[descriptors.length - 1] =
+ new StateConstraintsPropertyDescriptor(CONSTRAINTS, "Constraints",
+ getStateNode(), (WorkflowProcess) getParent().getProcessWrapper().getProcess());
+ }
+
+ public IPropertyDescriptor[] getPropertyDescriptors() {
+ if (descriptors == null) {
+ initDescriptors();
+ }
+ return descriptors;
+ }
+
+ public void setNode(Node node) {
+ super.setNode(node);
+ for (Connection connection: getStateNode().getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
+ String label = null;
+ Constraint constraint = getStateNode().getConstraint(connection);
+ if (constraint != null) {
+ label = constraint.getName();
+ }
+ ((org.drools.workflow.core.Connection) connection).setMetaData("label", label);
+ }
+ }
+
+ public StateNode getStateNode() {
+ return (StateNode) getNode();
+ }
+
+ private void updateConnectionLabels() {
+ for (ElementConnection connection: getOutgoingConnections()) {
+ updateConnectionLabel(connection);
+ }
+ }
+
+ private void updateConnectionLabel(ElementConnection connection) {
+ ConnectionWrapper connectionWrapper = (ConnectionWrapper) connection;
+ String label = null;
+ Constraint constraint = getStateNode().getConstraint(
+ connectionWrapper.getConnection());
+ if (constraint != null) {
+ label = constraint.getName();
+ }
+ connectionWrapper.getConnection().setMetaData("label", label);
+ connectionWrapper.notifyListeners(ElementConnection.CHANGE_LABEL);
+ }
+
+ public boolean acceptsIncomingConnection(ElementConnection connection, ElementWrapper source) {
+ return super.acceptsIncomingConnection(connection, source)
+ && getIncomingConnections().isEmpty();
+ }
+
+ public Object getPropertyValue(Object id) {
+ if (CONSTRAINTS.equals(id)) {
+ return new MyHashMap<ConnectionRef, Constraint>(
+ getStateNode().getConstraints());
+ }
+ return super.getPropertyValue(id);
+ }
+
+ public void resetPropertyValue(Object id) {
+ if (CONSTRAINTS.equals(id)) {
+ for (Connection connection: getStateNode().getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
+ getStateNode().setConstraint(connection, null);
+ }
+ updateConnectionLabels();
+ } else {
+ super.resetPropertyValue(id);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public void setPropertyValue(Object id, Object value) {
+ if (CONSTRAINTS.equals(id)) {
+ Iterator<Map.Entry<ConnectionRef, Constraint>> iterator = ((Map<ConnectionRef, Constraint>) value).entrySet().iterator();
+ while (iterator.hasNext()) {
+ Map.Entry<ConnectionRef, Constraint> element = iterator.next();
+ ConnectionRef connectionRef = element.getKey();
+ Connection outgoingConnection = null;
+ for (Connection out: getStateNode().getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE)) {
+ if (out.getToType().equals(connectionRef.getToType())
+ && out.getTo().getId() == connectionRef.getNodeId()) {
+ outgoingConnection = out;
+ }
+ }
+ if (outgoingConnection == null) {
+ throw new IllegalArgumentException("Could not find outgoing connection");
+ }
+ getStateNode().setConstraint(outgoingConnection, (Constraint) element.getValue());
+ }
+ updateConnectionLabels();
+ } else {
+ super.setPropertyValue(id, value);
+ }
+ }
+
+ public class MyHashMap<K, V> extends HashMap<K, V> {
+ private static final long serialVersionUID = -1748055291307174539L;
+ public MyHashMap() {
+ }
+ public MyHashMap(Map<K, V> map) {
+ super(map);
+ }
+ public String toString() {
+ return "";
+ }
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubProcessWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubProcessWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/SubProcessWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -32,7 +32,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class SubProcessWrapper extends EventBasedNodeWrapper {
+public class SubProcessWrapper extends StateBasedNodeWrapper {
private static final long serialVersionUID = 3668348577732020324L;
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/TimerWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -44,8 +44,8 @@
}
private void setDescriptors() {
- descriptors = new IPropertyDescriptor[DefaultElementWrapper.descriptors.length + 2];
- System.arraycopy(DefaultElementWrapper.descriptors, 0, descriptors, 0, DefaultElementWrapper.descriptors.length);
+ descriptors = new IPropertyDescriptor[DefaultElementWrapper.DESCRIPTORS.length + 2];
+ System.arraycopy(DefaultElementWrapper.DESCRIPTORS, 0, descriptors, 0, DefaultElementWrapper.DESCRIPTORS.length);
descriptors[descriptors.length - 2] =
new TextPropertyDescriptor(TIMER_DELAY, "Timer Delay");
descriptors[descriptors.length - 1] =
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/core/WorkItemWrapper.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -39,7 +39,7 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class WorkItemWrapper extends EventBasedNodeWrapper {
+public class WorkItemWrapper extends StateBasedNodeWrapper {
public static final String WAIT_FOR_COMPLETION = "WaitForCompletion";
public static final String RESULT_MAPPING = "ResultMapping";
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/RuleFlowEditPartFactory.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -31,6 +31,7 @@
import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.StateNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SubProcessWrapper;
import org.drools.eclipse.flow.ruleflow.core.TimerWrapper;
import org.drools.eclipse.flow.ruleflow.core.WorkItemWrapper;
@@ -85,6 +86,8 @@
result = new ElementContainerEditPart();
} else if (model instanceof EventNodeWrapper) {
result = new EventNodeEditPart();
+ } else if (model instanceof StateNodeWrapper) {
+ result = new StateNodeEditPart();
} else {
throw new IllegalArgumentException(
"Unknown model object " + model);
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StateNodeEditPart.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StateNodeEditPart.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/StateNodeEditPart.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,78 @@
+package org.drools.eclipse.flow.ruleflow.editor.editpart;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.editpart.ElementEditPart;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.drools.eclipse.flow.ruleflow.skin.SkinManager;
+import org.drools.eclipse.flow.ruleflow.skin.SkinProvider;
+import org.drools.eclipse.preferences.IDroolsConstants;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * EditPart for a RuleSet node.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class StateNodeEditPart extends ElementEditPart {
+
+ private String SKIN =
+ DroolsEclipsePlugin.getDefault().getPreferenceStore().getString(IDroolsConstants.SKIN);
+
+ private static final Color color = new Color(Display.getCurrent(), 255, 250, 205);
+
+ protected IFigure createFigure() {
+ SkinProvider skinProvider = SkinManager.getInstance().getSkinProvider(SKIN);
+ return skinProvider.createStateFigure();
+ }
+
+ public static class StateFigure extends AbstractElementFigure {
+
+ private static final Image ICON = ImageDescriptor.createFromURL(
+ DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")).createImage();
+
+ private RoundedRectangle rectangle;
+
+ protected void customizeFigure() {
+ rectangle = new RoundedRectangle();
+ rectangle.setCornerDimensions(new Dimension(25, 25));
+ add(rectangle, 0);
+ rectangle.setBackgroundColor(color);
+ rectangle.setBounds(getBounds());
+ setSelected(false);
+ setIcon(ICON);
+ }
+
+ public void setBounds(Rectangle rectangle) {
+ super.setBounds(rectangle);
+ this.rectangle.setBounds(rectangle);
+ }
+
+ public void setSelected(boolean b) {
+ super.setSelected(b);
+ rectangle.setLineWidth(b ? 3 : 1);
+ repaint();
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNStateFigure.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNStateFigure.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/editor/editpart/figure/bpmn/BPMNStateFigure.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,41 @@
+package org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn;
+
+import org.drools.eclipse.DroolsEclipsePlugin;
+import org.drools.eclipse.flow.common.editor.editpart.figure.AbstractElementFigure;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+
+public class BPMNStateFigure extends AbstractElementFigure {
+
+ private static final Image ICON = ImageDescriptor.createFromURL(
+ DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")).createImage();
+
+ private RoundedRectangle rectangle;
+
+ public BPMNStateFigure() {
+ setSize(80, 48);
+ }
+
+ protected void customizeFigure() {
+ rectangle = new RoundedRectangle();
+ rectangle.setCornerDimensions(new Dimension(25, 25));
+ add(rectangle, 0);
+ rectangle.setBounds(getBounds());
+ setSelected(false);
+ setIcon(ICON);
+ }
+
+ public void setBounds(Rectangle rectangle) {
+ super.setBounds(rectangle);
+ this.rectangle.setBounds(rectangle);
+ }
+
+ public void setSelected(boolean b) {
+ super.setSelected(b);
+ rectangle.setLineWidth(b ? 3 : 1);
+ repaint();
+ }
+}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/BPMNSkinProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/BPMNSkinProvider.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/BPMNSkinProvider.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -15,10 +15,10 @@
import org.drools.eclipse.flow.ruleflow.core.ForEachNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.HumanTaskNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.JoinWrapper;
-import org.drools.eclipse.flow.ruleflow.core.MilestoneWrapper;
import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.StateNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SubProcessWrapper;
import org.drools.eclipse.flow.ruleflow.core.TimerWrapper;
import org.drools.eclipse.flow.ruleflow.editor.editpart.JoinEditPart.JoinFigureInterface;
@@ -34,9 +34,11 @@
import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNRuleSetNodeFigure;
import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNSplitFigure;
import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNStartNodeFigure;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNStateFigure;
import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNSubFlowFigure;
import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNTimerNodeFigure;
import org.drools.eclipse.flow.ruleflow.editor.editpart.figure.bpmn.BPMNWorkItemNodeFigure;
+import org.drools.eclipse.preferences.IDroolsConstants;
import org.eclipse.draw2d.IFigure;
import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.ConnectionCreationToolEntry;
@@ -51,13 +53,15 @@
public PaletteContainer createComponentsDrawer() {
- PaletteDrawer drawer = new PaletteDrawer("Components", null);
+ String flowNodes = DroolsEclipsePlugin.getDefault().getPluginPreferences().getString(IDroolsConstants.FLOW_NODES);
+ PaletteDrawer drawer = new PaletteDrawer("Components", null);
+
List<PaletteEntry> entries = new ArrayList<PaletteEntry>();
CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
"Start Event",
- "Create a new Start",
+ "Create a new Start Event",
StartNodeWrapper.class,
new SimpleFactory(StartNodeWrapper.class),
ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/start_empty.png")),
@@ -67,7 +71,7 @@
combined = new CombinedTemplateCreationEntry(
"End Event",
- "Create a new End",
+ "Create a new End Event",
EndNodeWrapper.class,
new SimpleFactory(EndNodeWrapper.class),
ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/end_terminate.png")),
@@ -75,125 +79,149 @@
);
entries.add(combined);
- combined = new CombinedTemplateCreationEntry(
- "Rule Task",
- "Create a new RuleFlowGroup",
- RuleSetNodeWrapper.class,
- new SimpleFactory(RuleSetNodeWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif"))
- );
- entries.add(combined);
-
- combined = new CombinedTemplateCreationEntry(
- "Gateway [diverge]",
- "Create a new Split",
- SplitWrapper.class,
- new SimpleFactory(SplitWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(0) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Rule Task",
+ "Create a new Rule Task",
+ RuleSetNodeWrapper.class,
+ new SimpleFactory(RuleSetNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif"))
+ );
+ entries.add(combined);
+ }
+
+ if (flowNodes.charAt(1) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Gateway [diverge]",
+ "Create a new Gateway [diverge]",
+ SplitWrapper.class,
+ new SimpleFactory(SplitWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Gateway [converge]",
- "Create a new Join",
- JoinWrapper.class,
- new SimpleFactory(JoinWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(2) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Gateway [converge]",
+ "Create a new Gateway [converge]",
+ JoinWrapper.class,
+ new SimpleFactory(JoinWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/gateway_complex.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Wait Task",
- "Create a new Event Wait",
- MilestoneWrapper.class,
- new SimpleFactory(MilestoneWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(3) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Wait Task",
+ "Create a new Wait Task",
+ StateNodeWrapper.class,
+ new SimpleFactory(StateNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Reusable Sub-Process",
- "Create a new SubFlow",
- SubProcessWrapper.class,
- new SimpleFactory(SubProcessWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process.png"))
- );
- entries.add(combined);
-
- combined = new CombinedTemplateCreationEntry(
- "Script Task",
- "Create a new Action",
- ActionWrapper.class,
- new SimpleFactory(ActionWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(4) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Reusable Sub-Process",
+ "Create a new Reusable Sub-Process",
+ SubProcessWrapper.class,
+ new SimpleFactory(SubProcessWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process.png"))
+ );
+ entries.add(combined);
+ }
+
+ if (flowNodes.charAt(5) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Script Task",
+ "Create a new Script Task",
+ ActionWrapper.class,
+ new SimpleFactory(ActionWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/Activity.gif"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Timer Event",
- "Create a new Timer",
- TimerWrapper.class,
- new SimpleFactory(TimerWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_timer.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_timer.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(6) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Timer Event",
+ "Create a new Timer Event",
+ TimerWrapper.class,
+ new SimpleFactory(TimerWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_timer.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_timer.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Error Event",
- "Create a new Fault",
- FaultNodeWrapper.class,
- new SimpleFactory(FaultNodeWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_error_10.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_error_10.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(7) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Error Event",
+ "Create a new Error Event",
+ FaultNodeWrapper.class,
+ new SimpleFactory(FaultNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_error_10.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_error_10.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Message Event",
- "Create a new Event Node",
- EventNodeWrapper.class,
- new SimpleFactory(EventNodeWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_message.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_empty.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(8) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Message Event",
+ "Create a new Message Event",
+ EventNodeWrapper.class,
+ new SimpleFactory(EventNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_message.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/intermediate_empty.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "User Task",
- "Create a new Human Task",
- HumanTaskNodeWrapper.class,
- new SimpleFactory(HumanTaskNodeWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/task.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/task.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(9) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "User Task",
+ "Create a new User Task",
+ HumanTaskNodeWrapper.class,
+ new SimpleFactory(HumanTaskNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/task.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/task.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Embedded Sub-Process",
- "Create a new Composite Node",
- CompositeContextNodeWrapper.class,
- new SimpleFactory(CompositeContextNodeWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(10) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Embedded Sub-Process",
+ "Create a new Embedded Sub-Process",
+ CompositeContextNodeWrapper.class,
+ new SimpleFactory(CompositeContextNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png"))
+ );
+ entries.add(combined);
+ }
- combined = new CombinedTemplateCreationEntry(
- "Multiple Instances",
- "Create a new ForEach Node",
- ForEachNodeWrapper.class,
- new SimpleFactory(ForEachNodeWrapper.class),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png")),
- ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png"))
- );
- entries.add(combined);
+ if (flowNodes.charAt(11) == '1') {
+ combined = new CombinedTemplateCreationEntry(
+ "Multiple Instances",
+ "Create a new Multiple Instances",
+ ForEachNodeWrapper.class,
+ new SimpleFactory(ForEachNodeWrapper.class),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png")),
+ ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/bpmn/sub_process_expanded.png"))
+ );
+ entries.add(combined);
+ }
drawer.addAll(entries);
return drawer;
@@ -262,6 +290,10 @@
return new BPMNSubFlowFigure();
}
+ public IFigure createStateFigure() {
+ return new BPMNStateFigure();
+ }
+
public WorkItemFigureInterface createWorkItemFigure() {
return new BPMNWorkItemNodeFigure();
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/DefaultSkinProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/DefaultSkinProvider.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/DefaultSkinProvider.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -19,6 +19,7 @@
import org.drools.eclipse.flow.ruleflow.core.RuleSetNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SplitWrapper;
import org.drools.eclipse.flow.ruleflow.core.StartNodeWrapper;
+import org.drools.eclipse.flow.ruleflow.core.StateNodeWrapper;
import org.drools.eclipse.flow.ruleflow.core.SubProcessWrapper;
import org.drools.eclipse.flow.ruleflow.core.TimerWrapper;
import org.drools.eclipse.flow.ruleflow.editor.editpart.ActionEditPart;
@@ -31,6 +32,7 @@
import org.drools.eclipse.flow.ruleflow.editor.editpart.RuleSetNodeEditPart;
import org.drools.eclipse.flow.ruleflow.editor.editpart.SplitEditPart;
import org.drools.eclipse.flow.ruleflow.editor.editpart.StartNodeEditPart;
+import org.drools.eclipse.flow.ruleflow.editor.editpart.StateNodeEditPart;
import org.drools.eclipse.flow.ruleflow.editor.editpart.SubFlowEditPart;
import org.drools.eclipse.flow.ruleflow.editor.editpart.TimerEditPart;
import org.drools.eclipse.flow.ruleflow.editor.editpart.WorkItemEditPart;
@@ -54,7 +56,7 @@
String flowNodes = DroolsEclipsePlugin.getDefault().getPluginPreferences().getString(IDroolsConstants.FLOW_NODES);
- PaletteDrawer drawer = new PaletteDrawer("Components", null);
+ PaletteDrawer drawer = new PaletteDrawer("Components", null);
List<PaletteEntry> entries = new ArrayList<PaletteEntry>();
@@ -116,10 +118,10 @@
if (flowNodes.charAt(3) == '1') {
combined = new CombinedTemplateCreationEntry(
- "Event Wait",
- "Create a new Event Wait",
- MilestoneWrapper.class,
- new SimpleFactory(MilestoneWrapper.class),
+ "Wait State",
+ "Create a new Wait State",
+ StateNodeWrapper.class,
+ new SimpleFactory(StateNodeWrapper.class),
ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif")),
ImageDescriptor.createFromURL(DroolsEclipsePlugin.getDefault().getBundle().getEntry("icons/question.gif"))
);
@@ -289,6 +291,10 @@
return new SubFlowEditPart.SubFlowNodeFigure();
}
+ public IFigure createStateFigure() {
+ return new StateNodeEditPart.StateFigure();
+ }
+
public WorkItemFigureInterface createWorkItemFigure() {
return new WorkItemEditPart.WorkItemFigure();
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/SkinProvider.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/SkinProvider.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/skin/SkinProvider.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -35,6 +35,8 @@
IFigure createSubFlowFigure();
+ IFigure createStateFigure();
+
WorkItemFigureInterface createWorkItemFigure();
IFigure createCompositeNodeFigure();
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/ConstraintListDialog.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -19,10 +19,11 @@
import java.util.List;
import java.util.Map;
+import org.drools.definition.process.Connection;
import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
-import org.drools.definition.process.Connection;
import org.drools.workflow.core.Constraint;
import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.ConnectionRef;
import org.drools.workflow.core.node.Split;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
@@ -41,11 +42,11 @@
*
* @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
*/
-public class ConstraintListDialog extends EditBeanDialog {
+public class ConstraintListDialog extends EditBeanDialog<Map<ConnectionRef, Constraint>> {
private WorkflowProcess process;
private Split split;
- private Map<Split.ConnectionRef, Constraint> newMap;
+ private Map<ConnectionRef, Constraint> newMap;
private Map<Connection, Label> labels = new HashMap<Connection, Label>();
protected ConstraintListDialog(Shell parentShell, WorkflowProcess process,
@@ -74,7 +75,7 @@
gridData.horizontalAlignment = GridData.FILL;
label2.setLayoutData(gridData);
Constraint constraint = newMap.get(
- new Split.ConnectionRef(outgoingConnection.getTo().getId(), outgoingConnection.getToType()));
+ new ConnectionRef(outgoingConnection.getTo().getId(), outgoingConnection.getToType()));
if (constraint != null) {
label2.setText(constraint.getName());
}
@@ -87,12 +88,12 @@
return composite;
}
- public void setValue(Object value) {
+ public void setValue(Map<ConnectionRef, Constraint> value) {
super.setValue(value);
- this.newMap = new HashMap<Split.ConnectionRef, Constraint>((Map<Split.ConnectionRef, Constraint>) value);
+ this.newMap = new HashMap<ConnectionRef, Constraint>(value);
}
- protected Object updateValue(Object value) {
+ protected Map<ConnectionRef, Constraint> updateValue(Map<ConnectionRef, Constraint> value) {
return newMap;
}
@@ -103,7 +104,7 @@
RuleFlowConstraintDialog dialog = new RuleFlowConstraintDialog(
getShell(), process);
dialog.create();
- Split.ConnectionRef connectionRef = new Split.ConnectionRef(connection.getTo().getId(), connection.getToType());
+ ConnectionRef connectionRef = new ConnectionRef(connection.getTo().getId(), connection.getToType());
Constraint constraint = newMap.get(connectionRef);
dialog.setConstraint(constraint);
int code = dialog.open();
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/RuleFlowConstraintDialog.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -290,7 +290,17 @@
};
r.run();
}
+
+ public void fixType(int index) {
+ typeCombo.select(index);
+ typeCombo.setEnabled(false);
+ }
+ public void fixDialect(int index) {
+ typeCombo.select(index);
+ typeCombo.setEnabled(false);
+ }
+
protected void okPressed() {
int selectionIndex = tabFolder.getSelectionIndex();
if (selectionIndex == 1) {
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListCellEditor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListCellEditor.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,52 @@
+package org.drools.eclipse.flow.ruleflow.view.property.constraint;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.Map;
+
+import org.drools.eclipse.flow.common.view.property.BeanDialogCellEditor;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.ConnectionRef;
+import org.drools.workflow.core.node.StateNode;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Cell editor for state constraints.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class StateConstraintListCellEditor extends BeanDialogCellEditor<Map<ConnectionRef, Constraint>> {
+
+ private WorkflowProcess process;
+ private StateNode stateNode;
+
+ public StateConstraintListCellEditor(Composite parent, WorkflowProcess process, StateNode stateNode) {
+ super(parent);
+ this.process = process;
+ this.stateNode = stateNode;
+ }
+
+ protected EditBeanDialog<Map<ConnectionRef, Constraint>> createDialog(Shell shell) {
+ return new StateConstraintListDialog(shell, process, stateNode);
+ }
+
+ protected String getLabelText(Object value) {
+ return "";
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListDialog.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListDialog.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintListDialog.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,147 @@
+package org.drools.eclipse.flow.ruleflow.view.property.constraint;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.definition.process.Connection;
+import org.drools.eclipse.flow.common.view.property.EditBeanDialog;
+import org.drools.workflow.core.Constraint;
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.impl.ConnectionRef;
+import org.drools.workflow.core.impl.NodeImpl;
+import org.drools.workflow.core.node.StateNode;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Dialog for editing constraints.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class StateConstraintListDialog extends EditBeanDialog<Map<ConnectionRef, Constraint>> {
+
+ private WorkflowProcess process;
+ private StateNode stateNode;
+ private Map<ConnectionRef, Constraint> newMap;
+ private Map<Connection, Label> labels = new HashMap<Connection, Label>();
+
+ protected StateConstraintListDialog(Shell parentShell, WorkflowProcess process,
+ StateNode stateNode) {
+ super(parentShell, "Edit Constraints");
+ this.process = process;
+ this.stateNode = stateNode;
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ Composite composite = (Composite) super.createDialogArea(parent);
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.numColumns = 3;
+ composite.setLayout(gridLayout);
+
+ List<Connection> outgoingConnections = stateNode.getOutgoingConnections(NodeImpl.CONNECTION_DEFAULT_TYPE);
+ labels.clear();
+ for (Connection outgoingConnection: outgoingConnections) {
+ Label label1 = new Label(composite, SWT.NONE);
+ label1.setText("To node "
+ + outgoingConnection.getTo().getName() + ": ");
+ Label label2 = new Label(composite, SWT.NONE);
+ labels.put(outgoingConnection, label2);
+ GridData gridData = new GridData();
+ gridData.grabExcessHorizontalSpace = true;
+ gridData.horizontalAlignment = GridData.FILL;
+ label2.setLayoutData(gridData);
+ Constraint constraint = newMap.get(
+ new ConnectionRef(outgoingConnection.getTo().getId(), outgoingConnection.getToType()));
+ if (constraint != null) {
+ label2.setText(constraint.getName());
+ }
+ Button editButton = new Button(composite, SWT.NONE);
+ editButton.setText("Edit");
+ editButton.addSelectionListener(new EditButtonListener(
+ outgoingConnection));
+ }
+
+ return composite;
+ }
+
+ public void setValue(Map<ConnectionRef, Constraint> value) {
+ super.setValue(value);
+ this.newMap = new HashMap<ConnectionRef, Constraint>((Map<ConnectionRef, Constraint>) value);
+ }
+
+ protected Map<ConnectionRef, Constraint> updateValue(Map<ConnectionRef, Constraint> value) {
+ return newMap;
+ }
+
+ private void editItem(final Connection connection) {
+
+ final Runnable r = new Runnable() {
+ public void run() {
+ RuleFlowConstraintDialog dialog = new RuleFlowConstraintDialog(
+ getShell(), process);
+ dialog.create();
+ ConnectionRef connectionRef = new ConnectionRef(connection.getTo().getId(), connection.getToType());
+ Constraint constraint = newMap.get(connectionRef);
+ dialog.setConstraint(constraint);
+ dialog.fixType(0);
+ dialog.fixDialect(0);
+ int code = dialog.open();
+ if (code != CANCEL) {
+ constraint = dialog.getConstraint();
+ newMap.put(
+ connectionRef,
+ constraint);
+ setConnectionText(
+ (Label) labels.get(connection), constraint.getName());
+ }
+ }
+
+ };
+ r.run();
+ }
+
+ private void setConnectionText(final Label connection, final String name) {
+ Display.getDefault().asyncExec(new Runnable() {
+ public void run() {
+ connection.setText(name);
+ }
+ });
+ }
+
+ private class EditButtonListener extends SelectionAdapter {
+ private Connection connection;
+
+ public EditButtonListener(Connection connection) {
+ this.connection = connection;
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ editItem(connection);
+ }
+ }
+}
Added: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintsPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintsPropertyDescriptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/constraint/StateConstraintsPropertyDescriptor.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -0,0 +1,51 @@
+package org.drools.eclipse.flow.ruleflow.view.property.constraint;
+/*
+ * Copyright 2005 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.drools.workflow.core.WorkflowProcess;
+import org.drools.workflow.core.node.StateNode;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.PropertyDescriptor;
+
+/**
+ * Property descriptor for state constraints.
+ *
+ * @author <a href="mailto:kris_verlaenen at hotmail.com">Kris Verlaenen</a>
+ */
+public class StateConstraintsPropertyDescriptor extends PropertyDescriptor {
+
+ private WorkflowProcess process;
+ private StateNode stateNode;
+
+ public StateConstraintsPropertyDescriptor(Object id, String displayName, StateNode stateNode, WorkflowProcess process) {
+ super(id, displayName);
+ this.stateNode = stateNode;
+ this.process = process;
+ }
+
+ public WorkflowProcess getProcess() {
+ return process;
+ }
+
+ public CellEditor createPropertyEditor(Composite parent) {
+ StateConstraintListCellEditor editor = new StateConstraintListCellEditor(parent, process, stateNode);
+ if (getValidator() != null) {
+ editor.setValidator(getValidator());
+ }
+ return editor;
+ }
+}
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-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimerDialog.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -69,7 +69,7 @@
private static final String[] DIALECTS = new String[] { "mvel", "java" };
- private Timer key;
+ private Timer timer;
private Text delayText;
private Text periodText;
private WorkflowProcess process;
@@ -100,8 +100,8 @@
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
delayText.setLayoutData(gridData);
- if (key != null) {
- delayText.setText(key.getDelay() + "");
+ if (timer != null && timer.getDelay() != null) {
+ delayText.setText(timer.getDelay());
}
label = new Label(composite, SWT.NONE);
label.setText("Timer period: ");
@@ -110,11 +110,11 @@
gridData.grabExcessHorizontalSpace = true;
gridData.horizontalAlignment = GridData.FILL;
periodText.setLayoutData(gridData);
- if (key != null) {
- periodText.setText(key.getPeriod() + "");
+ if (timer != null && timer.getPeriod() != null) {
+ periodText.setText(timer.getPeriod());
}
- Composite top = new Composite(composite, SWT.NONE);
+ Composite top = new Composite(composite, SWT.NONE);
GridData gd = new GridData();
gd.horizontalSpan = 2;
gd.grabExcessHorizontalSpace = true;
@@ -273,20 +273,20 @@
}
protected DroolsAction updateValue(DroolsAction value) {
- if (key == null) {
- key = new Timer();
+ if (timer == null) {
+ timer = new Timer();
}
String delay = delayText.getText().trim();
if (delay.length() == 0) {
- key.setDelay(null);
+ timer.setDelay(null);
} else {
- key.setDelay(delay);
+ timer.setDelay(delay);
}
String period = periodText.getText().trim();
if (period.length() == 0) {
- key.setPeriod(null);
+ timer.setPeriod(null);
} else {
- key.setPeriod(period);
+ timer.setPeriod(period);
}
if (tabFolder.getSelectionIndex() == 0) {
return getAction();
@@ -295,11 +295,11 @@
}
public void setKey(Timer key) {
- this.key = key;
+ this.timer = key;
}
public Timer getKey() {
- return key;
+ return timer;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersCellEditor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersCellEditor.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersCellEditor.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -22,7 +22,7 @@
import org.drools.process.core.timer.Timer;
import org.drools.workflow.core.DroolsAction;
import org.drools.workflow.core.WorkflowProcess;
-import org.drools.workflow.core.node.EventBasedNode;
+import org.drools.workflow.core.node.StateBasedNode;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
@@ -34,17 +34,17 @@
public class TimersCellEditor extends BeanDialogCellEditor<Map<Timer, DroolsAction>> {
private WorkflowProcess process;
- private EventBasedNode eventBasedNode;
+ private StateBasedNode stateBasedNode;
- public TimersCellEditor(Composite parent, WorkflowProcess process, EventBasedNode eventBasedNode) {
+ public TimersCellEditor(Composite parent, WorkflowProcess process, StateBasedNode stateBasedNode) {
super(parent);
this.process = process;
- this.eventBasedNode = eventBasedNode;
+ this.stateBasedNode = stateBasedNode;
}
protected EditBeanDialog<Map<Timer, DroolsAction>> createDialog(Shell shell) {
TimersDialog dialog = new TimersDialog(shell, process);
- dialog.setValue(eventBasedNode.getTimers());
+ dialog.setValue(stateBasedNode.getTimers());
return dialog;
}
Modified: labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersPropertyDescriptor.java
===================================================================
--- labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersPropertyDescriptor.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-eclipse/org.drools.eclipse/src/main/java/org/drools/eclipse/flow/ruleflow/view/property/timers/TimersPropertyDescriptor.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -1,7 +1,7 @@
package org.drools.eclipse.flow.ruleflow.view.property.timers;
import org.drools.workflow.core.WorkflowProcess;
-import org.drools.workflow.core.node.EventBasedNode;
+import org.drools.workflow.core.node.StateBasedNode;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.PropertyDescriptor;
@@ -9,16 +9,16 @@
public class TimersPropertyDescriptor extends PropertyDescriptor {
private WorkflowProcess process;
- private EventBasedNode eventBasedNode;
+ private StateBasedNode stateBasedNode;
- public TimersPropertyDescriptor(Object id, String displayName, EventBasedNode eventBasedNode, WorkflowProcess process) {
+ public TimersPropertyDescriptor(Object id, String displayName, StateBasedNode stateBasedNode, WorkflowProcess process) {
super(id, displayName);
- this.eventBasedNode = eventBasedNode;
+ this.stateBasedNode = stateBasedNode;
this.process = process;
}
public CellEditor createPropertyEditor(Composite parent) {
- TimersCellEditor editor = new TimersCellEditor(parent, process, eventBasedNode);
+ TimersCellEditor editor = new TimersCellEditor(parent, process, stateBasedNode);
if (getValidator() != null) {
editor.setValidator(getValidator());
}
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/.classpath 2009-06-17 01:43:57 UTC (rev 26986)
@@ -28,8 +28,8 @@
<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-client/1.0/gdata-client-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-core/1.0/gdata-core-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0.CR1/gwt-console-rpc-1.0.0.CR1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0.CR1/gwt-console-server-integration-1.0.0.CR1.jar"/>
<classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.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"/>
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/pom.xml 2009-06-17 01:43:57 UTC (rev 26986)
@@ -42,7 +42,7 @@
<dependency>
<groupId>org.jboss.bpm</groupId>
<artifactId>gwt-console-server-integration</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.CR1</version>
</dependency>
<dependency>
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-console/src/main/java/org/drools/integration/console/DroolsFlowTaskManagement.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -26,6 +26,7 @@
public class DroolsFlowTaskManagement implements TaskManagement {
+ // TODO: make this configurable
private String ipAddress = "127.0.0.1";
private int port = 9123;
private MinaTaskClient client;
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/.classpath 2009-06-17 01:43:57 UTC (rev 26986)
@@ -28,8 +28,8 @@
<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-client/1.0/gdata-client-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/gdata/gdata-core/1.0/gdata-core-1.0.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0.CR1/gwt-console-rpc-1.0.0.CR1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0.CR1/gwt-console-server-integration-1.0.0.CR1.jar"/>
<classpathentry kind="var" path="M2_REPO/com/h2database/h2/1.0.77/h2-1.0.77.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"/>
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-form/pom.xml 2009-06-17 01:43:57 UTC (rev 26986)
@@ -22,7 +22,7 @@
<dependency>
<groupId>org.jboss.bpm</groupId>
<artifactId>gwt-console-server-integration</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.CR1</version>
</dependency>
<dependency>
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-graph/.classpath
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-graph/.classpath 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-graph/.classpath 2009-06-17 01:43:57 UTC (rev 26986)
@@ -12,8 +12,8 @@
<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/hibernate/ejb3-persistence/1.0.2.GA/ejb3-persistence-1.0.2.GA.jar"/>
<classpathentry kind="var" path="M2_REPO/com/google/code/gson/gson/1.2.2/gson-1.2.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0-SNAPSHOT/gwt-console-rpc-1.0.0-SNAPSHOT-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT.jar" sourcepath="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0-SNAPSHOT/gwt-console-server-integration-1.0.0-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-rpc/1.0.0.CR1/gwt-console-rpc-1.0.0.CR1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/bpm/gwt-console-server-integration/1.0.0.CR1/gwt-console-server-integration-1.0.0.CR1.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/org/hibernate/hibernate-annotations/3.4.0.GA/hibernate-annotations-3.4.0.GA.jar"/>
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-graph/pom.xml
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-graph/pom.xml 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-graph/pom.xml 2009-06-17 01:43:57 UTC (rev 26986)
@@ -27,7 +27,7 @@
<dependency>
<groupId>org.jboss.bpm</groupId>
<artifactId>gwt-console-server-integration</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0.CR1</version>
</dependency>
</dependencies>
Modified: labs/jbossrules/trunk/drools-process/drools-gwt-graph/src/main/java/org/drools/integration/console/graph/GraphViewerPluginImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-process/drools-gwt-graph/src/main/java/org/drools/integration/console/graph/GraphViewerPluginImpl.java 2009-06-16 17:01:57 UTC (rev 26985)
+++ labs/jbossrules/trunk/drools-process/drools-gwt-graph/src/main/java/org/drools/integration/console/graph/GraphViewerPluginImpl.java 2009-06-17 01:43:57 UTC (rev 26986)
@@ -69,6 +69,7 @@
}
DiagramInfo result = new DiagramInfo();
+ // TODO: diagram width and height?
result.setWidth(932);
result.setHeight(541);
List<DiagramNodeInfo> nodeList = new ArrayList<DiagramNodeInfo>();
Deleted: labs/jbossrules/trunk/drools-process/drools-gwt-graph/src/main/resources/com.sample.eventing.png
===================================================================
(Binary files differ)
More information about the jboss-svn-commits
mailing list