[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