diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2013-10-25 17:27:29 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2013-10-25 17:27:29 +0200 |
| commit | 0f892332b19ba8741a7db66a5c4daa386b2b5c1e (patch) | |
| tree | ed0733ed83862bf3bae1aa1c2cccec4d266e4813 /src | |
| parent | cf28baaf82d0941f938444bda5b39440b944ddfb (diff) | |
Changes and refactoring to gui requirements
Used descriptions must use an integer version.
Diffstat (limited to 'src')
25 files changed, 219 insertions, 250 deletions
diff --git a/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java b/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java index 4c14cff..8d4dbfd 100644 --- a/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java +++ b/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java @@ -247,7 +247,7 @@ public class ActiveEntity extends AgentPOA // merge new jobs in
for (Object name : newJobList.list) {
Job newJob = (Job)name;
- Logger.msg(6, "Adding job for "+newJob.getItemSysKey()+"/"+newJob.getStepPath()+":"+newJob.getTransitionId());
+ Logger.msg(6, "Adding job for "+newJob.getItemSysKey()+"/"+newJob.getStepPath()+":"+newJob.getTransition().getId());
currentJobs.addJob(newJob);
}
diff --git a/src/main/java/com/c2kernel/entity/agent/Job.java b/src/main/java/com/c2kernel/entity/agent/Job.java index 715ee9c..5f9e6dc 100644 --- a/src/main/java/com/c2kernel/entity/agent/Job.java +++ b/src/main/java/com/c2kernel/entity/agent/Job.java @@ -39,26 +39,16 @@ public class Job implements C2KLocalObject private String stepType;
- private int transitionId;
-
- private int currentStateId;
-
- private int targetStateId;
+ private Transition transition;
+
+ private String originStateName;
+
+ private String targetStateName;
private int agentId = -1;
private String agentRole;
- private String schemaName;
-
- private int schemaVersion;
-
- private boolean outcomeRequired;
-
- private String scriptName;
-
- private int scriptVersion;
-
private CastorHashMap actProps = new CastorHashMap();
// non-persistent
@@ -88,32 +78,36 @@ public class Job implements C2KLocalObject setItemSysKey(itemSysKey);
setStepPath(act.getPath());
- setTransitionId(transition.getId());
- setCurrentStateId(transition.getOriginStateId());
- setTargetStateId(transition.getTargetStateId());
+ setTransition(transition);
+ setOriginStateName(act.getStateMachine().getState(transition.getOriginStateId()).getName());
+ setTargetStateName(act.getStateMachine().getState(transition.getTargetStateId()).getName());
setStepName(act.getName());
setActProps(act.getProperties());
setStepType(act.getType());
setAgentName(agent.getAgentName());
setAgentRole(role);
-
- if (transition.hasOutcome()) {
- Schema schema = transition.getSchema(act.getProperties());
- setSchemaName(schema.docType);
- setSchemaVersion(schema.docVersion);
- outcomeRequired = transition.getOutcome().isRequired();
- }
-
- if (transition.hasScript()) {
- setScriptName(transition.getScript().getScriptName());
- setScriptVersion(Integer.parseInt(transition.getScript().getScriptVersion()));
- }
}
// Castor persistent fields
- public int getId() {
+ public String getOriginStateName() {
+ return originStateName;
+ }
+
+ public void setOriginStateName(String originStateName) {
+ this.originStateName = originStateName;
+ }
+
+ public String getTargetStateName() {
+ return targetStateName;
+ }
+
+ public void setTargetStateName(String targetStateName) {
+ this.targetStateName = targetStateName;
+ }
+
+ public int getId() {
return id;
}
@@ -155,29 +149,13 @@ public class Job implements C2KLocalObject stepType = actType;
}
- public int getTransitionId() {
- return transitionId;
- }
-
- public void setTransitionId(int tid) {
- transitionId = tid;
+ public Transition getTransition() {
+ return transition;
}
- public int getCurrentStateId() {
- return currentStateId;
+ public void setTransition(Transition transition) {
+ this.transition = transition;
}
-
- public void setCurrentStateId(int stateId) {
- currentStateId = stateId;
- }
-
- public int getTargetStateId() {
- return targetStateId;
- }
-
- public void setTargetStateId(int targetStateId) {
- this.targetStateId = targetStateId;
- }
public int getAgentId() throws ObjectNotFoundException {
if (agentId == -1)
@@ -210,45 +188,39 @@ public class Job implements C2KLocalObject agentRole = role;
}
- public String getSchemaName() {
- return schemaName;
- }
-
- public void setSchemaName(String schemaName) {
- this.schemaName = schemaName;
- }
-
- public int getSchemaVersion() {
- return schemaVersion;
+ public String getSchemaName() throws InvalidDataException, ObjectNotFoundException {
+ if (transition.hasOutcome()) {
+ Schema schema = transition.getSchema(actProps);
+ return schema.docType;
+ }
+ return null;
}
- public void setSchemaVersion(int schemaVersion) {
- this.schemaVersion = schemaVersion;
+ public int getSchemaVersion() throws InvalidDataException, ObjectNotFoundException {
+ if (transition.hasOutcome()) {
+ Schema schema = transition.getSchema(actProps);
+ return schema.docVersion;
+ }
+ return -1;
}
public boolean isOutcomeRequired()
{
- return outcomeRequired;
- }
-
- public void setOutcomeRequired(boolean outcomeRequired) {
- this.outcomeRequired = outcomeRequired;
+ return transition.hasOutcome() && transition.getOutcome().isRequired();
}
public String getScriptName() {
- return scriptName;
- }
-
- public void setScriptName(String scriptName) {
- this.scriptName = scriptName;
+ if (transition.hasScript()) {
+ return transition.getScript().getScriptName();
+ }
+ return null;
}
- public int getScriptVersion() {
- return scriptVersion;
- }
-
- public void setScriptVersion(int scriptVersion) {
- this.scriptVersion = scriptVersion;
+ public int getScriptVersion() throws InvalidDataException {
+ if (transition.hasScript()) {
+ return transition.getScriptVersion(actProps);
+ }
+ return -1;
}
public KeyValuePair[] getKeyValuePairs() {
@@ -334,17 +306,17 @@ public class Job implements C2KLocalObject return outcomeData;
}
- public Outcome getOutcome()
+ public Outcome getOutcome() throws InvalidDataException, ObjectNotFoundException
{
return new Outcome(-1, getOutcomeString(), getSchemaName(), getSchemaVersion());
}
public boolean hasOutcome() {
- return schemaName!=null;
+ return transition.hasOutcome();
}
public boolean hasScript() {
- return scriptName!=null;
+ return transition.hasScript();
}
public boolean isOutcomeSet() {
@@ -359,7 +331,7 @@ public class Job implements C2KLocalObject public boolean equals(Job job)
{
- return (getItemSysKey() == job.getItemSysKey()) && this.stepPath.equals(job.stepPath) && this.transitionId == job.transitionId;
+ return (getItemSysKey() == job.getItemSysKey()) && this.stepPath.equals(job.stepPath) && transition.getId() == job.getTransition().getId();
}
private void setActProps(CastorHashMap actProps) {
@@ -375,43 +347,4 @@ public class Job implements C2KLocalObject {
return String.valueOf(actProps.get(name));
}
-
-
- // Deprecated methods from old state machine
-
- @Deprecated
- public String getSchemaType()
- {
- return getSchemaName();
- }
-
- @Deprecated
- public int getPossibleTransition()
- {
- return transitionId;
- }
-
- @Deprecated
- public void setPossibleTransition(int lint)
- {
- transitionId = lint;
- }
-
- @Deprecated
- public CastorHashMap getActProps()
- {
- return actProps;
- }
-
- @Deprecated
- public int getCurrentState()
- {
- return getCurrentStateId();
- }
-
- @Deprecated
- public int getTargetState() {
- return getTargetStateId();
- }
-
}
\ No newline at end of file diff --git a/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java b/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java index 1740159..ceea6c3 100644 --- a/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java +++ b/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java @@ -107,10 +107,10 @@ public class ItemProxy extends EntityProxy ObjectAlreadyExistsException
{
String outcome = thisJob.getOutcomeString();
- // check fields that should have been filled in
- if (outcome==null)
- if (thisJob.isOutcomeRequired())
- throw new InvalidDataException("Outcome is required.", "");
+ // check fields that should have been filled in
+ if (outcome==null)
+ if (thisJob.isOutcomeRequired())
+ throw new InvalidDataException("Outcome is required.", "");
else
outcome="";
@@ -119,7 +119,7 @@ public class ItemProxy extends EntityProxy Logger.msg(7, "ItemProxy - executing "+thisJob.getStepPath()+" for "+thisJob.getAgentName());
requestAction (thisJob.getAgentId(), thisJob.getStepPath(),
- thisJob.getTransitionId(), outcome);
+ thisJob.getTransition().getId(), outcome);
}
//requestData is xmlString
diff --git a/src/main/java/com/c2kernel/events/Event.java b/src/main/java/com/c2kernel/events/Event.java index 52781bd..37c3c58 100644 --- a/src/main/java/com/c2kernel/events/Event.java +++ b/src/main/java/com/c2kernel/events/Event.java @@ -28,12 +28,44 @@ import com.c2kernel.persistency.ClusterStorage; public class Event implements C2KLocalObject
{
- int mEntitySystemKey, mCurrentState, mTransition;
- Integer mID, mSchemaVersion;
- String mName, mStepName, mStepPath, mStepType, mSchemaName, mViewName, mAgentName, mAgentRole;
+ int mEntitySystemKey, mOriginState, mTransition, mTargetState;
+ Integer mID, mSchemaVersion, mStateMachineVersion;
+ String mName, mStepName, mStepPath, mStepType, mSchemaName, mStateMachineName, mViewName, mAgentName, mAgentRole;
GTimeStamp mTimeStamp;
- public void setID( Integer id ) {
+ public int getOriginState() {
+ return mOriginState;
+ }
+
+ public void setOriginState(int originState) {
+ this.mOriginState = originState;
+ }
+
+ public int getTargetState() {
+ return mTargetState;
+ }
+
+ public void setTargetState(int targetState) {
+ this.mTargetState = targetState;
+ }
+
+ public Integer getStateMachineVersion() {
+ return mStateMachineVersion;
+ }
+
+ public void setStateMachineVersion(Integer stateMachineVersion) {
+ this.mStateMachineVersion = stateMachineVersion;
+ }
+
+ public String getStateMachineName() {
+ return mStateMachineName;
+ }
+
+ public void setStateMachineName(String stateMachineName) {
+ this.mStateMachineName = stateMachineName;
+ }
+
+ public void setID( Integer id ) {
mID = id;
mName = String.valueOf(id);
}
@@ -90,11 +122,6 @@ public class Event implements C2KLocalObject this.mViewName = viewName;
}
- public void setCurrentState(int state)
- {
- mCurrentState = state;
- }
-
/**
* Set the AgentInfo in the Event, in parameter is an AgentInfo
*/
@@ -172,11 +199,6 @@ public class Event implements C2KLocalObject return mViewName;
}
- public int getCurrentState()
- {
- return mCurrentState;
- }
-
/**
* Return the AgentInfo of the Event.
*/
diff --git a/src/main/java/com/c2kernel/events/History.java b/src/main/java/com/c2kernel/events/History.java index 2eef8de..8ccd97a 100644 --- a/src/main/java/com/c2kernel/events/History.java +++ b/src/main/java/com/c2kernel/events/History.java @@ -2,6 +2,7 @@ package com.c2kernel.events; import com.c2kernel.common.InvalidDataException;
+import com.c2kernel.lifecycle.instance.stateMachine.Transition;
import com.c2kernel.persistency.ClusterStorage;
import com.c2kernel.persistency.RemoteMap;
import com.c2kernel.utils.Logger;
@@ -24,36 +25,41 @@ public class History extends RemoteMap<Event> { super(sysKey, ClusterStorage.HISTORY, locker);
}
public Event addEvent(String agentName, String agentRole,
- int stepTransitionId,
String stepName,
String stepPath,
String stepType,
- int stepCurrentState) {
- return addEvent(agentName, agentRole, stepTransitionId, stepName, stepPath, stepType, null, null, null, stepCurrentState);
+ String stateMachineName,
+ Integer stateMachineVersion,
+ Transition transition) {
+ return addEvent(agentName, agentRole, stepName, stepPath, stepType, null, null, stateMachineName, stateMachineVersion, transition, null);
}
public Event addEvent(String agentName, String agentRole,
- int stepTransitionId,
String stepName,
String stepPath,
String stepType,
String schemaName,
Integer schemaVersion,
- String viewName,
- int stepCurrentState) {
- Logger.msg(7, "History.addEvent() - creating new event for "+stepTransitionId+" on "+stepName+" in "+mSysKey);
+ String stateMachineName,
+ Integer stateMachineVersion,
+ Transition transition,
+ String viewName) {
+ Logger.msg(7, "History.addEvent() - creating new event for "+transition.getName()+" on "+stepName+" in "+mSysKey);
Event newEvent = new Event();
newEvent.setEntitySystemKey(mSysKey);
newEvent.setAgentName(agentName);
newEvent.setAgentRole(agentRole);
- newEvent.setTransition(stepTransitionId);
newEvent.setStepName(stepName);
newEvent.setStepPath(stepPath);
newEvent.setStepType(stepType);
newEvent.setSchemaName(schemaName);
newEvent.setSchemaVersion(schemaVersion);
newEvent.setViewName(viewName);
- newEvent.setCurrentState(stepCurrentState);
+ newEvent.setOriginState(transition.getOriginStateId());
+ newEvent.setTargetState(transition.getTargetStateId());
+ newEvent.setTransition(transition.getId());
+ newEvent.setStateMachineName(stateMachineName);
+ newEvent.setStateMachineVersion(stateMachineVersion);
newEvent.setTimeStamp(Event.getGMT());
return storeNewEvent(newEvent);
}
@@ -63,34 +69,40 @@ public class History extends RemoteMap<Event> { String stepName,
String stepPath,
String stepType,
- int stepCurrentState,
+ String stateMachineName,
+ Integer stateMachineVersion,
+ Transition transition,
String timeString) throws InvalidDataException {
- return addEvent(agentName, agentRole, stepTransitionId, stepName, stepPath, stepType, null, null, null, stepCurrentState, timeString);
+ return addEvent(agentName, agentRole, stepName, stepPath, stepType, null, null, stateMachineName, stateMachineVersion, transition, null, timeString);
}
public Event addEvent(String agentName, String agentRole,
- int stepTransitionId,
String stepName,
String stepPath,
String stepType,
String schemaName,
Integer schemaVersion,
+ String stateMachineName,
+ Integer stateMachineVersion,
+ Transition transition,
String viewName,
- int stepCurrentState,
String timeString) throws InvalidDataException {
- Logger.msg(7, "History.addEvent() - creating new event for "+stepTransitionId+" on "+stepName+" in "+mSysKey);
+ Logger.msg(7, "History.addEvent() - creating new event for "+transition.getName()+" on "+stepName+" in "+mSysKey);
Event newEvent = new Event();
newEvent.setEntitySystemKey(mSysKey);
newEvent.setAgentName(agentName);
newEvent.setAgentRole(agentRole);
- newEvent.setTransition(stepTransitionId);
newEvent.setStepName(stepName);
newEvent.setStepPath(stepPath);
newEvent.setStepType(stepType);
newEvent.setSchemaName(schemaName);
newEvent.setSchemaVersion(schemaVersion);
newEvent.setViewName(viewName);
- newEvent.setCurrentState(stepCurrentState);
+ newEvent.setOriginState(transition.getOriginStateId());
+ newEvent.setTargetState(transition.getTargetStateId());
+ newEvent.setTransition(transition.getId());
+ newEvent.setStateMachineName(stateMachineName);
+ newEvent.setStateMachineVersion(stateMachineVersion);
newEvent.setTimeString(timeString);
return storeNewEvent(newEvent);
}
diff --git a/src/main/java/com/c2kernel/lifecycle/ActivityDef.java b/src/main/java/com/c2kernel/lifecycle/ActivityDef.java index 4b8fe9e..f39badb 100644 --- a/src/main/java/com/c2kernel/lifecycle/ActivityDef.java +++ b/src/main/java/com/c2kernel/lifecycle/ActivityDef.java @@ -16,7 +16,7 @@ public class ActivityDef extends WfVertexDef implements C2KLocalObject, Descript {
private int mId = -1;
private String mName = "";
- private String mVersion = "";
+ private int mVersion = -1;
public boolean changed = false;
/**
* @see java.lang.Object#Object()
@@ -62,14 +62,15 @@ public class ActivityDef extends WfVertexDef implements C2KLocalObject, Descript return mName;
}
- public void setVersion(String v)
+ public void setVersion(int v)
{
mVersion = v;
}
/**
* @see com.c2kernel.graph.model.Vertex#getName()
*/
- public String getVersion()
+ @Override
+ public int getVersion()
{
return mVersion;
}
diff --git a/src/main/java/com/c2kernel/lifecycle/ActivitySlotDef.java b/src/main/java/com/c2kernel/lifecycle/ActivitySlotDef.java index 74d8305..f2cabaa 100644 --- a/src/main/java/com/c2kernel/lifecycle/ActivitySlotDef.java +++ b/src/main/java/com/c2kernel/lifecycle/ActivitySlotDef.java @@ -142,9 +142,9 @@ public class ActivitySlotDef extends WfVertexDef {
return (String) getProperties().get("Name");
}
- public String getActVersion()
+ public int getActVersion()
{
- return (String) getProperties().get("Version");
+ return (Integer) getProperties().get("Version");
}
@Override
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java index 49541ad..182882c 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/Activity.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/Activity.java @@ -78,7 +78,7 @@ public class Activity extends WfVertex String name = (String)getProperties().get("StateMachineName");
String version = (String)getProperties().get("StateMachineVersion");
try {
- machine = LocalObjectLoader.getStateMachine(name, version);
+ machine = LocalObjectLoader.getStateMachine(name, Integer.parseInt(version));
} catch (ObjectNotFoundException ex) {
Logger.error(ex);
throw new InvalidDataException("Error loading state machine '"+name+"' v"+version);
@@ -148,9 +148,11 @@ public class Activity extends WfVertex try {
History hist = (History) Gateway.getStorage().get(itemSysKey, ClusterStorage.HISTORY, this);
if (storeOutcome)
- newEvent = hist.addEvent(agent.getAgentName(), usedRole, transitionID, getName(), getPath(), getType(), schema.docType, schema.docVersion, viewName, state);
+ newEvent = hist.addEvent(agent.getAgentName(), usedRole, getName(), getPath(), getType(), schema.docType, schema.docVersion,
+ getStateMachine().getName(), getStateMachine().getVersion(), transition, viewName);
else
- newEvent = hist.addEvent(agent.getAgentName(), usedRole, transitionID, getName(), getPath(), getType(), state);
+ newEvent = hist.addEvent(agent.getAgentName(), usedRole, getName(), getPath(), getType(),
+ getStateMachine().getName(), getStateMachine().getVersion(), transition);
Logger.msg(7, "Activity::auditEvent() - Event:" + newEvent.getName() + " was added to the AuditTrail");
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java index 5c600e2..2e3d652 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java @@ -60,7 +60,7 @@ public class CreateItemFromDescription extends PredefinedStep String domPath = input[1];
CompositeActivityDef wfDef;
String wfDefName = null;
- String wfDefVer = null;
+ int wfDefVer = -1;
if (input.length > 2) // override wf
wfDefName = input[2];
@@ -93,14 +93,14 @@ public class CreateItemFromDescription extends PredefinedStep // get the first member from the wf collection
CollectionMember wfMember = members.get(0);
wfDefName = wfMember.resolveEntity().getName();
- wfDefVer = (String)wfMember.getProperties().get("Version");
+ wfDefVer = (Integer)wfMember.getProperties().get("Version");
}
}
// load workflow def
if (wfDefName == null)
throw new InvalidDataException("No workflow given or defined", "");
- if (wfDefVer == null)
+ if (wfDefVer == -1)
throw new InvalidDataException("No workflow def version given","");
try {
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java index 44ab041..5c7dc0e 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java @@ -73,7 +73,7 @@ public class Import extends PredefinedStep TransactionManager storage = Gateway.getStorage();
History hist = new History(itemSysKey, this);
- Event event = hist.addEvent(agent.getAgentName(), getCurrentAgentRole(), transitionID, getName(), getPath(), getType(), schemaName, schemaVersion, viewpoint, getState(), timestamp);
+ Event event = hist.addEvent(agent.getAgentName(), getCurrentAgentRole(), getName(), getPath(), getType(), schemaName, schemaVersion, getStateMachine().getName(), getStateMachine().getVersion(), getStateMachine().getTransition(transitionID), viewpoint, timestamp);
try {
storage.put(itemSysKey, new Outcome(event.getID(), requestData, schemaName, schemaVersion), this);
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewItem.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewItem.java index f089a83..dacb1a3 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewItem.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewItem.java @@ -16,7 +16,7 @@ import com.c2kernel.entity.TraceableEntity; import com.c2kernel.events.Event;
import com.c2kernel.events.History;
import com.c2kernel.lifecycle.CompositeActivityDef;
-import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
+import com.c2kernel.lifecycle.instance.stateMachine.Transition;
import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.EntityPath;
import com.c2kernel.persistency.ClusterStorage;
@@ -86,7 +86,7 @@ public class NewItem extends ModuleImport { try {
// find workflow def
- CompositeActivityDef compact = (CompositeActivityDef)LocalObjectLoader.getActDef(workflow, "0");
+ CompositeActivityDef compact = (CompositeActivityDef)LocalObjectLoader.getActDef(workflow, 0);
newItem.initialise(
agentId,
Gateway.getMarshaller().marshall(new PropertyArrayList(properties)),
@@ -129,7 +129,8 @@ public class NewItem extends ModuleImport { }
// write new view/outcome/event
- Event newEvent = hist.addEvent("system", "Admin", PredefinedStep.DONE, "Import", "Import", "Import", thisOutcome.schema, thisOutcome.version, thisOutcome.viewname, PredefinedStep.AVAILABLE);
+ Transition predefDone = new Transition(0, "Done", 0, 0);
+ Event newEvent = hist.addEvent("system", "Admin", "Import", "Import", "Import", thisOutcome.schema, thisOutcome.version, "PredefinedStep", 0, predefDone, thisOutcome.viewname);
newOutcome.setID(newEvent.getID());
impView.setEventId(newEvent.getID());
try {
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java b/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java index f9cf144..1506701 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/StateMachine.java @@ -16,7 +16,7 @@ import com.c2kernel.utils.Logger; public class StateMachine implements DescriptionObject
{
public String name;
- public String version;
+ public int version;
private ArrayList<State> states;
private ArrayList<Transition> transitions;
@@ -92,7 +92,7 @@ public class StateMachine implements DescriptionObject }
@Override
- public String getVersion() {
+ public int getVersion() {
return version;
}
@@ -100,7 +100,7 @@ public class StateMachine implements DescriptionObject this.name = name;
}
- public void setVersion(String version) {
+ public void setVersion(int version) {
this.version = version;
}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java b/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java index 9815889..01ede5a 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/stateMachine/Transition.java @@ -40,6 +40,16 @@ public class Transition implements Serializable { public Transition() {
}
+
+ public Transition(int id, String name, int originStateId, int targetStateId) {
+ super();
+ this.id = id;
+ this.name = name;
+ this.originStateId = originStateId;
+ this.targetStateId = targetStateId;
+ }
+
+
public String getName() {
return name;
}
@@ -234,7 +244,9 @@ public class Transition implements Serializable { }
public boolean hasOutcome() {
- return outcome.schemaName!=null && outcome.schemaName.length()>0;
+ return outcome!=null
+ && outcome.schemaName!=null && outcome.schemaName.length()>0
+ && outcome.schemaVersion!=null && outcome.schemaVersion.length()>0;
}
public Schema getSchema(CastorHashMap actProps) throws InvalidDataException, ObjectNotFoundException {
@@ -249,7 +261,21 @@ public class Transition implements Serializable { return null;
}
+ public String getScriptName(CastorHashMap actProps) {
+ return resolveValue(script.scriptName, actProps);
+ }
+
+ public int getScriptVersion(CastorHashMap actProps) throws InvalidDataException {
+ try {
+ return Integer.parseInt(resolveValue(script.scriptVersion, actProps));
+ } catch (NumberFormatException ex) {
+ throw new InvalidDataException("Bad Script version number: "+script.scriptVersion+" ("+resolveValue(script.scriptVersion, actProps));
+ }
+ }
+
public boolean hasScript() {
- return script!=null && script.getScriptName() != null;
+ return script!=null
+ && script.scriptName!=null && script.scriptName.length()>0
+ && script.scriptVersion!=null && script.scriptVersion.length()>0;
}
}
diff --git a/src/main/java/com/c2kernel/process/Bootstrap.java b/src/main/java/com/c2kernel/process/Bootstrap.java index 93698e8..b334d59 100644 --- a/src/main/java/com/c2kernel/process/Bootstrap.java +++ b/src/main/java/com/c2kernel/process/Bootstrap.java @@ -15,9 +15,9 @@ import com.c2kernel.events.History; import com.c2kernel.lifecycle.CompositeActivityDef;
import com.c2kernel.lifecycle.instance.CompositeActivity;
import com.c2kernel.lifecycle.instance.Workflow;
-import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lifecycle.instance.predefined.PredefinedStepContainer;
import com.c2kernel.lifecycle.instance.predefined.ServerPredefinedStepContainer;
+import com.c2kernel.lifecycle.instance.stateMachine.Transition;
import com.c2kernel.lookup.AgentPath;
import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.EntityPath;
@@ -151,7 +151,8 @@ public class Bootstrap // data was missing or doesn't match
Logger.msg("Bootstrap.verifyResource() - Writing new version "+version+" to "+getDataType(itemType)+" "+itemName);
History hist = new History(thisProxy.getSystemKey(), thisProxy);
- Event newEvent = hist.addEvent("system", "Admin", PredefinedStep.DONE, "Bootstrap", "Bootstrap", "Bootstrap", getDataType(itemType), 0, String.valueOf(version), PredefinedStep.AVAILABLE);
+ Transition predefDone = new Transition(0, "Done", 0, 0);
+ Event newEvent = hist.addEvent("system", "Admin", "Bootstrap", "Bootstrap", "Bootstrap", getDataType(itemType), 0, "PredefinedStep", 0, predefDone, String.valueOf(version));
newOutcome.setID(newEvent.getID());
Viewpoint newLastView = new Viewpoint(thisProxy.getSystemKey(), getDataType(itemType), "last", 0, newEvent.getID());
Viewpoint newZeroView = new Viewpoint(thisProxy.getSystemKey(), getDataType(itemType), String.valueOf(version), 0, newEvent.getID());
@@ -185,7 +186,7 @@ public class Bootstrap else if (itemType.equals("OD")) wf = "ManageSchema";
else if (itemType.equals("SC")) wf = "ManageScript";
else throw new Exception("Unknown bootstrap item type: "+itemType);
- ca = (CompositeActivity) ((CompositeActivityDef)LocalObjectLoader.getActDef(wf, "last")).instantiate();
+ ca = (CompositeActivity) ((CompositeActivityDef)LocalObjectLoader.getActDef(wf, 0)).instantiate();
}
EntityPath entityPath = Gateway.getLDAPLookup().getNextKeyManager().generateNextEntityKey();
@@ -306,7 +307,7 @@ public class Bootstrap }
public static void initServerItemWf() throws Exception {
- CompositeActivityDef serverWfCa = (CompositeActivityDef)LocalObjectLoader.getActDef("ServerItemWorkflow", "last");
+ CompositeActivityDef serverWfCa = (CompositeActivityDef)LocalObjectLoader.getActDef("ServerItemWorkflow", 0);
Workflow wf = new Workflow((CompositeActivity)serverWfCa.instantiate());
PredefinedStepContainer predef = (PredefinedStepContainer)wf.search("workflow/predefined");
wf.getChildGraphModel().removeVertex(predef);
diff --git a/src/main/java/com/c2kernel/process/UserCodeProcess.java b/src/main/java/com/c2kernel/process/UserCodeProcess.java index f58da51..f7bbe74 100644 --- a/src/main/java/com/c2kernel/process/UserCodeProcess.java +++ b/src/main/java/com/c2kernel/process/UserCodeProcess.java @@ -85,8 +85,9 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv if (thisJob != null) {
String jobKey = thisJob.getItemSysKey()+":"+thisJob.getStepPath();
+ int transitionId = thisJob.getTransition().getId();
try {
- if (thisJob.getTransitionId()==START) {
+ if (transitionId==START) {
Logger.msg(5, "Testing start conditions");
boolean start = assessStartConditions(thisJob);
if (start) {
@@ -97,13 +98,13 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv Logger.msg(5, "Start conditions failed "+thisJob.getStepName()+" in "+thisJob.getItemSysKey());
}
}
- else if (thisJob.getTransitionId()==COMPLETE) {
+ else if (transitionId==COMPLETE) {
Logger.msg(5, "Executing logic");
runUCLogic(thisJob);
if (ignoredPaths.contains(jobKey))
ignoredPaths.remove(jobKey);
}
- else if (thisJob.getTransitionId()==SUSPEND) {
+ else if (transitionId==SUSPEND) {
if (ignoredPaths.contains(jobKey)) {
if (errors.containsKey(jobKey)) {
thisJob.setOutcome(Gateway.getMarshaller().marshall(errors.get(jobKey)));
@@ -112,7 +113,7 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv agent.execute(thisJob);
}
}
- else if (thisJob.getTransitionId()==RESUME) {
+ else if (transitionId==RESUME) {
if (!ignoredPaths.contains(jobKey))
agent.execute(thisJob);
}
@@ -122,7 +123,7 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv } catch (InvalidTransitionException ex) {
// must have already been done by someone else - ignore
} catch (Throwable ex) {
- Logger.error("Error executing "+getTransitionName(thisJob.getTransitionId())+" job:");
+ Logger.error("Error executing "+thisJob.getTransition().getName()+" job:");
Logger.error(ex);
ErrorInfo ei = new ErrorInfo();
ei.setFatal();
@@ -154,27 +155,12 @@ public class UserCodeProcess extends StandardClient implements EntityProxyObserv }
}
- private static String getTransitionName(int transitionId) {
- switch (transitionId) {
- case 1:
- return "Start";
- case 2:
- return "Complete";
- case 3:
- return "Suspend";
- case 4:
- return "Resume";
- default:
- return "Unknown";
- }
- }
-
private static Job getJob(HashMap<String, C2KLocalObject> jobs, int transition) {
for (C2KLocalObject c2kLocalObject : jobs.values()) {
Job thisJob = (Job)c2kLocalObject;
- if (thisJob.getTransitionId() == transition) {
+ if (thisJob.getTransition().getId() == transition) {
Logger.msg(1,"=================================================================");
- Logger.msg(1, "Got "+getTransitionName(transition)+" job for "+thisJob.getStepName()+" in "+thisJob.getItemSysKey());
+ Logger.msg(1, "Got "+thisJob.getTransition().getName()+" job for "+thisJob.getStepName()+" in "+thisJob.getItemSysKey());
return thisJob;
}
}
diff --git a/src/main/java/com/c2kernel/utils/ActDefCache.java b/src/main/java/com/c2kernel/utils/ActDefCache.java index 23d8988..ab2bd90 100644 --- a/src/main/java/com/c2kernel/utils/ActDefCache.java +++ b/src/main/java/com/c2kernel/utils/ActDefCache.java @@ -21,7 +21,7 @@ public class ActDefCache extends DescriptionObjectCache<ActivityDef> { }
@Override
- public ActivityDef loadObject(String name, String version, ItemProxy proxy) throws ObjectNotFoundException, InvalidDataException {
+ public ActivityDef loadObject(String name, int version, ItemProxy proxy) throws ObjectNotFoundException, InvalidDataException {
ActivityDef thisActDef;
String actType = proxy.getProperty("Complexity");
Viewpoint actView = (Viewpoint)proxy.getObject(ClusterStorage.VIEWPOINT + "/" + actType + "ActivityDef/" + version);
diff --git a/src/main/java/com/c2kernel/utils/DescriptionObject.java b/src/main/java/com/c2kernel/utils/DescriptionObject.java index eff0a57..4d7d108 100644 --- a/src/main/java/com/c2kernel/utils/DescriptionObject.java +++ b/src/main/java/com/c2kernel/utils/DescriptionObject.java @@ -3,6 +3,6 @@ package com.c2kernel.utils; public interface DescriptionObject {
public String getName();
- public String getVersion();
+ public int getVersion();
}
diff --git a/src/main/java/com/c2kernel/utils/DescriptionObjectCache.java b/src/main/java/com/c2kernel/utils/DescriptionObjectCache.java index a8cd197..d5382da 100644 --- a/src/main/java/com/c2kernel/utils/DescriptionObjectCache.java +++ b/src/main/java/com/c2kernel/utils/DescriptionObjectCache.java @@ -15,7 +15,7 @@ public abstract class DescriptionObjectCache<D extends DescriptionObject> { SoftCache<String, CacheEntry<D>> cache = new SoftCache<String, CacheEntry<D>>();
- public D get(String name, String version) throws ObjectNotFoundException, InvalidDataException {
+ public D get(String name, int version) throws ObjectNotFoundException, InvalidDataException {
D thisDef;
synchronized(cache) {
CacheEntry<D> thisDefEntry = cache.get(name+"_"+version);
@@ -35,7 +35,7 @@ public abstract class DescriptionObjectCache<D extends DescriptionObject> { public abstract String getDefRoot();
- public abstract D loadObject(String name, String version, ItemProxy proxy) throws ObjectNotFoundException, InvalidDataException;
+ public abstract D loadObject(String name, int version, ItemProxy proxy) throws ObjectNotFoundException, InvalidDataException;
public void removeAct(String id) {
synchronized(cache) {
diff --git a/src/main/java/com/c2kernel/utils/LocalObjectLoader.java b/src/main/java/com/c2kernel/utils/LocalObjectLoader.java index f139b84..c17db40 100644 --- a/src/main/java/com/c2kernel/utils/LocalObjectLoader.java +++ b/src/main/java/com/c2kernel/utils/LocalObjectLoader.java @@ -67,12 +67,12 @@ public class LocalObjectLoader { * @return ActivityDef
* @throws ObjectNotFoundException - When activity or version does not exist
*/
- static public ActivityDef getActDef(String actName, String actVersion) throws ObjectNotFoundException, InvalidDataException {
+ static public ActivityDef getActDef(String actName, int actVersion) throws ObjectNotFoundException, InvalidDataException {
Logger.msg(5, "Loading activity def "+actName+" v"+actVersion);
return actCache.get(actName, actVersion);
}
- static public StateMachine getStateMachine(String smName, String smVersion) throws ObjectNotFoundException, InvalidDataException {
+ static public StateMachine getStateMachine(String smName, int smVersion) throws ObjectNotFoundException, InvalidDataException {
Logger.msg(5, "Loading activity def "+smName+" v"+smVersion);
return smCache.get(smName, smVersion);
}
diff --git a/src/main/java/com/c2kernel/utils/StateMachineCache.java b/src/main/java/com/c2kernel/utils/StateMachineCache.java index 0088efd..371df4d 100644 --- a/src/main/java/com/c2kernel/utils/StateMachineCache.java +++ b/src/main/java/com/c2kernel/utils/StateMachineCache.java @@ -21,7 +21,7 @@ public class StateMachineCache extends DescriptionObjectCache<StateMachine> { }
@Override
- public StateMachine loadObject(String name, String version, ItemProxy proxy) throws ObjectNotFoundException, InvalidDataException {
+ public StateMachine loadObject(String name, int version, ItemProxy proxy) throws ObjectNotFoundException, InvalidDataException {
StateMachine thisStateMachine;
Viewpoint smView = (Viewpoint)proxy.getObject(ClusterStorage.VIEWPOINT + "/StateMachine/" + version);
String marshalledSM;
diff --git a/src/main/resources/boot/OD/StateMachine.xsd b/src/main/resources/boot/OD/StateMachine.xsd index ceeaf22..d59070c 100644 --- a/src/main/resources/boot/OD/StateMachine.xsd +++ b/src/main/resources/boot/OD/StateMachine.xsd @@ -16,13 +16,13 @@ <xs:element name="Outcome">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="version" type="xs:string" use="required"/>
+ <xs:attribute name="version" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Script">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="version" type="xs:string" use="required"/>
+ <xs:attribute name="version" type="xs:int" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
diff --git a/src/main/resources/boot/SM/Default.xml b/src/main/resources/boot/SM/Default.xml index d58a976..f074926 100644 --- a/src/main/resources/boot/SM/Default.xml +++ b/src/main/resources/boot/SM/Default.xml @@ -13,10 +13,10 @@ <Outcome name="${SchemaType}" version="${SchemaVersion}"/>
<Script name="${ScriptName}" version="${ScriptVersion}"/>
</Transition>
- <Transition id="2" name="Suspend" origin="1" terminus="3">
+ <Transition id="3" name="Suspend" origin="1" terminus="3">
<Outcome name="Errors" version="0"/>
</Transition>
- <Transition id="2" name="Resume" origin="3" terminus="1" roleOverride="Admin" reservation="preserve"/>
+ <Transition id="4" name="Resume" origin="3" terminus="1" roleOverride="Admin" reservation="preserve"/>
</StateMachine>
diff --git a/src/main/resources/mapFiles/HistoryMap.xml b/src/main/resources/mapFiles/HistoryMap.xml index 85a2afa..ced8483 100644 --- a/src/main/resources/mapFiles/HistoryMap.xml +++ b/src/main/resources/mapFiles/HistoryMap.xml @@ -24,12 +24,21 @@ <field name="mSchemaVersion" type="integer" direct="false" get-method="getSchemaVersion" set-method="setSchemaVersion">
<bind-xml name="SchemaVersion" node="attribute"/>
</field>
+ <field name="mStateMachineName" type="string" direct="false" get-method="getStateMachineName" set-method="setStateMachineName">
+ <bind-xml name="StateMachineName" node="attribute"/>
+ </field>
+ <field name="mStateMachineVersion" type="integer" direct="false" get-method="getStateMachineVersion" set-method="setStateMachineVersion">
+ <bind-xml name="StateMachineVersion" node="attribute"/>
+ </field>
<field name="mViewName" type="string" direct="false" get-method="getViewName" set-method="setViewName">
<bind-xml name="ViewName" node="attribute"/>
</field>
- <field name="mCurrentState" type="integer" direct="false" get-method="getCurrentState" set-method="setCurrentState">
- <bind-xml name="CurrentState" node="attribute"/>
+ <field name="mOriginState" type="integer" direct="false" get-method="getOriginState" set-method="setOriginState">
+ <bind-xml name="OriginState" node="attribute"/>
</field>
+ <field name="mTargetState" type="integer" direct="false" get-method="getTargetState" set-method="setTargetState">
+ <bind-xml name="TargetState" node="attribute"/>
+ </field>
<field name="mTransition" type="integer" direct="false" get-method="getTransition" set-method="setTransition">
<bind-xml name="Transition" node="attribute"/>
</field>
@@ -37,7 +46,7 @@ <field name="mAgentName" type="string" direct="false"
get-method="getAgentName"
set-method="setAgentName">
- <bind-xml name="AgentId" node="attribute"/>
+ <bind-xml name="AgentName" node="attribute"/>
</field>
<field name="mAgentRole" type="string" direct="false"
get-method="getAgentRole"
diff --git a/src/main/resources/mapFiles/JobListMap.xml b/src/main/resources/mapFiles/JobListMap.xml index ee18d48..84d40ae 100644 --- a/src/main/resources/mapFiles/JobListMap.xml +++ b/src/main/resources/mapFiles/JobListMap.xml @@ -17,38 +17,20 @@ <field name="stepPath" type="string" direct="false" get-method="getStepPath" set-method="setStepPath">
<bind-xml name="StepPath" node="attribute"/>
</field>
- <field name="transitionId" type="integer" direct="false" get-method="getTransitionId" set-method="setTransitionId">
- <bind-xml name="TransitionId" node="attribute"/>
- </field>
- <field name="currentStateId" type="integer" direct="false" get-method="getCurrentStateId" set-method="setCurrentStateId">
- <bind-xml name="CurrentStateId" node="attribute"/>
- </field>
- <field name="targetStateId" type="integer" direct="false" get-method="getTargetStateId" set-method="setTargetStateId">
- <bind-xml name="TargetStateId" node="attribute"/>
- </field>
- <field name="agentId" type="integer" direct="false" get-method="getAgentId" set-method="setAgentId">
- <bind-xml name="AgentId" node="attribute"/>
+ <field name="transition" type="com.c2kernel.lifecycle.instance.stateMachine.Transition" direct="false" get-method="getTransition" set-method="setTransition">
+ <bind-xml name="Transition" node="attribute"/>
</field>
<field name="agentName" type="string" direct="false" get-method="getAgentName" set-method="setAgentName">
<bind-xml name="AgentName" node="attribute"/>
</field>
- <field name="agentRole" type="string" direct="false" get-method="getAgentRole" set-method="setAgentRole">
- <bind-xml name="AgentRole" node="attribute"/>
- </field>
- <field name="schemaName" type="string" direct="false" get-method="getSchemaName" set-method="setSchemaName">
- <bind-xml name="SchemaName" node="attribute"/>
- </field>
- <field name="schemaVersion" type="integer" direct="false" get-method="getSchemaVersion" set-method="setSchemaVersion">
- <bind-xml name="SchemaVersion" node="attribute"/>
- </field>
- <field name="outcomeRequired" type="boolean" direct="false" get-method="isOutcomeRequired" set-method="setOutcomeRequired">
- <bind-xml name="OutcomeRequired" node="attribute"/>
+ <field name="originStateName" type="string" direct="false" get-method="getOriginStateName" set-method="setOriginStateName">
+ <bind-xml name="OriginState" node="attribute"/>
</field>
- <field name="scriptName" type="string" direct="false" get-method="getScriptName" set-method="setScriptName">
- <bind-xml name="ScriptName" node="attribute"/>
+ <field name="targetStateName" type="string" direct="false" get-method="getTargetStateName" set-method="setTargetStateName">
+ <bind-xml name="TargetState" node="attribute"/>
</field>
- <field name="scriptVersion" type="integer" direct="false" get-method="getScriptVersion" set-method="setScriptVersion">
- <bind-xml name="ScriptVersion" node="attribute"/>
+ <field name="agentRole" type="string" direct="false" get-method="getAgentRole" set-method="setAgentRole">
+ <bind-xml name="AgentRole" node="attribute"/>
</field>
<field name="actProps" type="com.c2kernel.utils.KeyValuePair" collection="array" container="false" direct="false" get-method="getKeyValuePairs" set-method="setKeyValuePairs">
<bind-xml name="ActProps" node="element"/>
diff --git a/src/main/resources/mapFiles/LifeCycleMap.xml b/src/main/resources/mapFiles/LifeCycleMap.xml index d0f2e2c..472fe84 100644 --- a/src/main/resources/mapFiles/LifeCycleMap.xml +++ b/src/main/resources/mapFiles/LifeCycleMap.xml @@ -60,12 +60,6 @@ <field name="stateDate" type="com.c2kernel.common.GTimeStamp" direct="false">
<bind-xml name="stateDate" node="element"/>
</field>
- <field name="startDate" type="com.c2kernel.common.GTimeStamp" direct="false">
- <bind-xml name="startDate" node="element"/>
- </field>
- <field name="activeDate" type="com.c2kernel.common.GTimeStamp" direct="false">
- <bind-xml name="activeDate" node="element"/>
- </field>
</class>
<class name="com.c2kernel.lifecycle.instance.CompositeActivity" extends="com.c2kernel.lifecycle.instance.Activity">
<map-to xml="CompositeActivity"/>
|
