From 254ee6f47eebfc00462c10756a92066e82cc1a96 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 21 Jun 2011 15:46:02 +0200 Subject: Initial commit --- source/com/c2kernel/lifecycle/instance/Split.java | 217 ++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100755 source/com/c2kernel/lifecycle/instance/Split.java (limited to 'source/com/c2kernel/lifecycle/instance/Split.java') diff --git a/source/com/c2kernel/lifecycle/instance/Split.java b/source/com/c2kernel/lifecycle/instance/Split.java new file mode 100755 index 0000000..1f269af --- /dev/null +++ b/source/com/c2kernel/lifecycle/instance/Split.java @@ -0,0 +1,217 @@ +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 mErrors; + + /** + * @see java.lang.Object#Object() + */ + public Split() + { + mErrors = new Vector(0, 1); + getProperties().put("RoutingScriptName", ""); + getProperties().put("RoutingScriptVersion", ""); + } + + private boolean loopTested; + + private int mItemSystemKey = -1; + + /** + * @see com.c2kernel.lifecycle.instance.WfVertex#runNext() + */ + 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) + */ + 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); + // } + public void reinit(int idLoop) + { + Vertex[] outVertices = getOutGraphables(); + for (int i = 0; i < outVertices.length; i++) + ((WfVertex) outVertices[i]).reinit(idLoop); + } + + /** + * @see com.c2kernel.lifecycle.instance.WfVertex#verify() + */ + 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() + */ + 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#loop() + */ + 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 (int i = 0; i < list.length; i++) + if (test.equals(list[i])) + return true; + return false; + } + + public void runfirst(AgentPath agent) throws ScriptingEngineException + { + runNext(agent); + } + +} \ No newline at end of file -- cgit v1.2.3