From 8307f06a338b1f73f47e83b94aa64c2241e9baa7 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Tue, 30 Sep 2014 12:28:42 +0200 Subject: Initial properties can be supplied as a marshalled PropertyArrayList as an optional additional parameter to CreateItem/AgentFromDescription. Each property supplied must be defined in the property description. --- .../agent/CreateAgentFromDescription.java | 7 +++++-- .../predefined/item/CreateItemFromDescription.java | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) (limited to 'src/main/java/com/c2kernel/lifecycle/instance/predefined') 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 088bee1..780c82e 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 @@ -22,6 +22,7 @@ import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.ItemPath; import com.c2kernel.lookup.RolePath; import com.c2kernel.process.Gateway; +import com.c2kernel.property.PropertyArrayList; import com.c2kernel.utils.Logger; /************************************************************************** @@ -48,7 +49,9 @@ public class CreateAgentFromDescription extends CreateItemFromDescription String[] input = getDataList(requestData); String newName = input[0]; - + PropertyArrayList initProps = + input.length > 1?getInitProperties(input[1]):new PropertyArrayList(); + Logger.msg(1, "CreateAgentFromDescription::request() - Starting."); try { @@ -87,7 +90,7 @@ public class CreateAgentFromDescription extends CreateItemFromDescription newAgent.initialise( agent.getSystemKey(), - Gateway.getMarshaller().marshall(getNewProperties(itemPath, newName, agent)), + Gateway.getMarshaller().marshall(getNewProperties(itemPath, initProps, newName, agent)), Gateway.getMarshaller().marshall(getNewWorkflow(itemPath)), Gateway.getMarshaller().marshall(getNewCollections(itemPath)) ); 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 eea3976..d9c65d5 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 @@ -11,8 +11,13 @@ package com.c2kernel.lifecycle.instance.predefined.item; +import java.io.IOException; import java.util.ArrayList; +import org.exolab.castor.mapping.MappingException; +import org.exolab.castor.xml.MarshalException; +import org.exolab.castor.xml.ValidationException; + import com.c2kernel.collection.Collection; import com.c2kernel.collection.CollectionArrayList; import com.c2kernel.collection.CollectionDescription; @@ -59,6 +64,8 @@ public class CreateItemFromDescription extends PredefinedStep String[] input = getDataList(requestData); String newName = input[0]; String domPath = input[1]; + PropertyArrayList initProps = + input.length > 2?getInitProperties(input[2]):new PropertyArrayList(); Logger.msg(1, "CreateItemFromDescription - Starting."); @@ -94,7 +101,7 @@ public class CreateItemFromDescription extends PredefinedStep newItem.initialise( agent.getSystemKey(), - Gateway.getMarshaller().marshall(getNewProperties(itemPath, newName, agent)), + Gateway.getMarshaller().marshall(getNewProperties(itemPath, initProps, newName, agent)), Gateway.getMarshaller().marshall(getNewWorkflow(itemPath)), Gateway.getMarshaller().marshall(getNewCollections(itemPath)) ); @@ -111,10 +118,19 @@ public class CreateItemFromDescription extends PredefinedStep } - protected PropertyArrayList getNewProperties(ItemPath itemPath, String newName, AgentPath agent) throws ObjectNotFoundException { + protected PropertyArrayList getInitProperties(String input) throws InvalidDataException { + try { + return (PropertyArrayList)Gateway.getMarshaller().unmarshall(input); + } catch (Exception e) { + Logger.error(e); + throw new InvalidDataException("Initial property parameter was not a marshalled PropertyArrayList: "+input, ""); + } + } + + protected PropertyArrayList getNewProperties(ItemPath itemPath, PropertyArrayList initProps, String newName, AgentPath agent) throws ObjectNotFoundException, InvalidDataException { // copy properties -- intend to create from propdesc PropertyDescriptionList pdList = PropertyUtility.getPropertyDescriptionOutcome(itemPath); - PropertyArrayList props = pdList.instanciate(); + PropertyArrayList props = pdList.instantiate(initProps); // set Name prop or create if not present boolean foundName = false; for (Property prop : props.list) { -- cgit v1.2.3