diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2012-05-30 08:37:45 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2012-05-30 08:37:45 +0200 |
| commit | b086f57f56bf0eb9dab9cf321a0f69aaaae84347 (patch) | |
| tree | 8e6e26e8b7eed6abad7a17b093bdbb55c5e6b1ba /src/main/java/com/c2kernel/lifecycle/instance/Split.java | |
| parent | 22088ae8d2d5ff390518dbe1c4372325ffb3a647 (diff) | |
Initial Maven Conversion
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/Split.java')
| -rw-r--r-- | src/main/java/com/c2kernel/lifecycle/instance/Split.java | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/Split.java b/src/main/java/com/c2kernel/lifecycle/instance/Split.java new file mode 100644 index 0000000..4fe1bfc --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/Split.java @@ -0,0 +1,225 @@ +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.47 $ $Date: 2006/05/29 13:17:45 $
+ * @author $Author: abranson $
+ */
+public abstract class Split extends WfVertex
+{
+ public Vector<String> mErrors;
+
+ /**
+ * @see java.lang.Object#Object()
+ */
+ public Split()
+ {
+ mErrors = new Vector<String>(0, 1);
+ getProperties().put("RoutingScriptName", "");
+ getProperties().put("RoutingScriptVersion", "");
+ }
+
+ private boolean loopTested;
+
+ private int mItemSystemKey = -1;
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#runNext()
+ */
+ @Override
+ public abstract void runNext(AgentPath agent) throws ScriptingEngineException;
+
+ /**
+ * Method addNext.
+ *
+ * @param idNext
+ */
+ void addNext(String idNext)
+ {
+ new Next(this, (WfVertex) getParent().search(idNext));
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#addNext(com.c2kernel.lifecycle.instance.WfVertex)
+ */
+ @Override
+ public Next addNext(WfVertex vertex)
+ {
+ Next nxt = new Next(this, vertex);
+ int num = getOutGraphables().length;
+ try
+ {
+ num = Integer.parseInt((String) getProperties().get("LastNum"));
+ } catch (Exception e)
+ {
+ }
+ nxt.getProperties().put("Alias", String.valueOf(num));
+ getProperties().put("LastNum", String.valueOf(num + 1));
+ return nxt;
+ }
+
+ /**
+ * Method getItemSystemKey.
+ *
+ * @return int
+ */
+ public int getItemSystemKey()
+ {
+ return mItemSystemKey;
+ }
+
+ /**
+ * Method setItemSystemKey.
+ *
+ * @param itemSystemKey
+ */
+ public void setItemSystemKey(int itemSystemKey)
+ {
+ mItemSystemKey = itemSystemKey;
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#reinit(int)
+ */
+ // public void initItemSystemKey(String systemKey) {
+ // setItemSystemKey(systemKey);
+ // }
+ @Override
+ public void reinit(int idLoop)
+ {
+ Vertex[] outVertices = getOutGraphables();
+ for (Vertex outVertice : outVertices)
+ ((WfVertex) outVertice).reinit(idLoop);
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#verify()
+ */
+ @Override
+ public boolean verify()
+ {
+ mErrors.removeAllElements();
+ int nbInEdgres = getParent().getChildrenGraphModel().getInEdges(this).length;
+ if (nbInEdgres == 0 && this.getID() != getParent().getChildrenGraphModel().getStartVertexId())
+ {
+ mErrors.add("not enough previous");
+ return false;
+ }
+ if (nbInEdgres > 1)
+ {
+ mErrors.add("Bad nb of previous");
+ return false;
+ }
+ if (getOutEdges().length <= 1 && !(this instanceof Loop))
+ {
+ mErrors.add("not enough next");
+ return false;
+ }
+ if (!(this instanceof Loop))
+ {
+ 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 Loop)
+ {
+ loop = true;
+ j = anteVertices.length;
+ i = outV.length;
+ } else
+ {
+ errInLoop = false;
+ }
+ }
+ }
+ if (errInLoop && loop)
+ {
+ mErrors.add("Problem in Loop");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#getErrors()
+ */
+ @Override
+ public String getErrors()
+ {
+ if (mErrors.size() == 0)
+ return "No error";
+ else
+ return mErrors.elementAt(0);
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#run()
+ */
+ @Override
+ public void run(AgentPath agent) throws ScriptingEngineException
+ {
+ runNext(agent);
+ }
+
+ /**
+ * @see com.c2kernel.lifecycle.instance.WfVertex#loop()
+ */
+ @Override
+ 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++)
+ {
+ WfVertex tmp = (WfVertex) getOutGraphables()[i];
+ loop2 = loop2 || tmp.loop();
+ }
+ }
+ }
+ loopTested = false;
+ return loop2;
+ }
+
+ public String[] nextNames()
+ {
+ Vertex[] vs = getOutGraphables();
+ String[] result = new String[vs.length];
+ for (int i = 0; i < vs.length; i++)
+ result[i] = vs[i].getName();
+ return result;
+ }
+
+ protected boolean isInTable(String test, String[] list)
+ {
+ if (test == null)
+ return false;
+ for (String element : list)
+ if (test.equals(element))
+ return true;
+ return false;
+ }
+
+ @Override
+ public void runfirst(AgentPath agent) throws ScriptingEngineException
+ {
+ runNext(agent);
+ }
+
+}
\ No newline at end of file |
