From 30cd736670a579985890d8c2dfe363bacbad7568 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Sun, 27 Oct 2013 00:27:24 +0200 Subject: Beta? --- .../com/c2kernel/lifecycle/instance/Activity.java | 34 +++++++++++++++++----- 1 file changed, 27 insertions(+), 7 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance/Activity.java') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java index 182882c..a386194 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java @@ -30,6 +30,7 @@ import com.c2kernel.process.Gateway; import com.c2kernel.utils.DateUtility; import com.c2kernel.utils.LocalObjectLoader; import com.c2kernel.utils.Logger; +import com.c2kernel.utils.Resource; /** * @version $Revision: 1.222 $ $Date: 2005/10/05 07:39:37 $ * @author $Author: abranson $ @@ -54,11 +55,16 @@ public class Activity extends WfVertex { super(); setProperties(new WfCastorHashMap()); + getProperties().put("StateMachineName", getDefaultSMName()); mErrors = new Vector(0, 1); mStateDate = new GTimeStamp(); DateUtility.setToNow(mStateDate); } + protected String getDefaultSMName() { + return "Default"; + } + /** add the activity which id is idNext as next of the current one */ void addNext(String idNext) { @@ -76,25 +82,39 @@ public class Activity extends WfVertex public StateMachine getStateMachine() throws InvalidDataException { if (machine == null) { String name = (String)getProperties().get("StateMachineName"); - String version = (String)getProperties().get("StateMachineVersion"); + Integer version = (Integer)getProperties().get("StateMachineVersion"); try { - machine = LocalObjectLoader.getStateMachine(name, Integer.parseInt(version)); + machine = LocalObjectLoader.getStateMachine(name, version); } catch (ObjectNotFoundException ex) { + if (name.equals(getDefaultSMName()) && version == 0) { // default state machine not imported yet. Fake it. + try { + String marshalledSM = Resource.getTextResource(null, "boot/SM/"+getDefaultSMName()+".xml"); + StateMachine bootstrap = (StateMachine)Gateway.getMarshaller().unmarshall(marshalledSM); + bootstrap.validate(); + machine = bootstrap; + return bootstrap; + } catch (Exception ex2) { + Logger.error(ex2); + throw new InvalidDataException("Could not bootstrap default state machine from resources.", ""); + } + } Logger.error(ex); - throw new InvalidDataException("Error loading state machine '"+name+"' v"+version); + throw new InvalidDataException("Error loading state machine '"+name+"' v"+version, ""); } } return machine; } /** return the current State of the State machine (Used in Serialisation) */ - public int getState() + public int getState() throws InvalidDataException { + if (state == -1) + state = getStateMachine().getInitialStateCode(); return state; } public String getStateName() throws InvalidDataException { - return getStateMachine().getState(state).getName(); + return getStateMachine().getState(getState()).getName(); } /** Sets a new State */ @@ -104,7 +124,7 @@ public class Activity extends WfVertex } public boolean isFinished() throws InvalidDataException { - return getStateMachine().getState(state).isFinished(); + return getStateMachine().getState(getState()).isFinished(); } @@ -350,7 +370,7 @@ public class Activity extends WfVertex Logger.debug(8, getPath() + " run " + getState()); if (!getActive()) setActive(true); - boolean finished = getStateMachine().getState(state).isFinished(); + boolean finished = getStateMachine().getState(getState()).isFinished(); if (finished) { runNext(agent, itemSysKey); -- cgit v1.2.3