summaryrefslogtreecommitdiff
path: root/source/com/c2kernel/lifecycle/instance/Join.java
diff options
context:
space:
mode:
Diffstat (limited to 'source/com/c2kernel/lifecycle/instance/Join.java')
-rwxr-xr-xsource/com/c2kernel/lifecycle/instance/Join.java207
1 files changed, 207 insertions, 0 deletions
diff --git a/source/com/c2kernel/lifecycle/instance/Join.java b/source/com/c2kernel/lifecycle/instance/Join.java
new file mode 100755
index 0000000..205d264
--- /dev/null
+++ b/source/com/c2kernel/lifecycle/instance/Join.java
@@ -0,0 +1,207 @@
+package com.c2kernel.lifecycle.instance;
+import java.util.Vector;
+
+import com.c2kernel.graph.model.Vertex;
+import com.c2kernel.graph.traversal.GraphTraversal;
+import com.c2kernel.lookup.AgentPath;
+import com.c2kernel.scripting.ScriptingEngineException;
+/**
+ * @version $Revision: 1.52 $ $Date: 2005/05/10 15:14:54 $
+ * @author $Author: abranson $
+ */
+public class Join extends WfVertex
+{
+ public Vector mErrors;
+ /**
+ * @see java.lang.Object#Object()
+ */
+ public Join()
+ {
+ super();
+ mErrors = new Vector(0, 1);
+ }
+ private boolean loopTested;
+ public int counter = 0;
+ private String mItemSystemKey = "";
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#runNext()
+ */
+ public void runNext(AgentPath agent) throws ScriptingEngineException
+ {
+ AdvancementCalculator adv = new AdvancementCalculator();
+ adv.calculate((CompositeActivity) getParent());
+ if (adv.hasprevActive.get(String.valueOf(getID())) == null)
+ {
+ Vertex[] outVertices = getOutGraphables();
+ if (outVertices.length > 0)
+ {
+ WfVertex nextAct = (WfVertex) outVertices[0];
+ nextAct.run(agent);
+ }
+ else
+ super.runNext(agent);
+ }
+ }
+ /**
+ * Method addNext.
+ *
+ * @param idNext
+ */
+ public void addNext(String idNext)
+ {
+ new Next(this, (WfVertex) getParent().search(idNext));
+ }
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#reinit(int)
+ */
+ public void reinit(int idLoop)
+ {
+ Vertex[] outVertices = getOutGraphables();
+ if (outVertices.length == 1)
+ {
+ WfVertex nextAct = (WfVertex) outVertices[0];
+ nextAct.reinit(idLoop);
+ }
+ }
+ /**
+ * Method getItemSystemKey.
+ *
+ * @return String
+ */
+ /*
+ * public CompositeActivity process() { return parent.process(); }
+ */
+ public String getItemSystemKey()
+ {
+ return mItemSystemKey;
+ }
+ /**
+ * Method setItemSystemKey.
+ *
+ * @param itemSystemKey
+ */
+ public void setItemSystemKey(String itemSystemKey)
+ {
+ mItemSystemKey = itemSystemKey;
+ }
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#verify()
+ */
+ // public void initItemSystemKey(String systemKey) {
+ // this.setItemSystemKey(systemKey);
+ // }
+ public boolean verify()
+ {
+ mErrors.removeAllElements();
+ int nbOutEdges = getOutEdges().length;
+ int nbInEdges = getInEdges().length;
+ String type = (String) getProperties().get("Type");
+ if (nbInEdges < 1)
+ {
+ mErrors.add("not enough previous");
+ return false;
+ }
+ if (type != null && type.equals("Route"))
+ {
+ if (nbInEdges > 1)
+ {
+ mErrors.add("Bad nb of previous");
+ return false;
+ }
+ }
+ if (nbOutEdges > 1)
+ {
+ mErrors.add("too many next");
+ return false;
+ }
+ if (nbOutEdges == 0)
+ {
+ if (!((CompositeActivity) getParent()).hasGoodNumberOfActivity())
+ {
+ mErrors.add("too many endpoints");
+ return false;
+ }
+ }
+ Vertex[] outV = getOutGraphables();
+ Vertex[] anteVertices = GraphTraversal.getTraversal(getParent().getChildrenGraphModel(), this, GraphTraversal.kUp, false);
+ boolean loop = false;
+ boolean errInLoop = false;
+ 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 Loop)
+ {
+ loop = true;
+ j = anteVertices.length;
+ i = outV.length;
+ }
+ else
+ {
+ errInLoop = true;
+ }
+ }
+ }
+ if (errInLoop && loop)
+ {
+ mErrors.add("Problem in Loop");
+ return false;
+ }
+ return true;
+ }
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#getErrors()
+ */
+ public String getErrors()
+ {
+ if (mErrors.size() == 0)
+ return "No error";
+ else
+ return (String) mErrors.elementAt(0);
+ }
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#run()
+ */
+ public void run(AgentPath agent) throws ScriptingEngineException
+ {
+ runNext(agent);
+ }
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#addNext(com.c2kernel.lifecycle.instance.WfVertex)
+ */
+ public Next addNext(WfVertex vertex)
+ {
+ return new Next(this, vertex);
+ }
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#loop()
+ */
+ public boolean loop()
+ {
+ boolean loop2 = false;
+ if (!loopTested)
+ {
+ loopTested = true;
+ if (getOutGraphables().length != 0)
+ loop2 = ((WfVertex) getOutGraphables()[0]).loop();
+ }
+ else
+ loop2 = true;
+ loopTested = false;
+ return loop2;
+ }
+ public void runfirst(AgentPath agent) throws ScriptingEngineException
+ {
+ runNext(agent);
+ }
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.c2kernel.graph.model.Vertex#isJoin()
+ */
+ public boolean isJoin()
+ {
+ return true;
+ }
+}