[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