diff options
Diffstat (limited to 'src/main/java/com/c2kernel/lifecycle/instance/Activity.java')
| -rw-r--r-- | src/main/java/com/c2kernel/lifecycle/instance/Activity.java | 34 |
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);
|
