diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2014-04-02 15:30:06 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2014-04-02 15:30:06 +0200 |
| commit | aaa9509c6f4e5ac0edb308041d1ffa361b468a5f (patch) | |
| tree | 14798719434e754fc84ca954ede84a6c913aba12 | |
| parent | dd91089106edeb9bf1cdfe415c98a051585797c2 (diff) | |
ResourceImportHandler interface to allow custom <Resource> types or
override the structure of standard ones. Specify with
ResourceImportHandler.<resType> c2kprop. DefaultResourceImportHandler is
used if not defined, which handled the 5 standard types
(CA,EA,OD,SC,SM). Fixes #178
9 files changed, 239 insertions, 135 deletions
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 12bbb56..2c025d2 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 @@ -57,9 +57,4 @@ public class NewAgent extends ModuleImport implements java.io.Serializable { }
}
-
- @Override
- public String getPath(String ns) {
- return null;
- }
}
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 d5da008..5f8cf12 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 @@ -188,10 +188,4 @@ public class NewItem extends ModuleImport { }
}
}
-
- @Override
- public String getPath(String ns) {
- setNamespace(ns);
- return initialPath;
- }
}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java index 1800b0e..003b7f7 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewRole.java @@ -11,11 +11,6 @@ public class NewRole extends ModuleImport { public NewRole() {
}
-
- @Override
- public String getPath(String ns) {
- return null; // roles don't have user-specified domain paths
- }
public void create(int agentId) throws ObjectAlreadyExistsException, ObjectCannotBeUpdated {
Gateway.getLDAPLookup().getRoleManager().createRole(name, jobList);
diff --git a/src/main/java/com/c2kernel/process/Bootstrap.java b/src/main/java/com/c2kernel/process/Bootstrap.java index d472978..df8ced7 100644 --- a/src/main/java/com/c2kernel/process/Bootstrap.java +++ b/src/main/java/com/c2kernel/process/Bootstrap.java @@ -2,6 +2,8 @@ package com.c2kernel.process; import java.net.InetAddress;
import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Set;
import java.util.StringTokenizer;
import org.custommonkey.xmlunit.Diff;
@@ -27,6 +29,8 @@ import com.c2kernel.lookup.RolePath; import com.c2kernel.persistency.ClusterStorage;
import com.c2kernel.persistency.outcome.Outcome;
import com.c2kernel.persistency.outcome.Viewpoint;
+import com.c2kernel.process.resource.DefaultResourceImportHandler;
+import com.c2kernel.process.resource.ResourceImportHandler;
import com.c2kernel.property.Property;
import com.c2kernel.property.PropertyArrayList;
import com.c2kernel.property.PropertyDescription;
@@ -43,6 +47,7 @@ import com.c2kernel.utils.Logger; public class Bootstrap
{
static DomainPath thisServerPath;
+ static HashMap<String, ResourceImportHandler> resHandlerCache = new HashMap<String, ResourceImportHandler>();
/**
* Run everything without timing-out the service wrapper
@@ -98,10 +103,8 @@ public class Bootstrap String itemType = thisItem.substring(0,delim);
String itemName = thisItem.substring(delim+1);
try {
- String data = Gateway.getResource().getTextResource(ns, "boot/"+thisItem+(itemType.equals("OD")?".xsd":".xml"));
- if (data == null)
- Logger.die("No data found for "+getDataType(itemType)+" "+itemName);
- verifyResource(ns, itemName, 0, itemType, data, reset);
+ String location = "boot/"+thisItem+(itemType.equals("OD")?".xsd":".xml");
+ verifyResource(ns, itemName, 0, itemType, location, reset);
} catch (Exception e) {
Logger.error(e);
Logger.die("Error importing bootstrap items. Unsafe to continue.");
@@ -110,97 +113,123 @@ public class Bootstrap }
- public static void verifyResource(String ns, String itemName, Integer version, String itemType, String data, boolean reset) throws Exception {
+ public static DomainPath verifyResource(String ns, String itemName, Integer version, String itemType, String dataLocation, boolean reset) throws Exception {
if (version == null) version = 0;
- Logger.msg(1, "Bootstrap.verifyResource() - Verifying version "+version+" of "+getDataType(itemType)+" "+itemName);
+ ResourceImportHandler typeImpHandler = getHandler(itemType);
+ Logger.msg(1, "Bootstrap.verifyResource() - Verifying version "+version+" of "+typeImpHandler.getName()+" "+itemName);
- Enumeration<Path> en = Gateway.getLDAPLookup().search(getTypeRoot(itemType), itemName);
+ // Find or create Item for Resource
+ DomainPath modDomPath = typeImpHandler.getPath(itemName, ns);
ItemProxy thisProxy;
- Outcome newOutcome = new Outcome(0, data, getDataType(itemType), 0);
-
+ Enumeration<Path> en = Gateway.getLDAPLookup().search(typeImpHandler.getTypeRoot(), itemName);
if (!en.hasMoreElements()) {
- Logger.msg("Bootstrap.verifyResource() - "+getDataType(itemType)+" "+itemName+" not found. Creating new.");
- thisProxy = createResourceItem(itemType, itemName, ns);
+ Logger.msg("Bootstrap.verifyResource() - "+typeImpHandler.getName()+" "+itemName+" not found. Creating new.");
+ thisProxy = createResourceItem(typeImpHandler, itemName, ns);
}
else {
DomainPath path = (DomainPath)en.nextElement();
thisProxy = (ItemProxy)Gateway.getProxyManager().getProxy(path);
-
- DomainPath modDomPath = getResourceDomPath(itemType, ns, itemName);
- String moduleName = (ns==null?"kernel":ns);
- String itemModule;
- try{
- itemModule = thisProxy.getProperty("Module");
- if (!itemModule.equals("") && !itemModule.equals("null") && !moduleName.equals(itemModule)) {
- Logger.error("Bootstrap.verifyResource() - Resource '"+itemName+"' included in module "+moduleName+" but is assigned to '"+itemModule+"'. Not overwriting.");
- return;
- }
- } catch (ObjectNotFoundException ex) {
- itemModule = "";
- }
-
- if (!moduleName.equals(itemModule)) { // write module property
- Gateway.getStorage().put(thisProxy.getSystemKey(), new Property("Module", moduleName, false), null);
- }
-
- if (!modDomPath.equals(path)) { // move item to module subtree
- Logger.msg("Module item "+itemName+" found with path "+path.toString()+". Moving to "+modDomPath.toString());
- modDomPath.setEntity(new EntityPath(thisProxy.getSystemKey()));
- if (!modDomPath.exists())
- Gateway.getLDAPLookup().add(modDomPath);
- Gateway.getLDAPLookup().delete(path);
- }
-
-
- try {
- Viewpoint currentData = (Viewpoint)thisProxy.getObject(ClusterStorage.VIEWPOINT+"/"+getDataType(itemType)+"/"+version);
+
+ // Verify module property and location
+
+ String moduleName = (ns==null?"kernel":ns);
+ String itemModule;
+ try{
+ itemModule = thisProxy.getProperty("Module");
+ if (!itemModule.equals("") && !itemModule.equals("null") && !moduleName.equals(itemModule)) {
+ Logger.error("Bootstrap.verifyResource() - Module clash! Resource '"+itemName+"' included in module "+moduleName+" but is assigned to '"+itemModule+"'. Not overwriting.");
+ return path;
+ }
+ } catch (ObjectNotFoundException ex) {
+ itemModule = "";
+ }
+
+ if (!moduleName.equals(itemModule)) { // write module property
+ Gateway.getStorage().put(thisProxy.getSystemKey(), new Property("Module", moduleName, false), thisProxy);
+ }
+
+ if (!modDomPath.equals(path)) { // move item to module subtree
+ Logger.msg("Module item "+itemName+" found with path "+path.toString()+". Moving to "+modDomPath.toString());
+ modDomPath.setEntity(new EntityPath(thisProxy.getSystemKey()));
+ if (!modDomPath.exists())
+ Gateway.getLDAPLookup().add(modDomPath);
+ Gateway.getLDAPLookup().delete(path);
+ }
+ }
+
+ // Verify/Import Outcomes, creating events and views as necessary
+ Set<Outcome> impList = typeImpHandler.getResourceOutcomes(itemName, ns, dataLocation, version);
+ for (Outcome newOutcome : impList) {
+ try {
+ Viewpoint currentData = (Viewpoint)thisProxy.getObject(ClusterStorage.VIEWPOINT+"/"+newOutcome.getSchemaType()+"/"+version);
Outcome oldData = currentData.getOutcome();
XMLUnit.setIgnoreWhitespace(true);
XMLUnit.setIgnoreComments(true);
Diff xmlDiff = new Diff(newOutcome.getDOM(), oldData.getDOM());
if (xmlDiff.identical()) {
Logger.msg(5, "Bootstrap.verifyResource() - Data identical, no update required");
- return;
+ continue;
}
else {
Logger.msg("Difference found in "+itemName+": "+xmlDiff.toString());
if (!reset && !currentData.getEvent().getStepPath().equals("Bootstrap")) {
Logger.msg("Version "+version+" was not set by Bootstrap, and reset not requested. Not overwriting.");
- return;
+ continue;
}
}
} catch (ObjectNotFoundException ex) {
- Logger.error("Bootstrap.verifyResource() - Item "+itemName+" exists but version "+version+" not found! Attempting to insert new.");
+ Logger.msg("Bootstrap.verifyResource() - Item "+itemName+" exists but version "+version+" not found! Attempting to insert new.");
}
+
+ // data was missing or doesn't match
+ Logger.msg("Bootstrap.verifyResource() - Writing new "+newOutcome.getSchemaType()+"version "+version+" to "+typeImpHandler.getName()+" "+itemName);
+ History hist = new History(thisProxy.getSystemKey(), thisProxy);
+ Transition predefDone = new Transition(0, "Done", 0, 0);
+ Event newEvent = hist.addEvent("system", "Admin", "Bootstrap", "Bootstrap", "Bootstrap", newOutcome.getSchemaType(), 0, "PredefinedStep", 0, predefDone, String.valueOf(version));
+ newOutcome.setID(newEvent.getID());
+ Viewpoint newLastView = new Viewpoint(thisProxy.getSystemKey(), newOutcome.getSchemaType(), "last", 0, newEvent.getID());
+ Viewpoint newNumberView = new Viewpoint(thisProxy.getSystemKey(), newOutcome.getSchemaType(), String.valueOf(version), 0, newEvent.getID());
+ Gateway.getStorage().put(thisProxy.getSystemKey(), newOutcome, thisProxy);
+ Gateway.getStorage().put(thisProxy.getSystemKey(), newLastView, thisProxy);
+ Gateway.getStorage().put(thisProxy.getSystemKey(), newNumberView, thisProxy);
}
- // data was missing or doesn't match
- Logger.msg("Bootstrap.verifyResource() - Writing new version "+version+" to "+getDataType(itemType)+" "+itemName);
- History hist = new History(thisProxy.getSystemKey(), thisProxy);
- Transition predefDone = new Transition(0, "Done", 0, 0);
- Event newEvent = hist.addEvent("system", "Admin", "Bootstrap", "Bootstrap", "Bootstrap", getDataType(itemType), 0, "PredefinedStep", 0, predefDone, String.valueOf(version));
- newOutcome.setID(newEvent.getID());
- Viewpoint newLastView = new Viewpoint(thisProxy.getSystemKey(), getDataType(itemType), "last", 0, newEvent.getID());
- Viewpoint newZeroView = new Viewpoint(thisProxy.getSystemKey(), getDataType(itemType), String.valueOf(version), 0, newEvent.getID());
- Gateway.getStorage().put(thisProxy.getSystemKey(), newOutcome, thisProxy);
- Gateway.getStorage().put(thisProxy.getSystemKey(), newLastView, thisProxy);
- Gateway.getStorage().put(thisProxy.getSystemKey(), newZeroView, thisProxy);
- Gateway.getStorage().commit(thisProxy);
+ Gateway.getStorage().commit(thisProxy);
+ return modDomPath;
+ }
+
+ private static ResourceImportHandler getHandler(String resType) throws Exception {
+ if (resHandlerCache.containsKey(resType))
+ return resHandlerCache.get(resType);
+ ResourceImportHandler handler;
+ Object handlerProp = Gateway.getProperties().get("ResourceImportHandler."+resType);
+ if (handlerProp instanceof ResourceImportHandler)
+ handler = (ResourceImportHandler)handlerProp;
+ else if (handlerProp instanceof String) { //class name
+ try {
+ Class<?> handlerClass = Class.forName((String)handlerProp);
+ handler = (ResourceImportHandler) handlerClass.newInstance();
+ } catch (ClassNotFoundException e) {
+ throw new Exception("Handler class "+handlerProp+" for importing "+resType+" resources not found");
+ } catch (ClassCastException e) {
+ throw new Exception(handlerProp+" for importing "+resType+" was not a ResourceImportHandler");
+ }
+ }
+ else
+ handler = new DefaultResourceImportHandler(resType);
+
+ resHandlerCache.put(resType, handler);
+ return handler;
}
-
- private static DomainPath getResourceDomPath(String itemType, String ns,
- String itemName) throws Exception {
- return new DomainPath(getTypeRoot(itemType).toString()+"/system/"+(ns==null?"kernel":ns)+"/"+itemName);
- }
/**
* @param itemType
* @param itemName
* @param data
*/
- private static ItemProxy createResourceItem(String itemType, String itemName, String ns) throws Exception {
+ private static ItemProxy createResourceItem(ResourceImportHandler impHandler, String itemName, String ns) throws Exception {
// create props
- PropertyDescriptionList pdList = (PropertyDescriptionList)Gateway.getMarshaller().unmarshall(Gateway.getResource().getTextResource(null, "boot/property/"+itemType+"Prop.xml"));
+ PropertyDescriptionList pdList = impHandler.getPropDesc();
PropertyArrayList props = new PropertyArrayList();
for (int i = 0; i < pdList.list.size(); i++) {
PropertyDescription pd = pdList.list.get(i);
@@ -209,16 +238,11 @@ public class Bootstrap props.list.add(new Property(propName, propVal, pd.getIsMutable()));
}
- CompositeActivity ca = new CompositeActivity();
- if (ns!=null && Gateway.getProperties().getBoolean("Module.debug", false)) {
- String wf;
- if (itemType.equals("CA")) wf = "ManageCompositeActDef";
- else if (itemType.equals("EA")) wf = "ManageElementaryActDef";
- else if (itemType.equals("OD")) wf = "ManageSchema";
- else if (itemType.equals("SC")) wf = "ManageScript";
- else throw new Exception("Unknown bootstrap item type: "+itemType);
- ca = (CompositeActivity) ((CompositeActivityDef)LocalObjectLoader.getActDef(wf, 0)).instantiate();
- }
+ CompositeActivity ca;
+ if (ns!=null && Gateway.getProperties().getBoolean("Module.debug", false))
+ ca = (CompositeActivity) ((CompositeActivityDef)LocalObjectLoader.getActDef(impHandler.getWorkflowName(), 0)).instantiate();
+ else
+ ca = new CompositeActivity();
EntityPath entityPath = Gateway.getLDAPLookup().getNextKeyManager().generateNextEntityKey();
TraceableEntity newItem = (TraceableEntity)Gateway.getCorbaServer().createEntity(entityPath);
@@ -227,39 +251,12 @@ public class Bootstrap 1,
Gateway.getMarshaller().marshall(props),
Gateway.getMarshaller().marshall(ca));
- DomainPath newDomPath = getResourceDomPath(itemType, ns, itemName);
+ DomainPath newDomPath = impHandler.getPath(itemName, ns);
newDomPath.setEntity(entityPath);
Gateway.getLDAPLookup().add(newDomPath);
return (ItemProxy)Gateway.getProxyManager().getProxy(entityPath);
}
- public static DomainPath getTypeRoot(String type) throws Exception {
- if (type.equals("CA") || type.equals("EA"))
- return new DomainPath("/desc/ActivityDesc/");
- if (type.equals("SC"))
- return new DomainPath("/desc/Script/");
- if (type.equals("OD"))
- return new DomainPath("/desc/OutcomeDesc/");
- if (type.equals("SM"))
- return new DomainPath("/desc/StateMachine");
- throw new Exception("Unknown bootstrap item type: "+type);
- }
-
- private static String getDataType(String type) throws Exception {
- if (type.equals("CA"))
- return "CompositeActivityDef";
- if (type.equals("EA"))
- return "ElementaryActivityDef";
- if (type.equals("OD"))
- return "Schema";
- if (type.equals("SC"))
- return "Script";
- if (type.equals("SM"))
- return "StateMachine";
- throw new Exception("Unknown bootstrap item type: "+type);
-
- }
-
/**************************************************************************
* Checks for the existence of the admin users so you can use Cristal
**************************************************************************/
diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java index fda4b1b..a7c707e 100644 --- a/src/main/java/com/c2kernel/process/module/Module.java +++ b/src/main/java/com/c2kernel/process/module/Module.java @@ -11,6 +11,7 @@ import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewAgent; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewItem;
import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewRole;
import com.c2kernel.lifecycle.instance.predefined.entitycreation.Outcome;
+import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.RolePath;
import com.c2kernel.process.Bootstrap;
import com.c2kernel.process.Gateway;
@@ -59,10 +60,9 @@ public class Module { // Add dependency for all children
Dependency children = new Dependency("Contents");
for (ModuleImport thisImport : imports.list) {
- String path = thisImport.getPath(ns);
+ DomainPath path = thisImport.path;
if (path != null)
- children.dependencyMemberList.add(
- new DependencyMember(path+"/"+thisImport.name));
+ children.dependencyMemberList.add(new DependencyMember(path.toString()));
}
moduleItem.dependencyList.add(children);
// Add moduleXML
@@ -78,7 +78,8 @@ public class Module { for (ModuleResource thisRes : imports.getResources()) {
try {
- Bootstrap.verifyResource(ns, thisRes.name, thisRes.version, thisRes.resourceType, Gateway.getResource().getTextResource(ns, thisRes.resourceLocation), reset);
+ thisRes.path = Bootstrap.verifyResource(ns, thisRes.name, thisRes.version,
+ thisRes.resourceType, thisRes.resourceLocation, reset);
} catch (Exception ex) {
Logger.error(ex);
}
diff --git a/src/main/java/com/c2kernel/process/module/ModuleImport.java b/src/main/java/com/c2kernel/process/module/ModuleImport.java index 77bf3f6..1f5b16d 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleImport.java +++ b/src/main/java/com/c2kernel/process/module/ModuleImport.java @@ -1,9 +1,10 @@ package com.c2kernel.process.module;
+import com.c2kernel.lookup.DomainPath;
+
public abstract class ModuleImport {
public String name;
+ public DomainPath path;
- public abstract String getPath(String ns);
-
}
\ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleResource.java b/src/main/java/com/c2kernel/process/module/ModuleResource.java index 2f7b638..b36623f 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleResource.java +++ b/src/main/java/com/c2kernel/process/module/ModuleResource.java @@ -8,17 +8,4 @@ public class ModuleResource extends ModuleImport { public ModuleResource() {
}
-
- @Override
- public String getPath(String ns) {
- StringBuffer path = new StringBuffer();
- if (resourceType.equals("CA") || resourceType.equals("EA"))
- path.append("/desc/ActivityDesc/");
- if (resourceType.equals("SC"))
- path.append("/desc/Script/");
- if (resourceType.equals("OD"))
- path.append("/desc/OutcomeDesc/");
- path.append("system/").append(ns==null?"kernel":ns);
- return path.toString();
- }
}
\ No newline at end of file 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<Outcome> getResourceOutcomes(String name, String ns, String location, int version) throws Exception {
+ HashSet<Outcome> retArr = new HashSet<Outcome>();
+ 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<Outcome> 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();
+
+}
|
