From 8c6dac06240e3b931ea5e69b8ef5398c02be2bbd Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 17 Jun 2014 09:46:03 +0200 Subject: Separate property, workflow and collection instantiation into separate methods in the instantiation predefined steps so they can be used independently. --- .../predefined/item/CreateItemFromDescription.java | 134 +++++++++++---------- 1 file changed, 73 insertions(+), 61 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined/item/CreateItemFromDescription.java') 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 eb7b15f..5d6c0b9 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 @@ -24,12 +24,13 @@ import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.CorbaServer; import com.c2kernel.entity.TraceableEntity; import com.c2kernel.lifecycle.CompositeActivityDef; +import com.c2kernel.lifecycle.instance.CompositeActivity; 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.persistency.ClusterStorage; -import com.c2kernel.persistency.TransactionManager; +import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList; @@ -58,15 +59,12 @@ public class CreateItemFromDescription extends PredefinedStep String[] input = getDataList(requestData); String newName = input[0]; String domPath = input[1]; - CompositeActivityDef wfDef; String wfDefName = null; int wfDefVer = -1; if (input.length > 2) // override wf wfDefName = input[2]; - PropertyArrayList props = new PropertyArrayList(); - Logger.msg(1, "AddNewItem::request() - Starting."); - TransactionManager storage = Gateway.getStorage(); + Logger.msg(1, "CreateItemFromDescription - Starting."); try { // check if the path is already taken @@ -77,59 +75,7 @@ public class CreateItemFromDescription extends PredefinedStep // get init objects - // 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; - 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.resolveItem().getName(); - Object wfVerObj = wfMember.getProperties().get("Version"); - try { - wfDefVer = Integer.parseInt(wfVerObj.toString()); - } catch (NumberFormatException ex) { - throw new InvalidDataException("Invalid workflow version number: "+wfVerObj.toString(), ""); - } - } - } - - // load workflow def - if (wfDefName == null) - throw new InvalidDataException("No workflow given or defined", ""); - if (wfDefVer == -1) - throw new InvalidDataException("No workflow def version given",""); - - try { - wfDef = (CompositeActivityDef)LocalObjectLoader.getActDef(wfDefName, wfDefVer); - } catch (ObjectNotFoundException ex) { - throw new InvalidDataException("Workflow def '"+wfDefName+"' item not found", ""); - } catch (ClassCastException ex) { - throw new InvalidDataException("Activity def '"+wfDefName+"' was not Composite", ""); - } - - - // copy properties -- intend to create from propdesc - PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemSysKey); - props = pdList.instanciate(); - // set Name prop or create if not present - boolean foundName = false; - for (Property prop : props.list) { - if (prop.getName().equals("Name")) { - foundName = true; - prop.setValue(newName); - } - } - if (!foundName) props.list.add(new Property("Name", newName, true)); - props.list.add( new Property("Creator", agent.getAgentName(), false)); - - /* ITEM CREATION */ + /* ITEM CREATION */ // generate new entity key Logger.msg(6, "CreateItemFromDescription - Requesting new sysKey"); @@ -152,9 +98,9 @@ public class CreateItemFromDescription extends PredefinedStep newItem.initialise( agent.getSysKey(), - Gateway.getMarshaller().marshall(props), - Gateway.getMarshaller().marshall(wfDef.instantiate()), - Gateway.getMarshaller().marshall(colls) + Gateway.getMarshaller().marshall(getNewProperties(itemSysKey, newName, agent)), + Gateway.getMarshaller().marshall(getNewWorkflow(itemSysKey, wfDefName, wfDefVer)), + Gateway.getMarshaller().marshall(getNewCollections(itemSysKey)) ); // add its domain path @@ -168,4 +114,70 @@ public class CreateItemFromDescription extends PredefinedStep } } + + protected PropertyArrayList getNewProperties(int itemSysKey, String newName, AgentPath agent) throws ObjectNotFoundException { + // copy properties -- intend to create from propdesc + PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemSysKey); + PropertyArrayList props = pdList.instanciate(); + // set Name prop or create if not present + boolean foundName = false; + for (Property prop : props.list) { + if (prop.getName().equals("Name")) { + foundName = true; + prop.setValue(newName); + } + } + if (!foundName) props.list.add(new Property("Name", newName, true)); + props.list.add( new Property("Creator", agent.getAgentName(), false)); + return props; + } + + protected CompositeActivity getNewWorkflow(int itemSysKey, String wfDefName, int wfDefVer) throws ClusterStorageException, ObjectNotFoundException, InvalidDataException { + // loop through collections, collecting instantiated descriptions and finding the default workflow def + String[] collNames = Gateway.getStorage().getClusterContents(itemSysKey, ClusterStorage.COLLECTION); + for (String collName : collNames) { + if (collName.equalsIgnoreCase("workflow") && wfDefName == null) { + Collection thisCol = (Collection)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + ArrayList members = thisCol.getMembers().list; + // get the first member from the wf collection + CollectionMember wfMember = members.get(0); + wfDefName = wfMember.resolveItem().getName(); + Object wfVerObj = wfMember.getProperties().get("Version"); + try { + wfDefVer = Integer.parseInt(wfVerObj.toString()); + } catch (NumberFormatException ex) { + throw new InvalidDataException("Invalid workflow version number: "+wfVerObj.toString(), ""); + } + } + } + + // load workflow def + if (wfDefName == null) + throw new InvalidDataException("No workflow given or defined", ""); + if (wfDefVer == -1) + throw new InvalidDataException("No workflow def version given",""); + + try { + CompositeActivityDef wfDef = (CompositeActivityDef)LocalObjectLoader.getActDef(wfDefName, wfDefVer); + return (CompositeActivity)wfDef.instantiate(); + } catch (ObjectNotFoundException ex) { + throw new InvalidDataException("Workflow def '"+wfDefName+"' item not found", ""); + } catch (ClassCastException ex) { + throw new InvalidDataException("Activity def '"+wfDefName+"' was not Composite", ""); + } + } + + protected CollectionArrayList getNewCollections(int itemSysKey) 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); + for (String collName : collNames) { + Collection thisCol = (Collection)Gateway.getStorage().get(itemSysKey, ClusterStorage.COLLECTION+"/"+collName, null); + if (thisCol instanceof CollectionDescription) { + CollectionDescription thisDesc = (CollectionDescription)thisCol; + colls.put(thisDesc.newInstance()); + } + } + return colls; + } } -- cgit v1.2.3