From da731d2bb81666b9c697d9099da632e7dfcdc0f7 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 9 Sep 2014 12:13:21 +0200 Subject: Replaced int sysKey Item identifier with UUID, which is now portable. ItemPath objects are now used to identify Items throughout the kernel, replacing ints and Integers. --- .../instance/predefined/AddC2KObject.java | 20 ++++---- .../instance/predefined/AddDomainPath.java | 21 +++------ .../instance/predefined/AddMemberToCollection.java | 38 ++++++++-------- .../lifecycle/instance/predefined/AddNewSlot.java | 35 +++++++------- .../instance/predefined/AssignItemToSlot.java | 43 +++++++++--------- .../lifecycle/instance/predefined/ClearSlot.java | 26 ++++++----- .../lifecycle/instance/predefined/Import.java | 26 ++++++----- .../instance/predefined/PredefinedStep.java | 11 ++++- .../instance/predefined/RemoveC2KObject.java | 22 ++++----- .../instance/predefined/RemoveDomainPath.java | 25 +++++----- .../predefined/RemoveSlotFromCollection.java | 53 +++++++++++++++------- .../instance/predefined/ReplaceDomainWorkflow.java | 27 +++++------ .../instance/predefined/WriteProperty.java | 21 ++++----- .../instance/predefined/WriteViewpoint.java | 25 +++++----- .../agent/CreateAgentFromDescription.java | 17 +++---- .../instance/predefined/agent/RemoveAgent.java | 13 +++--- .../predefined/agent/SetAgentPassword.java | 7 +-- .../instance/predefined/agent/SetAgentRoles.java | 7 +-- .../predefined/item/CreateItemFromDescription.java | 42 ++++++++--------- .../lifecycle/instance/predefined/item/Erase.java | 10 ++-- .../predefined/server/AddDomainContext.java | 3 +- .../instance/predefined/server/CreateNewAgent.java | 7 +-- .../instance/predefined/server/CreateNewItem.java | 7 +-- .../predefined/server/RemoveDomainContext.java | 5 +- 24 files changed, 272 insertions(+), 239 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java index 8416820..893ecea 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java @@ -11,9 +11,12 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -35,25 +38,20 @@ public class AddC2KObject extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { - Logger.msg(1, "AddC2KObject::request() - Starting."); - + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AddC2KObject: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); try { - - Logger.msg(5, "AddC2KObject::request() - data:" + getDataList(requestData)[0]); - C2KLocalObject obj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(getDataList(requestData)[0]); - Gateway.getStorage().put(itemSysKey, obj, null ); - Logger.msg(1, "AddC2KObject::request() - DONE."); + C2KLocalObject obj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(params[0]); + Gateway.getStorage().put(item, obj, null ); return requestData; } catch( Exception ex ) { - Logger.error("AddC2KObject::request() - during unmarshall."); - Logger.error(ex); - throw new InvalidDataException(ex.toString(), ""); + throw unknownException(ex); } } } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java index 4c02cbb..daa8fcc 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java @@ -10,10 +10,11 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.lookup.InvalidItemPathException; import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.LookupManager; import com.c2kernel.process.Gateway; @@ -28,30 +29,22 @@ public class AddDomainPath extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { - Logger.msg(1,"AddAlias::request() - Starting."); + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AddDomainPath: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); try { LookupManager lookupManager = Gateway.getLookupManager(); - DomainPath domainPath = new DomainPath(getDataList(requestData)[0], new ItemPath(itemSysKey)); + DomainPath domainPath = new DomainPath(params[0], item); lookupManager.add(domainPath); - Logger.msg(8,"AddDomainPath::request() - systemKey:" + itemSysKey + - ". Adding dompath. DONE."); return requestData; } - catch (InvalidItemPathException ex) - { - Logger.error(ex); - throw new InvalidDataException(ex.toString(), ""); - } catch( Exception ex ) { - Logger.error("AddDomainPath::request() - during anyHelper.extract."); - Logger.error(ex); - throw new InvalidDataException(ex.toString(), ""); + throw unknownException(ex); } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddMemberToCollection.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddMemberToCollection.java index 98ef8e3..889ee80 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddMemberToCollection.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddMemberToCollection.java @@ -12,12 +12,16 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; +import java.util.UUID; + import com.c2kernel.collection.Dependency; import com.c2kernel.collection.MembershipException; import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -48,59 +52,55 @@ public class AddMemberToCollection extends PredefinedStep * 1 - target entity key */ @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String collName; - int entityKey; + ItemPath newChild; Dependency dep; CastorHashMap props = null; - Logger.msg(1, "AddMemberToCollection::request() - Starting."); - // extract parameters + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AddMemberToCollection: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); try { - String[] params = getDataList(requestData); collName = params[0]; - entityKey = Integer.parseInt(params[1]); + newChild = new ItemPath(UUID.fromString(params[1])); if (params.length > 2) props = (CastorHashMap)Gateway.getMarshaller().unmarshall(params[2]); } catch (Exception e) { - throw new InvalidDataException("Invalid parameters", ""); + throw new InvalidDataException("AddMemberToCollection: Invalid parameters "+Arrays.toString(params), ""); } // load collection C2KLocalObject collObj; try { - collObj = Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + collObj = Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName, null); } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Collection '"+collName+"' not found in this Item", ""); + throw new InvalidDataException("AddMemberToCollection: Collection '"+collName+"' not found in this Item", ""); } catch (ClusterStorageException ex) { Logger.error(ex); - throw new InvalidDataException("Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); + throw new InvalidDataException("AddMemberToCollection: Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); } - if (!(collObj instanceof Dependency)) throw new InvalidDataException("AddMemberToCollection operates on Dependency collections only.", ""); + if (!(collObj instanceof Dependency)) throw new InvalidDataException("AddMemberToCollection: AddMemberToCollection operates on Dependency collections only.", ""); dep = (Dependency)collObj; // find member and assign entity try { if (props == null) - dep.addMember(entityKey); + dep.addMember(newChild); else - dep.addMember(entityKey, props, null); + dep.addMember(newChild, props, null); } catch (MembershipException e) { - throw new InvalidDataException("Entity "+entityKey+" is the wrong type for this collection", ""); + throw new InvalidDataException("AddMemberToCollection: Item "+newChild+" is the wrong type for this collection", ""); } try { - Gateway.getStorage().put(itemSysKey, dep, null); + Gateway.getStorage().put(newChild, dep, null); } catch (ClusterStorageException e) { - Logger.error(e); - throw new InvalidDataException("Error storing collection", ""); + throw unknownException(e); } - - Logger.msg(1, "AddMemberToCollection::request() - DONE."); return requestData; } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddNewSlot.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddNewSlot.java index e38f71d..257c644 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddNewSlot.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddNewSlot.java @@ -12,11 +12,15 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; +import java.util.UUID; + import com.c2kernel.collection.Aggregation; import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -50,46 +54,46 @@ public class AddNewSlot extends PredefinedStep * 1 - Item Description key (optional) */ @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String collName; - int descKey=-1; + ItemPath descKey = null; Aggregation agg; - Logger.msg(1, "AddNewSlot::request() - Starting."); - // extract parameters + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AddNewSlot: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + try { - String[] params = getDataList(requestData); collName = params[0]; - if (params.length > 1) descKey = Integer.parseInt(params[1]); + if (params.length > 1 && params[1].length() > 0) descKey = new ItemPath(UUID.fromString(params[1])); } catch (Exception e) { - throw new InvalidDataException("Invalid parameters", ""); + throw new InvalidDataException("AddNewSlot: Invalid parameters "+Arrays.toString(params), ""); } // load collection C2KLocalObject collObj; try { - collObj = Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + collObj = Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName, null); } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Collection '"+collName+"' not found in this Item", ""); + throw new InvalidDataException("AddNewSlot: Collection '"+collName+"' not found in this Item", ""); } catch (ClusterStorageException ex) { Logger.error(ex); - throw new InvalidDataException("Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); + throw new InvalidDataException("AddNewSlot: Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); } - if (!(collObj instanceof Aggregation)) throw new InvalidDataException("AddNewSlot operates on Aggregation collections only.", ""); + if (!(collObj instanceof Aggregation)) throw new InvalidDataException("AddNewSlot: AddNewSlot operates on Aggregation collections only.", ""); agg = (Aggregation)collObj; // get props CastorHashMap props = new CastorHashMap(); StringBuffer classProps = new StringBuffer(); - if (descKey > -1) { + if (descKey != null) { PropertyDescriptionList propList; try { propList = PropertyUtility.getPropertyDescriptionOutcome(descKey); } catch (ObjectNotFoundException e) { - throw new InvalidDataException("Item "+descKey+" does not contain a PropertyDescription outcome to define a slot", ""); + throw new InvalidDataException("AddNewSlot: Item "+descKey+" does not contain a PropertyDescription outcome to define a slot", ""); } for (PropertyDescription pd : propList.list) { props.put(pd.getName(), pd.getDefaultValue()); @@ -101,13 +105,12 @@ public class AddNewSlot extends PredefinedStep agg.addSlot(props, classProps.toString()); try { - Gateway.getStorage().put(itemSysKey, agg, null); + Gateway.getStorage().put(item, agg, null); } catch (ClusterStorageException e) { Logger.error(e); - throw new InvalidDataException("Error storing collection", ""); + throw new InvalidDataException("AddNewSlot: Error storing collection", ""); } - Logger.msg(1, "AddNewSlot::request() - DONE."); return requestData; } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AssignItemToSlot.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AssignItemToSlot.java index 78d4087..724e974 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AssignItemToSlot.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AssignItemToSlot.java @@ -12,6 +12,9 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; +import java.util.UUID; + import com.c2kernel.collection.Aggregation; import com.c2kernel.collection.AggregationMember; import com.c2kernel.collection.MembershipException; @@ -19,6 +22,7 @@ import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -47,67 +51,64 @@ public class AssignItemToSlot extends PredefinedStep * 2 - target entity key */ @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String collName; int slotNo; - int sysKey; + ItemPath childItem; Aggregation agg; - Logger.msg(1, "AssignItemToSlot::request() - Starting."); - - // extract parameters + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AssignItemToSlot: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + try { - String[] params = getDataList(requestData); collName = params[0]; slotNo = Integer.parseInt(params[1]); - sysKey = Integer.parseInt(params[2]); + childItem = new ItemPath(UUID.fromString(params[2])); } catch (Exception e) { - throw new InvalidDataException("Invalid parameters", ""); + throw new InvalidDataException("AssignItemToSlot: Invalid parameters "+Arrays.toString(params), ""); } // load collection C2KLocalObject collObj; try { - collObj = Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + collObj = Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName, null); } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Collection '"+collName+"' not found in this Item", ""); + throw new InvalidDataException("AssignItemToSlot: Collection '"+collName+"' not found in this Item", ""); } catch (ClusterStorageException ex) { Logger.error(ex); - throw new InvalidDataException("Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); + throw new InvalidDataException("AssignItemToSlot: Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); } - if (!(collObj instanceof Aggregation)) throw new InvalidDataException("AssignItemToSlot operates on Aggregation collections only.", ""); + if (!(collObj instanceof Aggregation)) throw new InvalidDataException("AssignItemToSlot: AssignItemToSlot operates on Aggregation collections only.", ""); agg = (Aggregation)collObj; // find member and assign entity boolean stored = false; for (AggregationMember member : agg.getMembers().list) { if (member.getID() == slotNo) { - if (member.getSystemKey() > -1) - throw new InvalidDataException("Member slot not empty", ""); + if (member.getItemPath() != null) + throw new InvalidDataException("AssignItemToSlot: Member slot "+slotNo+" not empty", ""); try { - member.assignItem(sysKey); + member.assignItem(childItem); } catch (MembershipException e) { - throw new InvalidDataException("Entity "+sysKey+" does not fit in this slot", ""); + throw new InvalidDataException("AssignItemToSlot: Item "+childItem+" does not fit in slot "+slotNo, ""); } stored = true; break; } } if (!stored) { - throw new InvalidDataException("Member slot "+slotNo+" not found.", ""); + throw new InvalidDataException("AssignItemToSlot: Member slot "+slotNo+" not found.", ""); } try { - Gateway.getStorage().put(itemSysKey, agg, null); + Gateway.getStorage().put(item, agg, null); } catch (ClusterStorageException e) { - Logger.error(e); - throw new InvalidDataException("Error storing collection", ""); + unknownException(e); } - Logger.msg(1, "AssignItemToSlot::request() - DONE."); return requestData; } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ClearSlot.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ClearSlot.java index 772f62e..c6bb654 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ClearSlot.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ClearSlot.java @@ -12,11 +12,14 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.collection.Aggregation; import com.c2kernel.collection.AggregationMember; import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -44,40 +47,40 @@ public class ClearSlot extends PredefinedStep * 1 - slot number */ @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String collName; int slotNo; Aggregation agg; - Logger.msg(1, "ClearSlot::request() - Starting."); - // extract parameters + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "ClearSlot: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + try { - String[] params = getDataList(requestData); collName = params[0]; slotNo = Integer.parseInt(params[1]); } catch (Exception e) { - throw new InvalidDataException("Invalid parameters", ""); + throw new InvalidDataException("ClearSlot: Invalid parameters "+Arrays.toString(params), ""); } // load collection try { - agg = (Aggregation)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + agg = (Aggregation)Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName, null); } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Collection '"+collName+"' not found in this Item", ""); + throw new InvalidDataException("ClearSlot: Collection '"+collName+"' not found in this Item", ""); } catch (ClusterStorageException ex) { Logger.error(ex); - throw new InvalidDataException("Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); + throw new InvalidDataException("ClearSlot: Error loading collection '"+collName+"': "+ex.getMessage(), ""); } // find member and clear boolean stored = false; for (AggregationMember member : agg.getMembers().list) { if (member.getID() == slotNo) { - if (member.getSystemKey() > -1) - throw new InvalidDataException("Member slot already empty", ""); + if (member.getItemPath() != null) + throw new InvalidDataException("ClearSlot: Member slot "+slotNo+" already empty", ""); member.clearItem(); stored = true; break; @@ -89,12 +92,11 @@ public class ClearSlot extends PredefinedStep try { - Gateway.getStorage().put(itemSysKey, agg, null); + Gateway.getStorage().put(item, agg, null); } catch (ClusterStorageException e) { Logger.error(e); throw new InvalidDataException("Error storing collection", ""); } - Logger.msg(1, "ClearSlot::request() - DONE."); return requestData; } } 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 29d4c54..8a80d60 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Import.java @@ -7,10 +7,13 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.events.Event; import com.c2kernel.events.History; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.persistency.TransactionManager; import com.c2kernel.persistency.outcome.Outcome; @@ -37,19 +40,18 @@ public class Import extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { - - Logger.msg(8,"Import::request()"); - - Logger.msg(1,"Import::request() - Starting."); String[] params = getDataList(requestData); - - + if (Logger.doLog(3)) Logger.msg(3, "Import: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + int split1 = params[0].indexOf('_'); int split2 = params[0].indexOf(':'); + if (split1 == -1) + throw new InvalidDataException("Import: Invalid parameters "+Arrays.toString(params)); + requestData = params[1]; String schemaName = params[0].substring(0, split1); @@ -73,17 +75,17 @@ public class Import extends PredefinedStep TransactionManager storage = Gateway.getStorage(); Object locker = getWf(); History hist = getWf().getHistory(); - Event event = hist.addEvent(agent.getAgentName(), getCurrentAgentRole(), getName(), getPath(), getType(), schemaName, schemaVersion, getStateMachine().getName(), getStateMachine().getVersion(), getStateMachine().getTransition(transitionID), viewpoint, timestamp); + Event event = hist.addEvent(agent, 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), locker); - storage.put(itemSysKey, new Viewpoint(itemSysKey, schemaName, viewpoint, schemaVersion, event.getID()), locker); + storage.put(item, new Outcome(event.getID(), requestData, schemaName, schemaVersion), locker); + storage.put(item, new Viewpoint(item, schemaName, viewpoint, schemaVersion, event.getID()), locker); if (!"last".equals(viewpoint)) - storage.put(itemSysKey, new Viewpoint(itemSysKey, schemaName, "last", schemaVersion, event.getID()), locker); + storage.put(item, new Viewpoint(item, schemaName, "last", schemaVersion, event.getID()), locker); } catch (ClusterStorageException e) { Logger.error(e); storage.abort(locker); - throw new InvalidDataException("Could not store imported outcome. Rolled back."); + throw new InvalidDataException("Import: Could not store imported outcome. Rolled back.", ""); } storage.commit(locker); return requestData; diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java index d0fde2a..7a318ba 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/PredefinedStep.java @@ -12,6 +12,7 @@ import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.InputSource; +import com.c2kernel.common.InvalidDataException; import com.c2kernel.lifecycle.instance.Activity; import com.c2kernel.persistency.outcome.Outcome; import com.c2kernel.utils.Logger; @@ -121,12 +122,20 @@ public abstract class PredefinedStep extends Activity return xmlData.toString(); } } + public InvalidDataException unknownException(Exception ex) { + String stepName = this.getClass().getSimpleName(); + Logger.error(stepName+": Exception:"); + Logger.error(ex); + return new InvalidDataException(stepName+": "+ex.getClass().getSimpleName()+". See log.", ""); + } + // generic bundling of single parameter static public String bundleData(String data) { return ""; } - static public String[] getDataList(String xmlData) + + public static String[] getDataList(String xmlData) { try { diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveC2KObject.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveC2KObject.java index 44d4c5d..fe4e1c8 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveC2KObject.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveC2KObject.java @@ -13,8 +13,11 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -34,28 +37,21 @@ public class RemoveC2KObject extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { - Logger.msg(1, "RemoveC2KObject::request() - Starting."); + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "RemoveC2KObject: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); - String path = null; try { - path = getDataList(requestData)[0]; - - Logger.msg(5, "RemoveC2KObject::request() - path:"+path); - - Gateway.getStorage().remove( itemSysKey, path, null ); + String path = params[0]; + Gateway.getStorage().remove( item, path, null ); } catch( Exception ex ) { - Logger.error("RemoveC2KObject::request() - invalid data - path:"+path); - Logger.error(ex); - throw new InvalidDataException(ex.toString(), ""); + throw unknownException(ex); } - - Logger.msg(1, "RemoveC2KObject::request() - DONE."); return requestData; } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java index df1c44e..4aabd6b 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveDomainPath.java @@ -10,10 +10,13 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.LookupManager; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -27,34 +30,30 @@ public class RemoveDomainPath extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { - Logger.msg(8,"RemoveDomainPath::request()"); - - - Logger.msg(1,"RemoveDomainPath::request() - Starting."); + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "RemoveDomainPath: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); - DomainPath domainPath = new DomainPath(getDataList(requestData)[0]); + DomainPath domainPath = new DomainPath(params[0]); if (!domainPath.exists()) - throw new InvalidDataException("Domain path "+domainPath.toString()+" does not exist.", ""); + throw new InvalidDataException("RemoveDomainPath: Domain path "+domainPath.toString()+" does not exist.", ""); if (domainPath.getType()!=DomainPath.ENTITY) try { - if (domainPath.getEntity().getSysKey() != itemSysKey) - throw new InvalidDataException("Domain path "+domainPath.toString()+" is not an alias of the current Item "+itemSysKey, ""); + if (!domainPath.getItemPath().equals(item)) + throw new InvalidDataException("RemoveDomainPath: Domain path "+domainPath.toString()+" is not an alias of the current Item "+item, ""); } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Domain path "+domainPath.toString()+" is a context.", ""); + throw new InvalidDataException("RemoveDomainPath: Domain path "+domainPath.toString()+" is a context.", ""); } try { LookupManager lookupManager = Gateway.getLookupManager(); lookupManager.delete(domainPath); - Logger.msg(8,"AddAlias::request() - context:" + domainPath.toString() + " DONE."); return requestData; } catch (Exception ex) { - Logger.error(ex); - throw new InvalidDataException("Problem updating directory", ""); + throw unknownException(ex); } } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java index 38638cd..726078b 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java @@ -12,12 +12,16 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; +import java.util.UUID; + import com.c2kernel.collection.Collection; import com.c2kernel.collection.CollectionMember; import com.c2kernel.collection.MembershipException; import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -46,42 +50,57 @@ public class RemoveSlotFromCollection extends PredefinedStep * 2 - target entity key */ @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String collName; - int slotNo; - int sysKey = -1; + int slotNo = -1; + ItemPath currentChild = null; Collection coll; - Logger.msg(1, "RemoveSlotFromCollection::request() - Starting."); - // extract parameters + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "RemoveSlotFromCollection: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + try { - String[] params = getDataList(requestData); collName = params[0]; - slotNo = params[1].length()>0?Integer.parseInt(params[1]):-1; - if (params.length>2) sysKey = params[2].length()>0?Integer.parseInt(params[2]):-1; + if (params.length>1 && params[1].length()>0) slotNo = Integer.parseInt(params[1]); + if (params.length>2 && params[2].length()>0) currentChild = new ItemPath(UUID.fromString(params[2])); } catch (Exception e) { - throw new InvalidDataException("Invalid parameters", ""); + throw new InvalidDataException("RemoveSlotFromCollection: Invalid parameters "+Arrays.toString(params), ""); } - if (slotNo == -1 && sysKey == -1) - throw new InvalidDataException("Must give either slot number or entity key", ""); + if (slotNo == -1 && currentChild == null) + throw new InvalidDataException("RemoveSlotFromCollection: Must give either slot number or entity key", ""); // load collection try { - coll = (Collection)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + coll = (Collection)Gateway.getStorage().get(item, ClusterStorage.COLLECTION+"/"+collName, null); } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Collection '"+collName+"' not found in this Item", ""); + throw new InvalidDataException("RemoveSlotFromCollection: Collection '"+collName+"' not found in this Item", ""); } catch (ClusterStorageException ex) { Logger.error(ex); - throw new InvalidDataException("Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); + throw new InvalidDataException("RemoveSlotFromCollection: Error loading collection '\"+collName+\"': "+ex.getMessage(), ""); } + // check the slot is there if it's given by id + CollectionMember slot = null; + if (slotNo > -1) { + try { + slot = coll.getMember(slotNo); + } catch (ObjectNotFoundException e) { + throw new InvalidDataException("RemoveSlotFromCollection: Slot "+slotNo+" not found in this collection", ""); + } + } + + // if both parameters are supplied, check the given item is actually in that slot + if (slot != null && !slot.getItemPath().equals(currentChild)) { + throw new InvalidDataException("RemoveSlotFromCollection: Item "+currentChild+" was not in slot "+slotNo, ""); + } + if (slotNo == -1) { // find slot from entity key for (CollectionMember member : coll.getMembers().list) { - if (member.getSystemKey() == sysKey) { + if (member.getItemPath().equals(currentChild)) { slotNo = member.getID(); break; } @@ -100,12 +119,12 @@ public class RemoveSlotFromCollection extends PredefinedStep // Store the collection try { - Gateway.getStorage().put(itemSysKey, coll, null); + Gateway.getStorage().put(item, coll, null); } catch (ClusterStorageException e) { Logger.error(e); throw new InvalidDataException("Error storing collection", ""); } - Logger.msg(1, "RemoveSlotFromCollection::request() - DONE."); + return requestData; } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java index 2163d4c..74570a0 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java @@ -1,11 +1,14 @@ package com.c2kernel.lifecycle.instance.predefined; //Java +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.graph.model.GraphPoint; import com.c2kernel.lifecycle.instance.CompositeActivity; import com.c2kernel.lifecycle.instance.Workflow; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -18,33 +21,31 @@ public class ReplaceDomainWorkflow extends PredefinedStep } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { + Workflow lifeCycle = getWf(); - - Logger.msg(1, "ReplaceDomainWorkflow::request() - Starting "); - + + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "AddC2KObject: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); + try { - Logger.msg(8, "ReplaceDomainWorkflow::request() - data:" + getDataList(requestData)[0]); lifeCycle.getChildGraphModel().removeVertex(lifeCycle.search("workflow/domain")); - CompositeActivity domain = (CompositeActivity) Gateway.getMarshaller().unmarshall(getDataList(requestData)[0]); + CompositeActivity domain = (CompositeActivity) Gateway.getMarshaller().unmarshall(params[0]); domain.setName("domain"); lifeCycle.initChild(domain, true, new GraphPoint(150, 100)); // if new workflow, activate it, otherwise refresh the jobs - if (!domain.active) lifeCycle.run(agent, itemSysKey); - else lifeCycle.refreshJobs(itemSysKey); + if (!domain.active) lifeCycle.run(agent, item); + else lifeCycle.refreshJobs(item); // store new wf - Gateway.getStorage().put(itemSysKey, lifeCycle, null); - Logger.msg(1, "ReplaceDomainWorkflow::request() - DONE."); + Gateway.getStorage().put(item, lifeCycle, null); return requestData; } catch (Exception ex) { - Logger.error("ReplaceDomainWorkflow::request() - during unmarshall."); - Logger.error(ex); - throw new InvalidDataException("ReplaceDomainWorkflow::request() - during unmarshall.", null); + throw unknownException(ex); } } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteProperty.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteProperty.java index abb0e95..079f8e0 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteProperty.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteProperty.java @@ -11,9 +11,12 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -37,16 +40,14 @@ public class WriteProperty extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { - Logger.msg(1, "WriteProperty::request() - Starting."); String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "WriteProperty: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); if (params.length != 2) - throw new InvalidDataException("WriteProperty usage: [ name, value ]", ""); - - Logger.msg(5, "WriteProperty::request() - name:" + params[0] +" val:"+params[1]); + throw new InvalidDataException("WriteProperty: invalid parameters "+Arrays.toString(params), ""); String name = params[0]; String newValue = params[1]; @@ -54,19 +55,17 @@ public class WriteProperty extends PredefinedStep Property prop; try { - prop = (Property)Gateway.getStorage().get(itemSysKey, ClusterStorage.PROPERTY+"/"+name, null); + prop = (Property)Gateway.getStorage().get(item, ClusterStorage.PROPERTY+"/"+name, null); if (!prop.isMutable() && !newValue.equals(prop.getValue())) - throw new InvalidDataException("Property '"+name+"' is not mutable.", ""); + throw new InvalidDataException("WriteProperty: Property '"+name+"' is not mutable.", ""); prop.setValue(newValue); - Gateway.getStorage().put(itemSysKey, prop, null); + Gateway.getStorage().put(item, prop, null); } catch (ObjectNotFoundException e) { throw new InvalidDataException("WriteProperty: Property '"+name+"' not found.", ""); } catch (ClusterStorageException e) { - Logger.error(e); - throw new InvalidDataException("Storage error. See logs.", ""); + throw unknownException(e); } - Logger.msg(1, "WriteProperty::request() - DONE."); return requestData; } } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java index 741a9a2..e64aceb 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/WriteViewpoint.java @@ -1,9 +1,12 @@ package com.c2kernel.lifecycle.instance.predefined; +import java.util.Arrays; + import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.events.Event; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.persistency.outcome.Viewpoint; @@ -17,19 +20,19 @@ public class WriteViewpoint extends PredefinedStep { } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String schemaName; String viewName; int evId; - - Logger.msg(1, "WriteViewpoint::request() - Starting."); + String[] params = getDataList(requestData); + if (Logger.doLog(3)) Logger.msg(3, "WriteViewpoint: called by "+agent+" on "+item+" with parameters "+Arrays.toString(params)); // outcometype, name and evId. Event and Outcome should be checked so schema version should be discovered. if (params.length != 3) - throw new InvalidDataException("WriteViewpoint usage: [ schemaName, viewName, eventId ]", ""); + throw new InvalidDataException("WriteViewpoint: Invalid parameters "+Arrays.toString(params), ""); schemaName = params[0]; viewName = params[1]; @@ -37,29 +40,29 @@ public class WriteViewpoint extends PredefinedStep { try { evId = Integer.parseInt(params[2]); } catch (NumberFormatException ex) { - throw new InvalidDataException("Parameter 3 (EventId) must be an integer", ""); + throw new InvalidDataException("WriteViewpoint: Parameter 3 (EventId) must be an integer", ""); } // Find event Event ev; try { - ev = (Event)Gateway.getStorage().get(itemSysKey, ClusterStorage.HISTORY+"/"+evId, null); + ev = (Event)Gateway.getStorage().get(item, ClusterStorage.HISTORY+"/"+evId, null); } catch (ObjectNotFoundException e) { Logger.error(e); - throw new InvalidDataException("Event "+evId+" not found", ""); + throw new InvalidDataException("WriteViewpoint: Event "+evId+" not found", ""); } catch (ClusterStorageException e) { Logger.error(e); - throw new InvalidDataException("Exception loading event", ""); + throw new InvalidDataException("WriteViewpoint: Exception loading event", ""); } // Write new viewpoint - Viewpoint newView = new Viewpoint(itemSysKey, schemaName, viewName, ev.getSchemaVersion(), evId); + Viewpoint newView = new Viewpoint(item, schemaName, viewName, ev.getSchemaVersion(), evId); try { - Gateway.getStorage().put(itemSysKey, newView, null); + Gateway.getStorage().put(item, newView, null); } catch (ClusterStorageException e) { Logger.error(e); - throw new InvalidDataException("Could not store new viewpoint", ""); + throw new InvalidDataException("WriteViewpoint: Could not store new viewpoint", ""); } return requestData; } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java index a7971f3..520f70f 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/CreateAgentFromDescription.java @@ -19,6 +19,7 @@ import com.c2kernel.entity.CorbaServer; import com.c2kernel.entity.agent.ActiveEntity; import com.c2kernel.lifecycle.instance.predefined.item.CreateItemFromDescription; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.RolePath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -42,7 +43,7 @@ public class CreateAgentFromDescription extends CreateItemFromDescription * @see com.c2kernel.lifecycle.instance.predefined.item.CreateItemFromDescription#runActivityLogic(com.c2kernel.lookup.AgentPath, int, int, java.lang.String) */ @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath itemPath, int transitionID, String requestData) throws InvalidDataException { String[] input = getDataList(requestData); @@ -67,8 +68,8 @@ public class CreateAgentFromDescription extends CreateItemFromDescription } catch (ObjectNotFoundException ex) { } // generate new entity key - Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey"); - AgentPath newAgentPath = Gateway.getNextKeyManager().generateNextAgentKey(); + Logger.msg(6, "CreateItemFromDescription - Requesting new agent path"); + AgentPath newAgentPath = new AgentPath(newName); // resolve the item factory Logger.msg(6, "CreateItemFromDescription - Resolving item factory"); @@ -77,7 +78,7 @@ public class CreateAgentFromDescription extends CreateItemFromDescription Logger.msg(3, "CreateItemFromDescription - Creating Item"); CorbaServer factory = Gateway.getCorbaServer(); if (factory == null) throw new AccessRightsException("This process cannot create new Items", ""); - ActiveEntity newAgent = (ActiveEntity)factory.createEntity(newAgentPath); + ActiveEntity newAgent = factory.createAgent(newAgentPath); Gateway.getLookupManager().add(newAgentPath); // initialise it with its properties and workflow @@ -85,10 +86,10 @@ public class CreateAgentFromDescription extends CreateItemFromDescription Logger.msg(3, "CreateItemFromDescription - Initializing Item"); newAgent.initialise( - agent.getSysKey(), - Gateway.getMarshaller().marshall(getNewProperties(itemSysKey, newName, agent)), - Gateway.getMarshaller().marshall(getNewWorkflow(itemSysKey)), - Gateway.getMarshaller().marshall(getNewCollections(itemSysKey)) + agent.getSystemKey(), + Gateway.getMarshaller().marshall(getNewProperties(itemPath, newName, agent)), + Gateway.getMarshaller().marshall(getNewWorkflow(itemPath)), + Gateway.getMarshaller().marshall(getNewCollections(itemPath)) ); // add roles if given diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/RemoveAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/RemoveAgent.java index 0630f6c..735a17d 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/RemoveAgent.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/RemoveAgent.java @@ -6,7 +6,8 @@ import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; -import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.InvalidAgentPathException; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.RolePath; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; @@ -19,16 +20,16 @@ public class RemoveAgent extends PredefinedStep { } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath itemPath, int transitionID, String requestData) throws InvalidDataException { Logger.msg(1, "RemoveAgent::request() - Starting."); AgentPath targetAgent; try { - targetAgent = new AgentPath(itemSysKey); - } catch (InvalidItemPathException ex) { - throw new InvalidDataException("Could not resolve syskey "+itemSysKey+" as an Agent."); + targetAgent = new AgentPath(itemPath); + } catch (InvalidAgentPathException ex) { + throw new InvalidDataException("Could not resolve "+itemPath+" as an Agent."); } String agentName = targetAgent.getAgentName(); @@ -49,7 +50,7 @@ public class RemoveAgent extends PredefinedStep { //clear out all storages try { - Gateway.getStorage().removeCluster(targetAgent.getSysKey(), "", null); + Gateway.getStorage().removeCluster(targetAgent, "", null); } catch (ClusterStorageException e) { Logger.error(e); throw new InvalidDataException("Error deleting storage for "+agentName, ""); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentPassword.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentPassword.java index 09fdefe..6c0caaa 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentPassword.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentPassword.java @@ -9,6 +9,7 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -19,16 +20,16 @@ public class SetAgentPassword extends PredefinedStep { } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { Logger.msg(1, "SetAgentPassword::request() - Starting."); AgentPath targetAgent; try { - targetAgent = new AgentPath(itemSysKey); + targetAgent = new AgentPath(item); } catch (InvalidItemPathException ex) { - throw new InvalidDataException("Could not resolve syskey "+itemSysKey+" as an Agent."); + throw new InvalidDataException("Could not resolve syskey "+item+" as an Agent."); } String agentName = targetAgent.getAgentName(); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentRoles.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentRoles.java index 8bcba30..8cdcc49 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentRoles.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/agent/SetAgentRoles.java @@ -7,6 +7,7 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.InvalidItemPathException; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.RolePath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -18,7 +19,7 @@ public class SetAgentRoles extends PredefinedStep { } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { Logger.msg(1, "SetAgentRoles::request() - Starting."); @@ -26,9 +27,9 @@ public class SetAgentRoles extends PredefinedStep { String[] params = getDataList(requestData); AgentPath targetAgent; try { - targetAgent = new AgentPath(itemSysKey); + targetAgent = new AgentPath(item); } catch (InvalidItemPathException ex) { - throw new InvalidDataException("Could not resolve syskey "+itemSysKey+" as an Agent."); + throw new InvalidDataException("Could not resolve syskey "+item+" as an Agent."); } RolePath[] currentRoles = targetAgent.getRoles(); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java index 728631c..60218e8 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java @@ -53,7 +53,7 @@ public class CreateItemFromDescription extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath itemPath, int transitionID, String requestData) throws InvalidDataException { String[] input = getDataList(requestData); @@ -65,17 +65,17 @@ public class CreateItemFromDescription extends PredefinedStep try { // check if the path is already taken DomainPath context = new DomainPath(new DomainPath(domPath), newName); - Logger.debug(8,"context "+context.getSysKey()+" "+context.getPath()+" "+context.getString()); - if (context.getSysKey()!=-1) - throw new ObjectAlreadyExistsException("The item name " +newName+ " exists already.", ""); + //Logger.debug(8,"context "+context.getItemPath()+" "+context.getPath()+" "+context.getString()); + if (context.exists()) + throw new ObjectAlreadyExistsException("The path " +context+ " exists already.", ""); // get init objects /* ITEM CREATION */ // generate new entity key - Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey"); - ItemPath entityPath = Gateway.getNextKeyManager().generateNextEntityKey(); + Logger.msg(6, "CreateItemFromDescription - Requesting new item path"); + ItemPath newItemPath = new ItemPath(); // resolve the item factory Logger.msg(6, "CreateItemFromDescription - Resolving item factory"); @@ -84,8 +84,8 @@ public class CreateItemFromDescription extends PredefinedStep Logger.msg(3, "CreateItemFromDescription - Creating Item"); CorbaServer factory = Gateway.getCorbaServer(); if (factory == null) throw new AccessRightsException("This process cannot create new Items", ""); - TraceableEntity newItem = (TraceableEntity)factory.createEntity(entityPath); - Gateway.getLookupManager().add(entityPath); + TraceableEntity newItem = factory.createItem(newItemPath); + Gateway.getLookupManager().add(newItemPath); // initialise it with its properties and workflow @@ -93,15 +93,15 @@ public class CreateItemFromDescription extends PredefinedStep Logger.msg(3, "CreateItemFromDescription - Initializing Item"); newItem.initialise( - agent.getSysKey(), - Gateway.getMarshaller().marshall(getNewProperties(itemSysKey, newName, agent)), - Gateway.getMarshaller().marshall(getNewWorkflow(itemSysKey)), - Gateway.getMarshaller().marshall(getNewCollections(itemSysKey)) + agent.getSystemKey(), + Gateway.getMarshaller().marshall(getNewProperties(itemPath, newName, agent)), + Gateway.getMarshaller().marshall(getNewWorkflow(itemPath)), + Gateway.getMarshaller().marshall(getNewCollections(itemPath)) ); // add its domain path Logger.msg(3, "CreateItemFromDescription - Creating "+context); - context.setEntity(entityPath); + context.setEntity(newItemPath); Gateway.getLookupManager().add(context); return requestData; } catch (Exception e) { @@ -111,9 +111,9 @@ public class CreateItemFromDescription extends PredefinedStep } - protected PropertyArrayList getNewProperties(int itemSysKey, String newName, AgentPath agent) throws ObjectNotFoundException { + protected PropertyArrayList getNewProperties(ItemPath itemPath, String newName, AgentPath agent) throws ObjectNotFoundException { // copy properties -- intend to create from propdesc - PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemSysKey); + PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemPath); PropertyArrayList props = pdList.instanciate(); // set Name prop or create if not present boolean foundName = false; @@ -128,13 +128,13 @@ public class CreateItemFromDescription extends PredefinedStep return props; } - protected CompositeActivity getNewWorkflow(int itemSysKey) throws ClusterStorageException, ObjectNotFoundException, InvalidDataException { + protected CompositeActivity getNewWorkflow(ItemPath itemPath) throws ClusterStorageException, ObjectNotFoundException, InvalidDataException { // loop through collections, collecting instantiated descriptions and finding the default workflow def - String[] collNames = Gateway.getStorage().getClusterContents(itemSysKey, ClusterStorage.COLLECTION); + String[] collNames = Gateway.getStorage().getClusterContents(itemPath, ClusterStorage.COLLECTION); String wfDefName = null; Integer wfDefVer = null; for (String collName : collNames) { if (collName.equalsIgnoreCase("workflow")) { - Collection thisCol = (Collection)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + Collection thisCol = (Collection)Gateway.getStorage().get(itemPath, ClusterStorage.COLLECTION+"/"+collName, null); ArrayList members = thisCol.getMembers().list; // get the first member from the wf collection CollectionMember wfMember = members.get(0); @@ -164,12 +164,12 @@ public class CreateItemFromDescription extends PredefinedStep } } - protected CollectionArrayList getNewCollections(int itemSysKey) throws ClusterStorageException, ObjectNotFoundException { + protected CollectionArrayList getNewCollections(ItemPath itemPath) throws ClusterStorageException, ObjectNotFoundException { // loop through collections, collecting instantiated descriptions and finding the default workflow def CollectionArrayList colls = new CollectionArrayList(); - String[] collNames = Gateway.getStorage().getClusterContents(itemSysKey, ClusterStorage.COLLECTION); + String[] collNames = Gateway.getStorage().getClusterContents(itemPath, ClusterStorage.COLLECTION); for (String collName : collNames) { - Collection thisCol = (Collection)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + Collection thisCol = (Collection)Gateway.getStorage().get(itemPath, ClusterStorage.COLLECTION+"/"+collName, null); if (thisCol instanceof CollectionDescription) { CollectionDescription thisDesc = (CollectionDescription)thisCol; colls.put(thisDesc.newInstance()); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/Erase.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/Erase.java index 81eb329..b15928a 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/Erase.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/item/Erase.java @@ -40,7 +40,7 @@ public class Erase extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { Logger.msg(1, "Erase::request() - Starting."); @@ -48,19 +48,19 @@ public class Erase extends PredefinedStep try { // get all domain paths - Iterator domPaths = Gateway.getLookup().searchAliases(new ItemPath(itemSysKey)); + Iterator domPaths = Gateway.getLookup().searchAliases(item); while (domPaths.hasNext()) { DomainPath path = (DomainPath)domPaths.next(); // delete them - if (path.getSysKey() == itemSysKey) + if (path.getItemPath().equals(item)) Gateway.getLookupManager().delete(path); } //clear out all storages - Gateway.getStorage().removeCluster(itemSysKey, "", null); + Gateway.getStorage().removeCluster(item, "", null); //remove entity path - Gateway.getLookupManager().delete(new ItemPath(itemSysKey)); + Gateway.getLookupManager().delete(item); } catch( Exception ex ) { diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java index 585f96f..35438e8 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/AddDomainContext.java @@ -9,6 +9,7 @@ import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -19,7 +20,7 @@ public class AddDomainContext extends PredefinedStep { } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { Logger.msg(1, "AddDomainContext::request() - Starting."); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewAgent.java index f2396da..45ae445 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewAgent.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewAgent.java @@ -11,6 +11,7 @@ import com.c2kernel.common.InvalidDataException; import com.c2kernel.entity.imports.ImportAgent; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -24,14 +25,14 @@ public class CreateNewAgent extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { String redactedRequestData; try { ImportAgent newAgent = (ImportAgent)Gateway.getMarshaller().unmarshall(requestData); - newAgent.create(agent.getSysKey()); - newAgent.password = "REDACTED"; + newAgent.create(agent, true); + newAgent.setPassword("REDACTED"); redactedRequestData = Gateway.getMarshaller().marshall(newAgent); return redactedRequestData; } catch (Exception ex) { diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewItem.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewItem.java index 19fd80a..a1d1755 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewItem.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/CreateNewItem.java @@ -14,6 +14,7 @@ import com.c2kernel.common.InvalidDataException; import com.c2kernel.entity.imports.ImportItem; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -27,12 +28,12 @@ public class CreateNewItem extends PredefinedStep //requestdata is xmlstring @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { try { - ImportItem item = (ImportItem)Gateway.getMarshaller().unmarshall(requestData); - item.create(agent.getSysKey(), false); + ImportItem newItem = (ImportItem)Gateway.getMarshaller().unmarshall(requestData); + newItem.create(agent, false); return requestData; } catch (Exception ex) { Logger.error(ex); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java index 956166a..05d399c 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/server/RemoveDomainContext.java @@ -7,6 +7,7 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.lifecycle.instance.predefined.PredefinedStep; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -16,7 +17,7 @@ public class RemoveDomainContext extends PredefinedStep { } @Override - protected String runActivityLogic(AgentPath agent, int itemSysKey, + protected String runActivityLogic(AgentPath agent, ItemPath item, int transitionID, String requestData) throws InvalidDataException { Logger.msg(1, "RemoveDomainContext::request() - Starting."); @@ -25,7 +26,7 @@ public class RemoveDomainContext extends PredefinedStep { if (!pathToDelete.exists()) throw new InvalidDataException("Context "+pathToDelete+" does not exist", ""); try { - pathToDelete.getEntity(); + pathToDelete.getItemPath(); throw new InvalidDataException("Path "+pathToDelete+" is an Entity. Use its own Erase step instead, or RemoveAgent.", ""); } catch (ObjectNotFoundException ex) { } if (Gateway.getLookup().getChildren(pathToDelete).hasNext()) -- cgit v1.2.3