From d43164830403245353080f5d6f838ed9f56d9a35 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Mon, 18 Nov 2013 09:48:03 +0100 Subject: 3.0-SNAPSHOT (Will be first open source version) New StateMachine desc IssueID #28 --- .../lifecycle/instance/CompositeActivity.java | 117 ++++++++------------- 1 file changed, 46 insertions(+), 71 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance/CompositeActivity.java') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/CompositeActivity.java b/src/main/java/com/c2kernel/lifecycle/instance/CompositeActivity.java index f3f5a81..f9ab0fe 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/CompositeActivity.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/CompositeActivity.java @@ -1,20 +1,17 @@ package com.c2kernel.lifecycle.instance; import java.util.ArrayList; -import java.util.Vector; import com.c2kernel.common.AccessRightsException; import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.InvalidTransitionException; -import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectNotFoundException; +import com.c2kernel.common.PersistencyException; import com.c2kernel.entity.agent.Job; import com.c2kernel.graph.model.GraphModel; import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.graph.model.GraphableVertex; -import com.c2kernel.lifecycle.instance.stateMachine.States; -import com.c2kernel.lifecycle.instance.stateMachine.Transitions; import com.c2kernel.lookup.AgentPath; -import com.c2kernel.scripting.ScriptingEngineException; import com.c2kernel.utils.Logger; /** @@ -23,9 +20,8 @@ import com.c2kernel.utils.Logger; */ public class CompositeActivity extends Activity { - /** - * @see java.lang.Object#Object() - */ + + /* * -------------------------------------------- * ----------------CONSTRUCTOR----------------- @@ -37,6 +33,14 @@ public class CompositeActivity extends Activity setChildrenGraphModel(new GraphModel(new WfVertexOutlineCreator())); setIsComposite(true); } + + // State machine + public static final int START = 0; + public static final int COMPLETE = 1; + @Override + protected String getDefaultSMName() { + return "CompositeActivity"; + } @Override public void setChildrenGraphModel(GraphModel childrenGraph) { @@ -276,66 +280,40 @@ public class CompositeActivity extends Activity } /** + * @throws InvalidDataException + * @throws ObjectNotFoundException + * @throws AccessRightsException + * @throws InvalidTransitionException + * @throws PersistencyException * @see com.c2kernel.lifecycle.instance.WfVertex#run() */ @Override - public void run(AgentPath agent) throws ScriptingEngineException + public void run(AgentPath agent, int itemSysKey) throws InvalidDataException, InvalidTransitionException, AccessRightsException, ObjectNotFoundException, PersistencyException { - super.run(agent); - if (getChildrenGraphModel().getStartVertex() != null && getMachine().getCurrentState() != States.FINISHED) + super.run(agent, itemSysKey); + if (getChildrenGraphModel().getStartVertex() != null && !getStateMachine().getState(state).isFinished()) { WfVertex first = (WfVertex) getChildrenGraphModel().getStartVertex(); - first.run(agent); + first.run(agent, itemSysKey); } } @Override - public void runNext(AgentPath agent) throws ScriptingEngineException - { - if (getMachine().state != States.FINISHED) - getMachine().traverse(Transitions.COMPLETE); - super.runNext(agent); - } - - /** - * @see com.c2kernel.lifecycle.instance.Activity#query(com.c2kernel.common.AgentInfo, - * java.lang.String, boolean) - */ - @Override - public Activity[] query(AgentPath agent, int stateID, boolean filter) + public void runNext(AgentPath agent, int itemSysKey) throws InvalidDataException, AccessRightsException, InvalidTransitionException, ObjectNotFoundException, PersistencyException { - Vector steps = new Vector(); - Activity[] returnArray = null; - for (int i = 0; i < getChildren().length; i++) - { - if (getChildren()[i] instanceof Activity) - steps.addElement(((Activity) getChildren()[i]).query(agent, stateID, filter)); - } - int j = 0; - for (int i = 0; i < steps.size(); i++) - j += steps.elementAt(i).length; - Activity[] tmp = super.query(agent, stateID, filter); - if (tmp.length == 1) - { - returnArray = new Activity[j + 1]; - returnArray[j] = tmp[0]; - } else - returnArray = new Activity[j]; - j = 0; - for (int i = 0; i < steps.size(); i++) - { - Activity[] stepArray = steps.elementAt(i); - for (Activity element : stepArray) - returnArray[j++] = element; - } - return returnArray; + if (!getStateMachine().getState(state).isFinished()) + request(agent, itemSysKey, CompositeActivity.COMPLETE, null); + super.runNext(agent, itemSysKey); } + /** + * @throws InvalidDataException + * @throws ObjectNotFoundException * @see com.c2kernel.lifecycle.instance.Activity#calculateJobs() */ @Override - public ArrayList calculateJobs(AgentPath agent, boolean recurse) + public ArrayList calculateJobs(AgentPath agent, int itemSysKey, boolean recurse) throws ObjectNotFoundException, InvalidDataException { ArrayList jobs = new ArrayList(); boolean childActive = false; @@ -344,16 +322,16 @@ public class CompositeActivity extends Activity if (getChildren()[i] instanceof Activity) { Activity child = (Activity) getChildren()[i]; - jobs.addAll(child.calculateJobs(agent, recurse)); + jobs.addAll(child.calculateJobs(agent, itemSysKey, recurse)); childActive |= child.active; } if (!childActive) - jobs.addAll(super.calculateJobs(agent, recurse)); + jobs.addAll(super.calculateJobs(agent, itemSysKey, recurse)); return jobs; } @Override - public ArrayList calculateAllJobs(AgentPath agent, boolean recurse) + public ArrayList calculateAllJobs(AgentPath agent, int itemSysKey, boolean recurse) throws ObjectNotFoundException, InvalidDataException { ArrayList jobs = new ArrayList(); if (recurse) @@ -361,9 +339,9 @@ public class CompositeActivity extends Activity if (getChildren()[i] instanceof Activity) { Activity child = (Activity) getChildren()[i]; - jobs.addAll(child.calculateAllJobs(agent, recurse)); + jobs.addAll(child.calculateAllJobs(agent, itemSysKey, recurse)); } - jobs.addAll(super.calculateAllJobs(agent, recurse)); + jobs.addAll(super.calculateAllJobs(agent, itemSysKey, recurse)); return jobs; } @@ -425,36 +403,33 @@ public class CompositeActivity extends Activity } /** + * @throws InvalidDataException * */ @Override - public void reinit(int idLoop) + public void reinit(int idLoop) throws InvalidDataException { super.reinit(idLoop); - if (getChildrenGraphModel().getStartVertex() != null && getMachine().getCurrentState() != States.FINISHED) + if (getChildrenGraphModel().getStartVertex() != null && !getStateMachine().getState(state).isFinished()) ((WfVertex) getChildrenGraphModel().getStartVertex()).reinit(idLoop); } @Override - public void request(AgentPath agent, int transitionID, String requestData) throws AccessRightsException, InvalidTransitionException, InvalidDataException, ObjectAlreadyExistsException + public void request(AgentPath agent, int itemSysKey, int transitionID, String requestData) throws AccessRightsException, InvalidTransitionException, InvalidDataException, ObjectNotFoundException, PersistencyException { - if (getChildrenGraphModel().getStartVertex() != null && getMachine().getCurrentState() != States.FINISHED && transitionID == Transitions.START) - try - { - ((WfVertex) getChildrenGraphModel().getStartVertex()).run(agent); - } catch (ScriptingEngineException e) - { - Logger.error(e); - } - super.request(agent, transitionID, requestData); + if (getChildrenGraphModel().getStartVertex() != null && !getStateMachine().getState(state).isFinished() && transitionID == CompositeActivity.START) + ((WfVertex) getChildrenGraphModel().getStartVertex()).run(agent, itemSysKey); + + super.request(agent, itemSysKey, transitionID, requestData); } - public void refreshJobs() + + public void refreshJobs(int itemSysKey) { GraphableVertex[] children = getChildren(); for (GraphableVertex element : children) if (element instanceof CompositeActivity) - ((CompositeActivity) element).refreshJobs(); + ((CompositeActivity) element).refreshJobs(itemSysKey); else if (element instanceof Activity) - ((Activity) element).pushJobsToAgents(); + ((Activity) element).pushJobsToAgents(itemSysKey); } } \ No newline at end of file -- cgit v1.2.3