[jboss-svn-commits] JBL Code SVN: r15527 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow: common/core/impl and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Oct 2 20:18:51 EDT 2007
Author: KrisVerlaenen
Date: 2007-10-02 20:18:51 -0400 (Tue, 02 Oct 2007)
New Revision: 15527
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/Process.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/impl/ProcessImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessValidationError.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidationErrorImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidatorImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/MilestoneNodeInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java
Log:
JBRULES-1244: Ruleflows should have a package name
- Process now has a packageName
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/Process.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/Process.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/Process.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -79,5 +79,19 @@
* @return the type of this process
*/
String getType();
+
+ /**
+ * Sets the package name of this RuleFlow process
+ *
+ * @param packageName the package name of this RuleFlow process
+ */
+ void setPackageName(String packageName);
+ /**
+ * Returns the package name of this RuleFlow process
+ *
+ * @return the package name of this RuleFlow process
+ */
+ String getPackageName();
+
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/impl/ProcessImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/impl/ProcessImpl.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/common/core/impl/ProcessImpl.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -33,6 +33,7 @@
private String name;
private String version;
private String type;
+ private String packageName;
public void setId(final String id) {
this.id = id;
@@ -66,6 +67,14 @@
this.type = type;
}
+ public String getPackageName() {
+ return packageName;
+ }
+
+ public void setPackageName(String packageName) {
+ this.packageName = packageName;
+ }
+
public boolean equals(final Object o) {
if ( o instanceof ProcessImpl ) {
return ((ProcessImpl) o).getName().equals( this.name ) && ((ProcessImpl) o).getVersion().equals( this.version );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessValidationError.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessValidationError.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/RuleFlowProcessValidationError.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -26,6 +26,7 @@
String NO_PROCESS_NAME = "RuleFlow process has no name.";
String NO_PROCESS_ID = "RuleFlow process has no id.";
String NO_START_NODE = "RuleFlow process has no start node.";
+ String NO_PACKAGE_NAME = "RuleFlow process has no package name.";
String START_NODE_WITHOUT_OUTGOING_NODES = "Start node has no outgoing connection.";
String END_NODE_HAS_NO_INCOMING_CONNECTIONS = "End node has no incoming connection.";
String NO_END_NODE = "No end node found.";
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidationErrorImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidationErrorImpl.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidationErrorImpl.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -28,13 +28,19 @@
RuleFlowProcessValidationError {
private String type;
+ private String text;
public RuleFlowProcessValidationErrorImpl(final String type) {
this.type = type;
}
+ public RuleFlowProcessValidationErrorImpl(final String type, String text) {
+ this.type = type;
+ this.text = text;
+ }
+
public String toString() {
- return this.type;
+ return this.type + (text == null ? "" : text);
}
public String getType() {
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidatorImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidatorImpl.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/impl/RuleFlowProcessValidatorImpl.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -36,6 +36,8 @@
import org.drools.ruleflow.core.StartNode;
import org.drools.ruleflow.core.SubFlowNode;
import org.drools.ruleflow.core.Variable;
+import org.mvel.ExpressionCompiler;
+import org.mvel.ParserContext;
/**
* Default implementation of a RuleFlow validator.
@@ -69,6 +71,10 @@
errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.NO_PROCESS_ID ) );
}
+ if ( process.getPackageName() == null || "".equals( process.getPackageName() ) ) {
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.NO_PACKAGE_NAME ) );
+ }
+
// check start node of process
if ( process.getStart() == null ) {
errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.NO_START_NODE ) );
@@ -94,81 +100,106 @@
} else if ( node instanceof RuleSetNode ) {
final RuleSetNode ruleSetNode = (RuleSetNode) node;
if ( ruleSetNode.getFrom() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.RULE_SET_NODE_WITHOUT_INCOMING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.RULE_SET_NODE_WITHOUT_INCOMING_CONNECTIONS, "name = " + ruleSetNode.getName() ) );
}
if ( ruleSetNode.getTo() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.RULE_SET_NODE_WITHOUT_OUTGOING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.RULE_SET_NODE_WITHOUT_OUTGOING_CONNECTIONS, "name = " + ruleSetNode.getName() ) );
}
final String ruleFlowGroup = ruleSetNode.getRuleFlowGroup();
if ( ruleFlowGroup == null || "".equals( ruleFlowGroup ) ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.RULE_SET_NODE_WITHOUT_RULE_SET_GROUP ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.RULE_SET_NODE_WITHOUT_RULE_SET_GROUP, "name = " + ruleSetNode.getName() ) );
}
} else if ( node instanceof Split ) {
final Split split = (Split) node;
if ( split.getType() == Split.TYPE_UNDEFINED ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_WITHOUT_TYPE ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_WITHOUT_TYPE, "name = " + split.getName() ) );
}
if ( split.getFrom() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_WITHOUT_INCOMING_CONNECTION ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_WITHOUT_INCOMING_CONNECTION, "name = " + split.getName() ) );
}
if ( split.getOutgoingConnections().size() < 2 ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_NOT_ENOUGH_OUTGOING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_NOT_ENOUGH_OUTGOING_CONNECTIONS, "name = " + split.getName() ) );
}
if ( split.getType() == Split.TYPE_XOR || split.getType() == Split.TYPE_OR ) {
for ( final Iterator it = split.getOutgoingConnections().iterator(); it.hasNext(); ) {
final Connection connection = (Connection) it.next();
if ( split.getConstraint( connection ) == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_OUTGOING_CONNECTION_WITHOUT_CONSTRAINT ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SPLIT_OUTGOING_CONNECTION_WITHOUT_CONSTRAINT, "name = " + split.getName() ) );
}
}
}
} else if ( node instanceof Join ) {
final Join join = (Join) node;
if ( join.getType() == Join.TYPE_UNDEFINED ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.JOIN_WITHOUT_TYPE ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.JOIN_WITHOUT_TYPE, "name = " + join.getName() ) );
}
if ( join.getIncomingConnections().size() < 2 ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.JOIN_NOT_ENOUGH_INCOMING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.JOIN_NOT_ENOUGH_INCOMING_CONNECTIONS, "name = " + join.getName() ) );
}
if ( join.getTo() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.JOIN_WITHOUT_OUTGOING_CONNECTION ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.JOIN_WITHOUT_OUTGOING_CONNECTION, "name = " + join.getName() ) );
}
} else if ( node instanceof MilestoneNode ) {
final MilestoneNode milestone = (MilestoneNode) node;
if ( milestone.getFrom() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.MILESTONE_NODE_WITHOUT_INCOMING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.MILESTONE_NODE_WITHOUT_INCOMING_CONNECTIONS, "name = " + milestone.getName() ) );
}
if ( milestone.getTo() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.MILESTONE_NODE_WITHOUT_OUTGOING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.MILESTONE_NODE_WITHOUT_OUTGOING_CONNECTIONS, "name = " + milestone.getName() ) );
}
if ( milestone.getConstraint() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.MILESTONE_WITHOUT_CONSTRAINT ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.MILESTONE_WITHOUT_CONSTRAINT, "name = " + milestone.getName() ) );
}
} else if ( node instanceof SubFlowNode ) {
final SubFlowNode subFlow = (SubFlowNode) node;
if ( subFlow.getFrom() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SUBFLOW_NODE_WITHOUT_INCOMING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SUBFLOW_NODE_WITHOUT_INCOMING_CONNECTIONS, "name = " + subFlow.getName() ) );
}
if ( subFlow.getTo() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SUBFLOW_NODE_WITHOUT_OUTGOING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SUBFLOW_NODE_WITHOUT_OUTGOING_CONNECTIONS, "name = " + subFlow.getName() ) );
}
if ( subFlow.getProcessId() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SUBFLOW_WITHOUT_PROCESS_ID ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.SUBFLOW_WITHOUT_PROCESS_ID, "name = " + subFlow.getName() ) );
}
} else if ( node instanceof ActionNode ) {
final ActionNode actionNode = (ActionNode) node;
if ( actionNode.getFrom() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_INCOMING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_INCOMING_CONNECTIONS, "name = " + actionNode.getName() ) );
}
if ( actionNode.getTo() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_OUTGOING_CONNECTIONS ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_OUTGOING_CONNECTIONS, "name = " + actionNode.getName() ) );
}
if ( actionNode.getAction() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_ACTION ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_ACTION, "name = " + actionNode.getName() ) );
+ } else {
+ if (actionNode.getAction() instanceof DroolsConsequenceAction) {
+ DroolsConsequenceAction droolsAction = (DroolsConsequenceAction) actionNode.getAction();
+ String actionString = droolsAction.getConsequence();
+ if (actionString == null) {
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITHOUT_ACTION, "name = " + actionNode.getName() ) );
+ } else {
+ try {
+ ExpressionCompiler compiler = new ExpressionCompiler(actionString);
+ compiler.setVerifying(true);
+ ParserContext parserContext = new ParserContext();
+ //parserContext.setStrictTypeEnforcement(true);
+ compiler.compile(parserContext);
+ List mvelErrors = parserContext.getErrorList();
+ if (mvelErrors != null) {
+ for (Iterator iterator = mvelErrors.iterator(); iterator.hasNext(); ) {
+ Object error = iterator.next();
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITH_INVALID_ACTION, "name = " + actionNode.getName() + " " + error ) );
+ }
+ }
+ } catch (Throwable t) {
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ACTION_NODE_WITH_INVALID_ACTION, "name = " + actionNode.getName() + " " + t.getMessage() ) );
+ }
+ }
+ }
}
}
}
@@ -181,7 +212,7 @@
for ( final Iterator it = process.getVariables().iterator(); it.hasNext(); ) {
final Variable variable = (Variable) it.next();
if ( variable.getType() == null ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.VARIABLE_WITHOUT_TYPE ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.VARIABLE_WITHOUT_TYPE, "name = " + variable.getName() ) );
}
}
@@ -210,7 +241,7 @@
for ( final Iterator it = processNodes.keySet().iterator(); it.hasNext(); ) {
final Node node = (Node) it.next();
if ( Boolean.FALSE.equals( processNodes.get( node ) ) ) {
- errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ALL_NODES_CONNECTED_TO_START ) );
+ errors.add( new RuleFlowProcessValidationErrorImpl( RuleFlowProcessValidationError.ALL_NODES_CONNECTED_TO_START, "name = " + node.getName() ) );
}
}
}
@@ -218,7 +249,7 @@
private void processNode(final Node node,
final Map nodes) {
if ( !nodes.containsKey( node ) ) {
- throw new IllegalStateException( "A process node is connected with " + "a node that does not belong to the process." );
+ throw new IllegalStateException( "A process node is connected with a node that does not belong to the process." );
}
final Boolean prevValue = (Boolean) nodes.put( node,
Boolean.TRUE );
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/MilestoneNodeInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/MilestoneNodeInstanceImpl.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/MilestoneNodeInstanceImpl.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -37,7 +37,7 @@
public void trigger(final RuleFlowNodeInstance from) {
RuleFlowGroup systemRuleFlowGroup = getProcessInstance().getAgenda().getRuleFlowGroup("DROOLS_SYSTEM");
- String rule = "RuleFlow-" + getProcessInstance().getProcess().getId()
+ String rule = "RuleFlow-Milestone-" + getProcessInstance().getProcess().getId()
+ "-" + getNode().getId();
for (Iterator activations = systemRuleFlowGroup.iterator(); activations.hasNext(); ) {
Activation activation = ((RuleFlowGroupNode) activations.next()).getActivation();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowProcessInstanceImpl.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -209,7 +209,7 @@
for (Iterator iterator = getNodeInstances().iterator(); iterator.hasNext(); ) {
RuleFlowNodeInstance nodeInstance = (RuleFlowNodeInstance) iterator.next();
if (nodeInstance instanceof MilestoneNodeInstanceImpl) {
- String milestoneName = "RuleFlow-" + getProcess().getId()
+ String milestoneName = "RuleFlow-Milestone-" + getProcess().getId()
+ "-" + nodeInstance.getNodeId();
if (milestoneName.equals(ruleName)) {
((MilestoneNodeInstanceImpl) nodeInstance).triggerCompleted();
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java 2007-10-03 00:18:42 UTC (rev 15526)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/instance/impl/RuleFlowSplitInstanceImpl.java 2007-10-03 00:18:51 UTC (rev 15527)
@@ -59,7 +59,7 @@
final Connection connection = (Connection) iterator.next();
Constraint constraint = split.getConstraint(connection);
if (constraint != null && constraint.getPriority() < priority) {
- String rule = "RuleFlow-" + getProcessInstance().getProcess().getId() + "-" +
+ String rule = "RuleFlow-Split-" + getProcessInstance().getProcess().getId() + "-" +
getNode().getId() + "-" + connection.getTo().getId();
for (Iterator activations = systemRuleFlowGroup.iterator(); activations.hasNext(); ) {
Activation activation = ((RuleFlowGroupNode) activations.next()).getActivation();
@@ -84,7 +84,7 @@
final Connection connection = (Connection) iterator.next();
Constraint constraint = split.getConstraint(connection);
if (constraint != null) {
- String rule = "RuleFlow-" + getProcessInstance().getProcess().getId() + "-" +
+ String rule = "RuleFlow-Split-" + getProcessInstance().getProcess().getId() + "-" +
getNode().getId() + "-" + connection.getTo().getId();
for (Iterator activations = systemRuleFlowGroup.iterator(); activations.hasNext(); ) {
Activation activation = ((RuleFlowGroupNode) activations.next()).getActivation();
More information about the jboss-svn-commits
mailing list