From aaa9509c6f4e5ac0edb308041d1ffa361b468a5f Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Wed, 2 Apr 2014 15:30:06 +0200 Subject: ResourceImportHandler interface to allow custom types or override the structure of standard ones. Specify with ResourceImportHandler. c2kprop. DefaultResourceImportHandler is used if not defined, which handled the 5 standard types (CA,EA,OD,SC,SM). Fixes #178 --- .../resource/DefaultResourceImportHandler.java | 87 ++++++++++++++++++++++ .../process/resource/ResourceImportHandler.java | 47 ++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 src/main/java/com/c2kernel/process/resource/DefaultResourceImportHandler.java create mode 100644 src/main/java/com/c2kernel/process/resource/ResourceImportHandler.java (limited to 'src/main/java/com/c2kernel/process/resource') diff --git a/src/main/java/com/c2kernel/process/resource/DefaultResourceImportHandler.java b/src/main/java/com/c2kernel/process/resource/DefaultResourceImportHandler.java new file mode 100644 index 0000000..afcf021 --- /dev/null +++ b/src/main/java/com/c2kernel/process/resource/DefaultResourceImportHandler.java @@ -0,0 +1,87 @@ +package com.c2kernel.process.resource; + +import java.util.HashSet; +import java.util.Set; + +import com.c2kernel.lookup.DomainPath; +import com.c2kernel.persistency.outcome.Outcome; +import com.c2kernel.process.Gateway; +import com.c2kernel.property.PropertyDescriptionList; + +public class DefaultResourceImportHandler implements ResourceImportHandler { + + String resType; + String schemaName; + String typeRoot; + DomainPath typeRootPath; + String wfDef; + PropertyDescriptionList props; + + public DefaultResourceImportHandler(String resType) throws Exception { + this.resType = resType; + if (resType.equals("CA")) { + wfDef = "ManageCompositeActDef"; + schemaName = "CompositeActivityDef"; + typeRoot = "/desc/ActivityDesc"; + } + else if (resType.equals("EA")) { + wfDef = "ManageElementaryActDef"; + schemaName = "ElementaryActivityDef"; + typeRoot = "/desc/ActivityDesc"; + } + else if (resType.equals("OD")) { + wfDef = "ManageSchema"; + schemaName = "Schema"; + typeRoot = "/desc/OutcomeDesc"; + } + else if (resType.equals("SC")) { + wfDef = "ManageScript"; + schemaName = "Script"; + typeRoot = "/desc/Script"; + } + else if (resType.equals("SM")) { + wfDef = "ManageStateMachine"; + schemaName = "StateMachine"; + typeRoot = "/desc/StateMachine"; + } + else throw new Exception("Unknown bootstrap item type: "+resType); + typeRootPath = new DomainPath(typeRoot); + props = (PropertyDescriptionList)Gateway.getMarshaller().unmarshall(Gateway.getResource().getTextResource(null, "boot/property/"+resType+"Prop.xml")); + } + + @Override + public DomainPath getTypeRoot() { + return typeRootPath; + } + + @Override + public String getName() { + return schemaName; + } + + @Override + public DomainPath getPath(String name, String ns) throws Exception { + return new DomainPath(typeRoot+"/system/"+(ns==null?"kernel":ns)+'/'+name); + } + + @Override + public Set getResourceOutcomes(String name, String ns, String location, int version) throws Exception { + HashSet retArr = new HashSet(); + String data = Gateway.getResource().getTextResource(ns, location); + if (data == null) + throw new Exception("No data found for "+schemaName+" "+name); + Outcome resOutcome = new Outcome(0, data, schemaName, 0); + retArr.add(resOutcome); + return retArr; + } + + @Override + public PropertyDescriptionList getPropDesc() throws Exception { + return props; + } + + @Override + public String getWorkflowName() throws Exception { + return wfDef; + } +} diff --git a/src/main/java/com/c2kernel/process/resource/ResourceImportHandler.java b/src/main/java/com/c2kernel/process/resource/ResourceImportHandler.java new file mode 100644 index 0000000..8f825b5 --- /dev/null +++ b/src/main/java/com/c2kernel/process/resource/ResourceImportHandler.java @@ -0,0 +1,47 @@ +package com.c2kernel.process.resource; + +import java.util.Set; + +import com.c2kernel.lookup.DomainPath; +import com.c2kernel.persistency.outcome.Outcome; +import com.c2kernel.property.PropertyDescriptionList; + +public interface ResourceImportHandler { + + + /** Returns the DomainPath for a specific resource + * @param ns - module namespace + * @param name - resource name + * @return + */ + public DomainPath getPath(String name, String ns) throws Exception; + + /** Generates the outcomes that the resource should contain. + * @param res - the module resource definition + * @return a set of outcomes to be synced with the resource item. + * @throws Exception - if the supplied resources are not valid + */ + public Set getResourceOutcomes(String name, String ns, String location, int version) throws Exception; + + /** Gives the CompActDef name to instantiate to provide the workflow for this type of resource. + * Should be found in the CA typeroot (/desc/ActivityDesc/) + * @return String workflow name + * @throws Exception + */ + public String getWorkflowName() throws Exception; + + /** Should return all of the Properties the resource Item + * will have on creation. The Property 'Name' will be created and populated automatically, even if not declared. + * @return a PropertyDescriptionList - an arraylist of PropertyDescriptions + * @throws Exception + */ + public PropertyDescriptionList getPropDesc() throws Exception; + + /** The directory context to search for existing resources. The name of the resource must be unique below this point. + * @return Root path + */ + public DomainPath getTypeRoot(); + + public String getName(); + +} -- cgit v1.2.3