[jboss-svn-commits] JBL Code SVN: r22717 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools: workflow/core/node and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Sep 12 08:01:35 EDT 2008


Author: KrisVerlaenen
Date: 2008-09-12 08:01:35 -0400 (Fri, 12 Sep 2008)
New Revision: 22717

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/workflow/core/node/CompositeNode.java
Log:
 - Added more validation for composite nodes

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	2008-09-12 11:31:28 UTC (rev 22716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/ruleflow/core/validation/RuleFlowProcessValidator.java	2008-09-12 12:01:35 UTC (rev 22717)
@@ -44,6 +44,7 @@
 import org.drools.workflow.core.node.StartNode;
 import org.drools.workflow.core.node.SubProcessNode;
 import org.drools.workflow.core.node.WorkItemNode;
+import org.drools.workflow.core.node.CompositeNode.NodeAndType;
 import org.mvel.ErrorDetail;
 import org.mvel.ParserContext;
 import org.mvel.compiler.ExpressionCompiler;
@@ -313,17 +314,25 @@
                 validateNodes(forEachNode.getNodes(), errors, process);
             } else if (node instanceof CompositeNode) {
                 final CompositeNode compositeNode = (CompositeNode) node;
-                for (String inType: compositeNode.getLinkedIncomingNodes().keySet()) {
-                    if (compositeNode.getIncomingConnections(inType).size() == 0) {
+                for (Map.Entry<String, NodeAndType> inType: compositeNode.getLinkedIncomingNodes().entrySet()) {
+                    if (compositeNode.getIncomingConnections(inType.getKey()).size() == 0) {
                         errors.add(new ProcessValidationErrorImpl(process,
-                            "Composite node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection for type " + inType));
+                            "Composite node '" + node.getName() + "' [" + node.getId() + "] has no incoming connection for type " + inType.getKey()));
                     }
+                	if (inType.getValue().getNode() == null) {
+                        errors.add(new ProcessValidationErrorImpl(process,
+                            "Composite node '" + node.getName() + "' [" + node.getId() + "] has invalid linked incoming node for type " + inType.getKey()));
+                	}
                 }
-                for (String outType: compositeNode.getLinkedOutgoingNodes().keySet()) {
-                    if (compositeNode.getOutgoingConnections(outType).size() == 0) {
+                for (Map.Entry<String, NodeAndType> outType: compositeNode.getLinkedOutgoingNodes().entrySet()) {
+                    if (compositeNode.getOutgoingConnections(outType.getKey()).size() == 0) {
                         errors.add(new ProcessValidationErrorImpl(process,
-                            "Composite node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection for type " + outType));
+                            "Composite node '" + node.getName() + "' [" + node.getId() + "] has no outgoing connection for type " + outType.getKey()));
                     }
+                	if (outType.getValue().getNode() == null) {
+                        errors.add(new ProcessValidationErrorImpl(process,
+                            "Composite node '" + node.getName() + "' [" + node.getId() + "] has invalid linked outgoing node for type " + outType.getKey()));
+                	}
                 }
                 validateNodes(compositeNode.getNodes(), errors, process);
             } else if (node instanceof EventNode) {

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	2008-09-12 11:31:28 UTC (rev 22716)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/workflow/core/node/CompositeNode.java	2008-09-12 12:01:35 UTC (rev 22717)
@@ -107,9 +107,11 @@
 	        for (Connection connection: connections) {
 	        	CompositeNodeStart start = new CompositeNodeStart(connection.getFrom(), inType);
 		        internalAddNode(start);
-		        new ConnectionImpl(
-		            start, Node.CONNECTION_DEFAULT_TYPE, 
-		            inNode.getNode(), inNode.getType());
+		        if (inNode.getNode() != null) {
+			        new ConnectionImpl(
+			            start, Node.CONNECTION_DEFAULT_TYPE, 
+			            inNode.getNode(), inNode.getType());
+		        }
 	        }
         }
     }
@@ -133,9 +135,11 @@
 	        for (Connection connection: connections) {
 		        CompositeNodeEnd end = new CompositeNodeEnd(connection.getTo(), outType);
 		        internalAddNode(end);
-		        new ConnectionImpl(
-		            outNode.getNode(), outNode.getType(), 
-		            end, Node.CONNECTION_DEFAULT_TYPE);
+		        if (outNode.getNode() != null) {
+			        new ConnectionImpl(
+			            outNode.getNode(), outNode.getType(), 
+			            end, Node.CONNECTION_DEFAULT_TYPE);
+		        }
 	        }
         }
     }
@@ -172,7 +176,10 @@
     		}
     	} else {
 	        if (nodeAndType != null) {
-	        	((NodeImpl) nodeAndType.getNode()).validateAddIncomingConnection(nodeAndType.getType(), connection);
+	        	NodeImpl node = (NodeImpl) nodeAndType.getNode();
+	        	if (node != null) {
+	        		node.validateAddIncomingConnection(nodeAndType.getType(), connection);
+	        	}
 	        }
     	}
     }
@@ -186,9 +193,12 @@
 	        if (inNode != null) {
 		        CompositeNodeStart start = new CompositeNodeStart(connection.getFrom(), type);
 		        internalAddNode(start);
-		        new ConnectionImpl(
-		            start, Node.CONNECTION_DEFAULT_TYPE, 
-		            inNode.getNode(), inNode.getType());
+		        NodeImpl node = (NodeImpl) inNode.getNode();
+	        	if (node != null) {
+			        new ConnectionImpl(
+			            start, Node.CONNECTION_DEFAULT_TYPE, 
+			            inNode.getNode(), inNode.getType());
+	        	}
 	        }
     	}
     }
@@ -201,7 +211,10 @@
     		}
     	} else {
     		if (nodeAndType != null) {
-	        	((NodeImpl) nodeAndType.getNode()).validateAddOutgoingConnection(nodeAndType.getType(), connection);
+    	        NodeImpl node = (NodeImpl) nodeAndType.getNode();
+	        	if (node != null) {
+	        		((NodeImpl) nodeAndType.getNode()).validateAddOutgoingConnection(nodeAndType.getType(), connection);
+	        	}
 	        }
     	}
 	}
@@ -215,9 +228,12 @@
 	        if (outNode != null) {
 		        CompositeNodeEnd end = new CompositeNodeEnd(connection.getTo(), type);
 		        internalAddNode(end);
-		        new ConnectionImpl(
-		            outNode.getNode(), outNode.getType(), 
-		            end, Node.CONNECTION_DEFAULT_TYPE);
+		        NodeImpl node = (NodeImpl) outNode.getNode();
+	        	if (node != null) {
+	        		new ConnectionImpl(
+        				outNode.getNode(), outNode.getType(), 
+        				end, Node.CONNECTION_DEFAULT_TYPE);
+	        	}
 	        }
     	}
     }
@@ -303,7 +319,11 @@
         
         public Node getNode() {
             if (node == null) {
-                node = nodeContainer.getNode(nodeId);
+                try {
+                	node = nodeContainer.getNode(nodeId);
+                } catch (IllegalArgumentException e) {
+                	// unknown node id, returning null
+                }
             }
             return node;
         }




More information about the jboss-svn-commits mailing list