summaryrefslogtreecommitdiff
path: root/src/main/java/com/c2kernel/lifecycle/instance/Activity.java
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2013-10-27 00:27:24 +0200
committerAndrew Branson <andrew.branson@cern.ch>2013-10-27 00:27:24 +0200
commit30cd736670a579985890d8c2dfe363bacbad7568 (patch)
tree152b34486ed4a77c6d6a3a49c13b796ae669f512 /src/main/java/com/c2kernel/lifecycle/instance/Activity.java
parent0f892332b19ba8741a7db66a5c4daa386b2b5c1e (diff)
Beta?
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/Activity.java')
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/Activity.java34
1 files changed, 27 insertions, 7 deletions
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<String>(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);