From 0f892332b19ba8741a7db66a5c4daa386b2b5c1e Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 25 Oct 2013 17:27:29 +0200 Subject: Changes and refactoring to gui requirements Used descriptions must use an integer version. --- .../com/c2kernel/entity/agent/ActiveEntity.java | 2 +- src/main/java/com/c2kernel/entity/agent/Job.java | 177 +++++++-------------- .../java/com/c2kernel/entity/proxy/ItemProxy.java | 10 +- src/main/java/com/c2kernel/events/Event.java | 50 ++++-- src/main/java/com/c2kernel/events/History.java | 44 +++-- .../java/com/c2kernel/lifecycle/ActivityDef.java | 7 +- .../com/c2kernel/lifecycle/ActivitySlotDef.java | 4 +- .../com/c2kernel/lifecycle/instance/Activity.java | 8 +- .../predefined/CreateItemFromDescription.java | 6 +- .../lifecycle/instance/predefined/Import.java | 2 +- .../predefined/entitycreation/NewItem.java | 7 +- .../instance/stateMachine/StateMachine.java | 6 +- .../instance/stateMachine/Transition.java | 30 +++- src/main/java/com/c2kernel/process/Bootstrap.java | 9 +- .../java/com/c2kernel/process/UserCodeProcess.java | 30 +--- src/main/java/com/c2kernel/utils/ActDefCache.java | 2 +- .../java/com/c2kernel/utils/DescriptionObject.java | 2 +- .../com/c2kernel/utils/DescriptionObjectCache.java | 4 +- .../java/com/c2kernel/utils/LocalObjectLoader.java | 4 +- .../java/com/c2kernel/utils/StateMachineCache.java | 2 +- src/main/resources/boot/OD/StateMachine.xsd | 4 +- src/main/resources/boot/SM/Default.xml | 4 +- src/main/resources/mapFiles/HistoryMap.xml | 15 +- src/main/resources/mapFiles/JobListMap.xml | 34 +--- src/main/resources/mapFiles/LifeCycleMap.xml | 6 - 25 files changed, 219 insertions(+), 250 deletions(-) (limited to 'src') 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 { 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 { 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 states; private ArrayList 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 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 { } @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 { SoftCache> cache = new SoftCache>(); - 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 thisDefEntry = cache.get(name+"_"+version); @@ -35,7 +35,7 @@ public abstract class DescriptionObjectCache { 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 { } @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 @@ - + - + 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 @@