diff options
Diffstat (limited to 'source/com/c2kernel/lifecycle/AndSplitDef.java')
| -rwxr-xr-x | source/com/c2kernel/lifecycle/AndSplitDef.java | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/source/com/c2kernel/lifecycle/AndSplitDef.java b/source/com/c2kernel/lifecycle/AndSplitDef.java new file mode 100755 index 0000000..6692163 --- /dev/null +++ b/source/com/c2kernel/lifecycle/AndSplitDef.java @@ -0,0 +1,111 @@ +package com.c2kernel.lifecycle;
+
+import java.util.Vector;
+
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.traversal.GraphTraversal;
+import com.c2kernel.lifecycle.instance.AndSplit;
+import com.c2kernel.lifecycle.instance.WfVertex;
+/**
+ * @version $Revision: 1.19 $ $Date: 2005/09/29 10:18:31 $
+ * @author $Author: abranson $
+ */
+
+public class AndSplitDef extends WfVertexDef
+{
+ /**
+ * @see java.lang.Object#Object()
+ */
+ public AndSplitDef()
+ {
+ mErrors = new Vector(0, 1);
+ getProperties().put("RoutingScriptName", "");
+ getProperties().put("RoutingScriptVersion", "");
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.WfVertexDef#verify()
+ */
+ public boolean verify()
+ {
+ mErrors.removeAllElements();
+ boolean err = true;
+ int nbInEdges = getInEdges().length;
+ if (nbInEdges == 0 && this.getID() != getParent().getChildrenGraphModel().getStartVertexId())
+ {
+ mErrors.add("Unreachable");
+ err = false;
+ }
+ else if (nbInEdges > 1)
+ {
+ mErrors.add("Bad nb of previous");
+ err = false;
+ }
+ else
+ {
+ if (getOutEdges().length <= 1)
+ {
+ mErrors.add("not enough next");
+ err = false;
+ }
+ else if (!(this instanceof LoopDef))
+ {
+ Vertex[] outV = getOutGraphables();
+ Vertex[] anteVertices =
+ GraphTraversal.getTraversal(getParent().getChildrenGraphModel(), this, GraphTraversal.kUp, false);
+ boolean loop = false;
+ boolean errInLoop = true;
+ for (int i = 0; i < outV.length; i++)
+ {
+ for (int j = 0; j < anteVertices.length; j++)
+ if (!loop && outV[i].getID() == anteVertices[j].getID())
+ {
+ if (outV[i] instanceof LoopDef)
+ {
+ loop = true;
+ j = anteVertices.length;
+ i = outV.length;
+ }
+ else
+ {
+ errInLoop = false;
+ }
+ }
+ }
+ if (errInLoop && loop)
+ {
+ mErrors.add("Problem in Loop");
+ err = false;
+ }
+ }
+ }
+ return err;
+ }
+
+ public boolean loop()
+ {
+ boolean loop2 = false;
+ if (!loopTested)
+ {
+ loopTested = true;
+ if (getOutGraphables().length != 0)
+ {
+ Vertex[] outVertices = getOutGraphables();
+ for (int i = 0; i < outVertices.length; i++)
+ {
+ WfVertexDef tmp = (WfVertexDef) getOutGraphables()[i];
+ loop2 = loop2 || tmp.loop();
+ }
+ }
+ }
+ loopTested = false;
+ return loop2;
+ }
+
+ public WfVertex instantiate() {
+ AndSplit newSplit = new AndSplit();
+ configureInstance(newSplit);
+ return newSplit;
+ }
+
+}
|
