From a1f0ecbb6a2bea6aa214322c412af2f3c5ce124b Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Wed, 7 May 2014 17:33:13 +0200 Subject: Agent now extends Item, so they can have workflows. All traces of the old 'Entity' superclasses should be removed, including proxies and paths. Very large change, breaks API compatibility with CRISTAL 2.x. Fixes #135 --- .../com/c2kernel/lifecycle/instance/WfVertex.java | 4 +- .../instance/predefined/AddDomainPath.java | 8 +-- .../instance/predefined/AssignItemToSlot.java | 10 +-- .../lifecycle/instance/predefined/ClearSlot.java | 4 +- .../predefined/CreateItemFromDescription.java | 32 ++++------ .../lifecycle/instance/predefined/Erase.java | 6 +- .../predefined/RemoveSlotFromCollection.java | 8 +-- .../predefined/entitycreation/NewAgent.java | 2 +- .../predefined/entitycreation/NewItem.java | 73 +++++++++------------- 9 files changed, 60 insertions(+), 87 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance') diff --git a/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java b/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java index a6e39ae..0fc9bf9 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/WfVertex.java @@ -13,7 +13,7 @@ import com.c2kernel.common.PersistencyException; import com.c2kernel.graph.model.GraphableVertex; import com.c2kernel.lifecycle.routingHelpers.ViewpointDataHelper; import com.c2kernel.lookup.AgentPath; -import com.c2kernel.lookup.EntityPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.process.Gateway; import com.c2kernel.scripting.Script; @@ -154,7 +154,7 @@ public abstract class WfVertex extends GraphableVertex //TODO: is this right? if (requiredInput.containsKey("item")) { - script.setInputParamValue("item", Gateway.getProxyManager().getProxy(new EntityPath(itemSysKey))); + script.setInputParamValue("item", Gateway.getProxyManager().getProxy(new ItemPath(itemSysKey))); } if (requiredInput.containsKey("agent")) { AgentPath systemAgent = Gateway.getLDAPLookup().getRoleManager().getAgentPath("system"); 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 d28fe3c..9eb15f2 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddDomainPath.java @@ -13,8 +13,8 @@ package com.c2kernel.lifecycle.instance.predefined; import com.c2kernel.common.InvalidDataException; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.lookup.EntityPath; -import com.c2kernel.lookup.InvalidEntityPathException; +import com.c2kernel.lookup.ItemPath; +import com.c2kernel.lookup.InvalidItemPathException; import com.c2kernel.lookup.LDAPLookup; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -39,13 +39,13 @@ public class AddDomainPath extends PredefinedStep try { - DomainPath domainPath = new DomainPath(getDataList(requestData)[0], new EntityPath(itemSysKey)); + DomainPath domainPath = new DomainPath(getDataList(requestData)[0], new ItemPath(itemSysKey)); lookupManager.add(domainPath); Logger.msg(8,"AddDomainPath::request() - systemKey:" + itemSysKey + ". Adding dompath. DONE."); return requestData; } - catch (InvalidEntityPathException ex) + catch (InvalidItemPathException ex) { Logger.error(ex); throw new InvalidDataException(ex.toString(), ""); 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 7d36f35..78d4087 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AssignItemToSlot.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AssignItemToSlot.java @@ -52,7 +52,7 @@ public class AssignItemToSlot extends PredefinedStep String collName; int slotNo; - int entityKey; + int sysKey; Aggregation agg; Logger.msg(1, "AssignItemToSlot::request() - Starting."); @@ -63,7 +63,7 @@ public class AssignItemToSlot extends PredefinedStep String[] params = getDataList(requestData); collName = params[0]; slotNo = Integer.parseInt(params[1]); - entityKey = Integer.parseInt(params[2]); + sysKey = Integer.parseInt(params[2]); } catch (Exception e) { throw new InvalidDataException("Invalid parameters", ""); } @@ -85,12 +85,12 @@ public class AssignItemToSlot extends PredefinedStep boolean stored = false; for (AggregationMember member : agg.getMembers().list) { if (member.getID() == slotNo) { - if (member.getEntityKey() > -1) + if (member.getSystemKey() > -1) throw new InvalidDataException("Member slot not empty", ""); try { - member.assignEntity(entityKey); + member.assignItem(sysKey); } catch (MembershipException e) { - throw new InvalidDataException("Entity "+entityKey+" does not fit in this slot", ""); + throw new InvalidDataException("Entity "+sysKey+" does not fit in this slot", ""); } stored = true; break; 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 60e63f1..772f62e 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ClearSlot.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ClearSlot.java @@ -76,9 +76,9 @@ public class ClearSlot extends PredefinedStep boolean stored = false; for (AggregationMember member : agg.getMembers().list) { if (member.getID() == slotNo) { - if (member.getEntityKey() > -1) + if (member.getSystemKey() > -1) throw new InvalidDataException("Member slot already empty", ""); - member.clearEntity(); + member.clearItem(); stored = true; break; } 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 3197ce5..e6da64a 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java @@ -12,9 +12,9 @@ package com.c2kernel.lifecycle.instance.predefined; import java.util.ArrayList; -import java.util.Iterator; import com.c2kernel.collection.Collection; +import com.c2kernel.collection.CollectionArrayList; import com.c2kernel.collection.CollectionDescription; import com.c2kernel.collection.CollectionMember; import com.c2kernel.common.AccessRightsException; @@ -26,7 +26,7 @@ import com.c2kernel.entity.TraceableEntity; import com.c2kernel.lifecycle.CompositeActivityDef; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.lookup.EntityPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.LDAPLookup; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.TransactionManager; @@ -77,22 +77,21 @@ public class CreateItemFromDescription extends PredefinedStep throw new ObjectAlreadyExistsException("The item name " +newName+ " exists already.", ""); // get init objects - String[] collNames = storage.getClusterContents(itemSysKey, ClusterStorage.COLLECTION); - ArrayList collections = new ArrayList(); - - // loop through collections to instantiate + // loop through collections, collecting instantiated descriptions and finding the default workflow def + CollectionArrayList colls = new CollectionArrayList(); + String[] collNames = storage.getClusterContents(itemSysKey, ClusterStorage.COLLECTION); for (String collName : collNames) { Collection thisCol = (Collection)storage.get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); if (thisCol instanceof CollectionDescription) { CollectionDescription thisDesc = (CollectionDescription)thisCol; - collections.add(Gateway.getMarshaller().marshall(thisDesc.newInstance())); + colls.put(thisDesc.newInstance()); } else if (thisCol.getName().equalsIgnoreCase("workflow") && wfDefName == null) { ArrayList members = thisCol.getMembers().list; // get the first member from the wf collection CollectionMember wfMember = members.get(0); - wfDefName = wfMember.resolveEntity().getName(); + wfDefName = wfMember.resolveItem().getName(); Object wfVerObj = wfMember.getProperties().get("Version"); try { wfDefVer = Integer.parseInt(wfVerObj.toString()); @@ -135,7 +134,7 @@ public class CreateItemFromDescription extends PredefinedStep // generate new entity key Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey"); - EntityPath entityPath = lookup.getNextKeyManager().generateNextEntityKey(); + ItemPath entityPath = lookup.getNextKeyManager().generateNextEntityKey(); // resolve the item factory Logger.msg(6, "CreateItemFromDescription - Resolving item factory"); @@ -155,18 +154,9 @@ public class CreateItemFromDescription extends PredefinedStep newItem.initialise( agent.getSysKey(), Gateway.getMarshaller().marshall(props), - Gateway.getMarshaller().marshall(wfDef.instantiate())); - - // add collections - if (collections.size() > 0) { - Logger.msg(6, "CreateItemFromDescription - Adding Collections"); - String[] colls = new String[1]; - for (Iterator iter = collections.iterator(); iter.hasNext();) { - colls[0] = iter.next(); - // TODO: initialize - newItem.requestAction(agent.getSysKey(), "workflow/predefined/AddC2KObject", PredefinedStep.DONE, PredefinedStep.bundleData(colls)); - } - } + Gateway.getMarshaller().marshall(wfDef.instantiate()), + Gateway.getMarshaller().marshall(colls) + ); // add its domain path Logger.msg(3, "CreateItemFromDescription - Creating "+context); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java index 0f3a246..412fe52 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/Erase.java @@ -18,7 +18,7 @@ import java.util.Enumeration; import com.c2kernel.common.InvalidDataException; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.lookup.EntityPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.Path; import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; @@ -47,7 +47,7 @@ public class Erase extends PredefinedStep try { // get all domain paths - Enumeration domPaths = Gateway.getLDAPLookup().searchAliases(new EntityPath(itemSysKey)); + Enumeration domPaths = Gateway.getLDAPLookup().searchAliases(new ItemPath(itemSysKey)); while (domPaths.hasMoreElements()) { DomainPath path = (DomainPath)domPaths.nextElement(); // delete them @@ -59,7 +59,7 @@ public class Erase extends PredefinedStep Gateway.getStorage().removeCluster(itemSysKey, "", null); //remove entity path - Gateway.getLDAPLookup().delete(new EntityPath(itemSysKey)); + Gateway.getLDAPLookup().delete(new ItemPath(itemSysKey)); } catch( Exception 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 3cc9f7c..38638cd 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/RemoveSlotFromCollection.java @@ -51,7 +51,7 @@ public class RemoveSlotFromCollection extends PredefinedStep String collName; int slotNo; - int entityKey = -1; + int sysKey = -1; Collection coll; Logger.msg(1, "RemoveSlotFromCollection::request() - Starting."); @@ -61,12 +61,12 @@ public class RemoveSlotFromCollection extends PredefinedStep String[] params = getDataList(requestData); collName = params[0]; slotNo = params[1].length()>0?Integer.parseInt(params[1]):-1; - if (params.length>2) entityKey = params[2].length()>0?Integer.parseInt(params[2]):-1; + if (params.length>2) sysKey = params[2].length()>0?Integer.parseInt(params[2]):-1; } catch (Exception e) { throw new InvalidDataException("Invalid parameters", ""); } - if (slotNo == -1 && entityKey == -1) + if (slotNo == -1 && sysKey == -1) throw new InvalidDataException("Must give either slot number or entity key", ""); // load collection @@ -81,7 +81,7 @@ public class RemoveSlotFromCollection extends PredefinedStep if (slotNo == -1) { // find slot from entity key for (CollectionMember member : coll.getMembers().list) { - if (member.getEntityKey() == entityKey) { + if (member.getSystemKey() == sysKey) { slotNo = member.getID(); break; } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java index 2c025d2..baea8dd 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewAgent.java @@ -41,7 +41,7 @@ public class NewAgent extends ModuleImport implements java.io.Serializable { properties.add(new com.c2kernel.property.Property("Name", name, true)); properties.add(new com.c2kernel.property.Property("Type", "Agent", false)); try { - newAgentEnt.initialise(Gateway.getMarshaller().marshall(new PropertyArrayList(properties))); + newAgentEnt.initialise(agentId, Gateway.getMarshaller().marshall(new PropertyArrayList(properties)), null, null); } catch (Exception ex) { Logger.error(ex); throw new CannotManageException("Error initialising new agent"); 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 588b2fc..52a214e 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 @@ -6,6 +6,7 @@ import java.util.ArrayList; import org.custommonkey.xmlunit.Diff; import org.custommonkey.xmlunit.XMLUnit; +import com.c2kernel.collection.CollectionArrayList; import com.c2kernel.collection.MembershipException; import com.c2kernel.common.CannotManageException; import com.c2kernel.common.InvalidDataException; @@ -18,7 +19,7 @@ import com.c2kernel.events.History; import com.c2kernel.lifecycle.CompositeActivityDef; import com.c2kernel.lifecycle.instance.stateMachine.Transition; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.lookup.EntityPath; +import com.c2kernel.lookup.ItemPath; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.persistency.outcome.Viewpoint; @@ -69,7 +70,7 @@ public class NewItem extends ModuleImport { public void create(int agentId, boolean reset) throws ObjectCannotBeUpdated, ObjectNotFoundException, CannotManageException, ObjectAlreadyExistsException { DomainPath domPath = new DomainPath(new DomainPath(initialPath), name); - EntityPath entPath; TraceableEntity newItem; + ItemPath entPath; TraceableEntity newItem; if (domPath.exists()) { entPath = domPath.getEntity(); newItem = Gateway.getCorbaServer().getItem(entPath.getSysKey()); @@ -98,12 +99,35 @@ public class NewItem extends ModuleImport { throw new CannotManageException("Workflow def "+workflow+" v"+usedWfVer+" for item "+domPath+" was not valid", ""); } + // create collections + CollectionArrayList colls = new CollectionArrayList(); + for (Dependency element: dependencyList) { + try { + com.c2kernel.collection.Dependency newDep = element.create(); + colls.put(newDep); + } catch (MembershipException ex) { + Logger.error(ex); + throw new CannotManageException("A specified member is not of the correct type in "+element.name, ""); + } + } + + for (Aggregation element : aggregationList) { + try { + com.c2kernel.collection.Aggregation newAgg = element.create(); + colls.put(newAgg); + } catch (MembershipException ex) { + Logger.error(ex); + throw new CannotManageException("A specified member is not of the correct type in "+element.name, ""); + } + } + + // (re)initialise the new item with properties, workflow and collections try { - // initialise the new item with workflow and properties newItem.initialise( agentId, Gateway.getMarshaller().marshall(new PropertyArrayList(properties)), - Gateway.getMarshaller().marshall(compact.instantiate())); + Gateway.getMarshaller().marshall(compact.instantiate()), + Gateway.getMarshaller().marshall(colls)); } catch (Exception ex) { Logger.error("Error initialising new item "+name ); Logger.error(ex); @@ -159,46 +183,5 @@ public class NewItem extends ModuleImport { domPath.setEntity(entPath); Gateway.getLDAPLookup().add(domPath); } - - // create collections - for (Dependency element: dependencyList) { - try { - com.c2kernel.collection.Dependency newDep = element.create(); - if (!reset) { - try { - Gateway.getStorage().get(entPath.getSysKey(), ClusterStorage.COLLECTION+"/"+newDep.getName(), null); - Logger.msg("Not overwriting dependency "+newDep.getName()); - continue; // TODO: a proper compare here - } catch (ObjectNotFoundException ex) { } // doesn't exist, ok to create - } - Gateway.getStorage().put(entPath.getSysKey(), element.create(), null); - } catch (ClusterStorageException ex) { - Logger.error(ex); - throw new CannotManageException("Could not create Dependency "+element.name, ""); - } catch (MembershipException ex) { - Logger.error(ex); - throw new CannotManageException("A specified member is not of the correct type in "+element.name, ""); - } - } - - for (Aggregation element : aggregationList) { - try { - com.c2kernel.collection.Aggregation newAgg = element.create(); - if (!reset) { - try { - Gateway.getStorage().get(entPath.getSysKey(), ClusterStorage.COLLECTION+"/"+newAgg.getName(), null); - Logger.msg("Not overwriting aggregation "+newAgg.getName()); - continue; // TODO: a proper compare here - } catch (ObjectNotFoundException ex) { } // doesn't exist, ok to create - } - Gateway.getStorage().put(entPath.getSysKey(), newAgg, null); - } catch (ClusterStorageException ex) { - Logger.error(ex); - throw new CannotManageException("Could not create Aggregation "+element.name, ""); - } catch (MembershipException ex) { - Logger.error(ex); - throw new CannotManageException("A specified member is not of the correct type in "+element.name, ""); - } - } } } -- cgit v1.2.3