From 24314dc1699c7e73048fa24e33729f1aa1ec0e86 Mon Sep 17 00:00:00 2001 From: Andrew Branson Date: Fri, 6 Jul 2012 11:00:24 +0200 Subject: Modules serialize with Castor. Just about to remove the parsing. CastorXMLUtility is now a static member of gateway. Domain specific instances can be used by domain applications, but the maps do not interfere with the kernel. --- pom.xml | 6 +- .../java/com/c2kernel/entity/TraceableEntity.java | 15 +- .../com/c2kernel/entity/agent/ActiveEntity.java | 7 +- .../java/com/c2kernel/entity/proxy/AgentProxy.java | 7 +- .../com/c2kernel/entity/proxy/EntityProxy.java | 3 +- .../java/com/c2kernel/entity/proxy/ItemProxy.java | 4 +- .../com/c2kernel/entity/transfer/TransferItem.java | 7 +- .../com/c2kernel/entity/transfer/TransferSet.java | 3 +- src/main/java/com/c2kernel/graph/model/Vertex.java | 2 +- .../com/c2kernel/lifecycle/instance/JobPusher.java | 4 +- .../instance/predefined/AddC2KObject.java | 3 +- .../predefined/AddStepsFromDescription.java | 3 +- .../predefined/CreateItemFromDescription.java | 11 +- .../instance/predefined/ReplaceDomainWorkflow.java | 3 +- .../predefined/entitycreation/Aggregation.java | 25 +- .../entitycreation/AggregationMember.java | 29 +++ .../predefined/entitycreation/CreateNewAgent.java | 11 +- .../predefined/entitycreation/CreateNewItem.java | 4 +- .../predefined/entitycreation/Dependency.java | 39 +++- .../entitycreation/DependencyMember.java | 23 ++ .../predefined/entitycreation/NewAgent.java | 42 +++- .../predefined/entitycreation/NewItem.java | 133 ++++++----- .../predefined/entitycreation/Outcome.java | 18 ++ .../predefined/entitycreation/Property.java | 26 --- .../java/com/c2kernel/persistency/ProxyLoader.java | 3 +- .../c2kernel/persistency/XMLClusterStorage.java | 5 +- src/main/java/com/c2kernel/process/Bootstrap.java | 7 +- src/main/java/com/c2kernel/process/Gateway.java | 29 ++- .../java/com/c2kernel/process/ItemHTTPBridge.java | 3 +- .../java/com/c2kernel/process/module/Module.java | 255 ++++++--------------- .../com/c2kernel/process/module/ModuleAgent.java | 9 - .../com/c2kernel/process/module/ModuleConfig.java | 22 ++ .../com/c2kernel/process/module/ModuleImport.java | 10 +- .../com/c2kernel/process/module/ModuleImports.java | 18 ++ .../com/c2kernel/process/module/ModuleInfo.java | 14 ++ .../com/c2kernel/process/module/ModuleItem.java | 17 -- .../com/c2kernel/process/module/ModuleManager.java | 34 ++- .../c2kernel/process/module/ModuleResource.java | 19 +- .../com/c2kernel/process/module/ModuleScript.java | 33 +++ .../com/c2kernel/property/PropertyArrayList.java | 17 +- .../com/c2kernel/property/PropertyUtility.java | 3 +- src/main/java/com/c2kernel/utils/ActDefCache.java | 3 +- .../java/com/c2kernel/utils/CastorArrayList.java | 8 +- .../java/com/c2kernel/utils/CastorXMLUtility.java | 17 +- .../resources/boot/CA/ManageElementaryActDef.xml | 2 +- src/main/resources/boot/EA/CreateNewAgent.xml | 2 +- src/main/resources/boot/EA/CreateNewItem.xml | 2 +- src/main/resources/boot/OD/Agent.xsd | 20 ++ src/main/resources/boot/OD/Item.xsd | 105 +++++++++ src/main/resources/boot/OD/Module.xsd | 55 +++-- src/main/resources/boot/OD/NewAgent.xsd | 20 -- src/main/resources/boot/OD/NewItem.xsd | 73 ------ src/main/resources/boot/allbootitems.txt | 4 +- src/main/resources/mapFiles/ModuleMap.xml | 116 +++++++--- src/main/resources/mapFiles/NewEntityMap.xml | 51 +++-- src/main/resources/mapFiles/PropertiesMap.xml | 4 +- src/main/resources/mapFiles/index | 1 + 57 files changed, 835 insertions(+), 574 deletions(-) create mode 100644 src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Outcome.java delete mode 100644 src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Property.java delete mode 100644 src/main/java/com/c2kernel/process/module/ModuleAgent.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleConfig.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleImports.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleInfo.java delete mode 100644 src/main/java/com/c2kernel/process/module/ModuleItem.java create mode 100644 src/main/java/com/c2kernel/process/module/ModuleScript.java create mode 100644 src/main/resources/boot/OD/Agent.xsd create mode 100644 src/main/resources/boot/OD/Item.xsd delete mode 100644 src/main/resources/boot/OD/NewAgent.xsd delete mode 100644 src/main/resources/boot/OD/NewItem.xsd diff --git a/pom.xml b/pom.xml index efcd70c..8d08f7d 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,6 @@ cristal cristal-dev - 0.3 @@ -71,6 +70,11 @@ jldap 4.3 + + cristal + cristal-dev + 0.3 + diff --git a/src/main/java/com/c2kernel/entity/TraceableEntity.java b/src/main/java/com/c2kernel/entity/TraceableEntity.java index c7aff82..93f9407 100644 --- a/src/main/java/com/c2kernel/entity/TraceableEntity.java +++ b/src/main/java/com/c2kernel/entity/TraceableEntity.java @@ -30,7 +30,6 @@ import com.c2kernel.persistency.TransactionManager; import com.c2kernel.process.Gateway; import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; /************************************************************************** @@ -64,9 +63,9 @@ import com.c2kernel.utils.Logger; public class TraceableEntity extends ItemPOA { - private int mSystemKey; - private org.omg.PortableServer.POA mPoa; - private TransactionManager mStorage; + private final int mSystemKey; + private final org.omg.PortableServer.POA mPoa; + private final TransactionManager mStorage; /************************************************************************** @@ -135,7 +134,7 @@ public class TraceableEntity extends ItemPOA // create properties if (!propString.equals("")) { try { - props = (PropertyArrayList)CastorXMLUtility.unmarshall(propString); + props = (PropertyArrayList)Gateway.getMarshaller().unmarshall(propString); for (Object name : props.list) { Property thisProp = (Property)name; mStorage.put(mSystemKey, thisProp, props); @@ -153,7 +152,7 @@ public class TraceableEntity extends ItemPOA if (initWfString == null || initWfString.equals("")) lc = new Workflow(new CompositeActivity()); else - lc = new Workflow((CompositeActivity)CastorXMLUtility.unmarshall(initWfString)); + lc = new Workflow((CompositeActivity)Gateway.getMarshaller().unmarshall(initWfString)); lc.initialise(mSystemKey, agentPath); mStorage.put(mSystemKey, lc, null); } catch (Throwable ex) { @@ -254,7 +253,7 @@ public class TraceableEntity extends ItemPOA CompositeActivity domainWf = (CompositeActivity)wf.search("workflow/domain"); jobBag.list = filter?domainWf.calculateJobs(agent, true):domainWf.calculateAllJobs(agent, true); Logger.msg(1, "TraceableEntity::queryLifeCycle("+mSystemKey+") - Returning "+jobBag.list.size()+" jobs."); - return CastorXMLUtility.marshall( jobBag ); + return Gateway.getMarshaller().marshall( jobBag ); } catch( Throwable ex ) { @@ -309,7 +308,7 @@ public class TraceableEntity extends ItemPOA C2KLocalObject obj = mStorage.get( mSystemKey, path, null ); // marshall it, or in the case of an outcome get the data. - result = CastorXMLUtility.marshall(obj); + result = Gateway.getMarshaller().marshall(obj); } } catch (ObjectNotFoundException ex) { diff --git a/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java b/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java index 3d45e35..d20fc1e 100644 --- a/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java +++ b/src/main/java/com/c2kernel/entity/agent/ActiveEntity.java @@ -28,7 +28,6 @@ import com.c2kernel.persistency.TransactionManager; import com.c2kernel.process.Gateway; import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; /************************************************************************** @@ -123,7 +122,7 @@ public class ActiveEntity extends AgentPOA { try { - props = (PropertyArrayList)CastorXMLUtility.unmarshall(propsString); + props = (PropertyArrayList)Gateway.getMarshaller().unmarshall(propsString); } catch( Exception ex ) { @@ -207,7 +206,7 @@ public class ActiveEntity extends AgentPOA { C2KLocalObject obj = mDatabase.get( mSystemKey, xpath, null ); - result = CastorXMLUtility.marshall(obj); + result = Gateway.getMarshaller().marshall(obj); } } @@ -236,7 +235,7 @@ public class ActiveEntity extends AgentPOA @Override public synchronized void refreshJobList(int sysKey, String stepPath, String newJobs) { try { - JobArrayList newJobList = (JobArrayList)CastorXMLUtility.unmarshall(newJobs); + JobArrayList newJobList = (JobArrayList)Gateway.getMarshaller().unmarshall(newJobs); // get our joblist if (currentJobs == null) diff --git a/src/main/java/com/c2kernel/entity/proxy/AgentProxy.java b/src/main/java/com/c2kernel/entity/proxy/AgentProxy.java index 29cd13b..5c6a37e 100644 --- a/src/main/java/com/c2kernel/entity/proxy/AgentProxy.java +++ b/src/main/java/com/c2kernel/entity/proxy/AgentProxy.java @@ -37,7 +37,6 @@ import com.c2kernel.process.Gateway; import com.c2kernel.scripting.ErrorInfo; import com.c2kernel.scripting.Script; import com.c2kernel.scripting.ScriptingEngineException; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.LocalObjectLoader; import com.c2kernel.utils.Logger; @@ -186,7 +185,7 @@ public class AgentProxy extends EntityProxy } } - public Object callScript(ItemProxy item, Job job) throws ScriptingEngineException { + private Object callScript(ItemProxy item, Job job) throws ScriptingEngineException { Script script = new Script(item, this, job); return script.execute(); } @@ -263,11 +262,11 @@ public class AgentProxy extends EntityProxy /** Wrappers for scripts */ public String marshall(Object obj) throws Exception { - return CastorXMLUtility.marshall(obj); + return Gateway.getMarshaller().marshall(obj); } public Object unmarshall(String obj) throws Exception { - return CastorXMLUtility.unmarshall(obj); + return Gateway.getMarshaller().unmarshall(obj); } /** Let scripts resolve items */ diff --git a/src/main/java/com/c2kernel/entity/proxy/EntityProxy.java b/src/main/java/com/c2kernel/entity/proxy/EntityProxy.java index fae2e28..cb76a19 100644 --- a/src/main/java/com/c2kernel/entity/proxy/EntityProxy.java +++ b/src/main/java/com/c2kernel/entity/proxy/EntityProxy.java @@ -19,7 +19,6 @@ import com.c2kernel.entity.ManageableEntity; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.process.Gateway; import com.c2kernel.property.Property; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; @@ -113,7 +112,7 @@ abstract public class EntityProxy implements ManageableEntity return retString.toString(); } C2KLocalObject target = Gateway.getStorage().get(mSystemKey, path, null); - return CastorXMLUtility.marshall(target); + return Gateway.getMarshaller().marshall(target); } catch (ObjectNotFoundException e) { throw e; } catch (Exception e) { diff --git a/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java b/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java index 658e0c8..dcaef55 100644 --- a/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java +++ b/src/main/java/com/c2kernel/entity/proxy/ItemProxy.java @@ -24,7 +24,7 @@ import com.c2kernel.entity.ManageableEntity; import com.c2kernel.entity.agent.Job; import com.c2kernel.entity.agent.JobArrayList; import com.c2kernel.lifecycle.instance.stateMachine.Transitions; -import com.c2kernel.utils.CastorXMLUtility; +import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; /****************************************************************************** @@ -163,7 +163,7 @@ public class ItemProxy extends EntityProxy JobArrayList thisJobList; try { String jobs = queryLifeCycle(agentId, filter); - thisJobList = (JobArrayList)CastorXMLUtility.unmarshall(jobs); + thisJobList = (JobArrayList)Gateway.getMarshaller().unmarshall(jobs); } catch (Exception e) { Logger.error(e); diff --git a/src/main/java/com/c2kernel/entity/transfer/TransferItem.java b/src/main/java/com/c2kernel/entity/transfer/TransferItem.java index 0e3b764..520063a 100644 --- a/src/main/java/com/c2kernel/entity/transfer/TransferItem.java +++ b/src/main/java/com/c2kernel/entity/transfer/TransferItem.java @@ -16,7 +16,6 @@ import com.c2kernel.persistency.outcome.Outcome; import com.c2kernel.process.Gateway; import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Logger; @@ -58,7 +57,7 @@ public class TransferItem { C2KLocalObject obj = Gateway.getStorage().get(sysKey, path, null); Logger.msg("Dumping object " + path + " in " + sysKey); File dumpPath = new File(dir.getCanonicalPath() + ".xml"); - FileStringUtility.string2File(dumpPath, CastorXMLUtility.marshall(obj)); + FileStringUtility.string2File(dumpPath, Gateway.getMarshaller().marshall(obj)); return; } catch (ObjectNotFoundException ex) { } // not an object @@ -84,7 +83,7 @@ public class TransferItem { if (choppedPath.startsWith(ClusterStorage.OUTCOME)) newObj = new Outcome(choppedPath, xmlFile); else - newObj = (C2KLocalObject)CastorXMLUtility.unmarshall(xmlFile); + newObj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(xmlFile); objects.add(newObj); } @@ -108,7 +107,7 @@ public class TransferItem { throw new Exception("No workflow found in import for "+sysKey); // init item - newItem.initialise(importAgentId, CastorXMLUtility.marshall(props), CastorXMLUtility.marshall(wf.search("workflow/domain"))); + newItem.initialise(importAgentId, Gateway.getMarshaller().marshall(props), Gateway.getMarshaller().marshall(wf.search("workflow/domain"))); // store objects importByType(ClusterStorage.COLLECTION, objects); diff --git a/src/main/java/com/c2kernel/entity/transfer/TransferSet.java b/src/main/java/com/c2kernel/entity/transfer/TransferSet.java index 71a593a..7a3ba2e 100644 --- a/src/main/java/com/c2kernel/entity/transfer/TransferSet.java +++ b/src/main/java/com/c2kernel/entity/transfer/TransferSet.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import com.c2kernel.lookup.EntityPath; import com.c2kernel.lookup.NextKeyManager; import com.c2kernel.process.Gateway; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Logger; @@ -52,7 +51,7 @@ public class TransferSet { } try { - String self = CastorXMLUtility.marshall(this); + String self = Gateway.getMarshaller().marshall(this); FileStringUtility.string2File(new File(dir, "transferSet.xml"), self); } catch (Exception ex) { Logger.error("Error writing header file"); diff --git a/src/main/java/com/c2kernel/graph/model/Vertex.java b/src/main/java/com/c2kernel/graph/model/Vertex.java index ccef437..83f99ef 100644 --- a/src/main/java/com/c2kernel/graph/model/Vertex.java +++ b/src/main/java/com/c2kernel/graph/model/Vertex.java @@ -14,7 +14,7 @@ public class Vertex implements Serializable private int mWidth = 0; private Vector mInEdgeIdVector = new Vector(); private Vector mOutEdgeIdVector = new Vector(); - private Vector mTags = new Vector(); + private final Vector mTags = new Vector(); // The Java Polygon class is used to determine if a point // lies within the outline of a vertex. Unfortunately diff --git a/src/main/java/com/c2kernel/lifecycle/instance/JobPusher.java b/src/main/java/com/c2kernel/lifecycle/instance/JobPusher.java index 5b8be63..27af6b4 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/JobPusher.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/JobPusher.java @@ -10,7 +10,7 @@ import com.c2kernel.entity.agent.JobArrayList; import com.c2kernel.lifecycle.instance.stateMachine.Transitions; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.RolePath; -import com.c2kernel.utils.CastorXMLUtility; +import com.c2kernel.process.Gateway; import com.c2kernel.utils.Logger; final class JobPusher extends Thread { @@ -46,7 +46,7 @@ final class JobPusher extends Thread { element.remove(); } Logger.msg(7, "Activity.pushJobsToAgents() - User will receive " + jobList.list.size() + " jobs"); - String stringJobs = CastorXMLUtility.marshall(jobList); + String stringJobs = Gateway.getMarshaller().marshall(jobList); // push it to the agent org.omg.CORBA.Object agentIOR = nextAgent.getIOR(); Agent thisAgent = AgentHelper.narrow(agentIOR); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java index b61187c..df0c62f 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddC2KObject.java @@ -18,7 +18,6 @@ import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.lookup.AgentPath; import com.c2kernel.lookup.EntityPath; import com.c2kernel.process.Gateway; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; /************************************************************************** @@ -56,7 +55,7 @@ public class AddC2KObject extends PredefinedStep Logger.msg(5, "AddC2KObject::request() - data:" + getDataList(requestData)[0]); - C2KLocalObject obj = (C2KLocalObject)CastorXMLUtility.unmarshall(getDataList(requestData)[0]); + C2KLocalObject obj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(getDataList(requestData)[0]); Gateway.getStorage().put(entityPath.getSysKey(), obj, null ); sendEventStoreOutcome(transitionID, requestData, agent); } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddStepsFromDescription.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddStepsFromDescription.java index 8f88602..5a23424 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddStepsFromDescription.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/AddStepsFromDescription.java @@ -10,7 +10,6 @@ import com.c2kernel.lifecycle.instance.CompositeActivity; import com.c2kernel.lifecycle.instance.Workflow; import com.c2kernel.lookup.AgentPath; import com.c2kernel.process.Gateway; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; public class AddStepsFromDescription extends PredefinedStep @@ -35,7 +34,7 @@ public class AddStepsFromDescription extends PredefinedStep Logger.msg(8, "AddStepsFromDescription::request() - data:" + getDataList(requestData)[0]); lifeCycle.getChildGraphModel().removeVertex(lifeCycle.search("workflow/domain")); - CompositeActivityDef actDef = (CompositeActivityDef) CastorXMLUtility.unmarshall(getDataList(requestData)[0]); + CompositeActivityDef actDef = (CompositeActivityDef) Gateway.getMarshaller().unmarshall(getDataList(requestData)[0]); CompositeActivity domain = (CompositeActivity)actDef.instantiate(); lifeCycle.initChild(domain, true, new GraphPoint(150, 100)); domain.setName("domain"); 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 8c55f3a..71495c0 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/CreateItemFromDescription.java @@ -37,7 +37,6 @@ import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList; import com.c2kernel.property.PropertyDescriptionList; import com.c2kernel.property.PropertyUtility; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.LocalObjectLoader; import com.c2kernel.utils.Logger; @@ -63,6 +62,7 @@ public class CreateItemFromDescription extends PredefinedStep String domPath = input[1]; CompositeActivityDef wfDef; String wfDefName = null; + String wfDefVer = null; if (input.length > 2) // override wf wfDefName = input[2]; @@ -90,13 +90,14 @@ public class CreateItemFromDescription extends PredefinedStep Collection thisCol = (Collection)storage.get(myPath.getSysKey(), ClusterStorage.COLLECTION+"/"+collName, null); if (thisCol instanceof CollectionDescription) { CollectionDescription thisDesc = (CollectionDescription)thisCol; - collections.add(CastorXMLUtility.marshall(thisDesc.newInstance())); + collections.add(Gateway.getMarshaller().marshall(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(); + wfDefVer = (String)wfMember.getProperties().get("Version"); } } @@ -105,7 +106,7 @@ public class CreateItemFromDescription extends PredefinedStep throw new InvalidDataException("No workflow given or defined", ""); try { - wfDef = (CompositeActivityDef)LocalObjectLoader.getActDef(wfDefName, "last"); + wfDef = (CompositeActivityDef)LocalObjectLoader.getActDef(wfDefName, wfDefVer); } catch (ObjectNotFoundException ex) { throw new InvalidDataException("Workflow def '"+wfDefName+"' item not found", ""); } catch (ClassCastException ex) { @@ -150,8 +151,8 @@ public class CreateItemFromDescription extends PredefinedStep newItem.initialise( agent.getSysKey(), - CastorXMLUtility.marshall(props), - CastorXMLUtility.marshall(wfDef.instantiate())); + Gateway.getMarshaller().marshall(props), + Gateway.getMarshaller().marshall(wfDef.instantiate())); // add collections if (collections.size() > 0) { diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java index a249d51..8d8d2c6 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/ReplaceDomainWorkflow.java @@ -9,7 +9,6 @@ import com.c2kernel.lifecycle.instance.CompositeActivity; import com.c2kernel.lifecycle.instance.Workflow; import com.c2kernel.lookup.AgentPath; import com.c2kernel.process.Gateway; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; public class ReplaceDomainWorkflow extends PredefinedStep @@ -34,7 +33,7 @@ public class ReplaceDomainWorkflow extends PredefinedStep Logger.msg(8, "ReplaceDomainWorkflow::request() - data:" + getDataList(requestData)[0]); lifeCycle.getChildGraphModel().removeVertex(lifeCycle.search("workflow/domain")); - CompositeActivity domain = (CompositeActivity) CastorXMLUtility.unmarshall(getDataList(requestData)[0]); + CompositeActivity domain = (CompositeActivity) Gateway.getMarshaller().unmarshall(getDataList(requestData)[0]); lifeCycle.initChild(domain, true, new GraphPoint(150, 100)); Gateway.getStorage().put(getItemEntityPath().getSysKey(), lifeCycle, null); Logger.msg(1, "ReplaceDomainWorkflow::request() - DONE."); diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Aggregation.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Aggregation.java index b99e898..88d9249 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Aggregation.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Aggregation.java @@ -2,6 +2,9 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation; import java.util.ArrayList; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import com.c2kernel.collection.MembershipException; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.graph.model.GraphPoint; @@ -9,17 +12,15 @@ import com.c2kernel.lookup.DomainPath; import com.c2kernel.property.PropertyDescription; import com.c2kernel.property.PropertyDescriptionList; import com.c2kernel.property.PropertyUtility; -import com.c2kernel.utils.CastorHashMap; public class Aggregation implements java.io.Serializable { public boolean isDescription; - public ArrayList aggregationMemberList; + public ArrayList aggregationMemberList = new ArrayList(); public String name; public Aggregation() { super(); - aggregationMemberList = new ArrayList(); } public Aggregation(String name, boolean isDescription) { @@ -28,16 +29,26 @@ public class Aggregation implements java.io.Serializable { this.isDescription = isDescription; } - public com.c2kernel.collection.Aggregation create() throws MembershipException, ObjectNotFoundException { + public Aggregation(Element agg) { + name = agg.getAttribute("name"); + isDescription = agg.getAttribute("isDescription").equals("true"); + NodeList depmemnl = agg.getElementsByTagName("AggregationMember"); + for (int k=0; k0) { PropertyDescriptionList propList = PropertyUtility.getPropertyDescriptionOutcome(new DomainPath(thisMem.itemDescriptionPath).getSysKey()); for (PropertyDescription pd : propList.list) { - props.put(pd.getName(), pd.getDefaultValue()); + thisMem.props.put(pd.getName(), pd.getDefaultValue()); if (pd.getIsClassIdentifier()) classProps.append((classProps.length()>0?",":"")).append(pd.getName()); } @@ -46,7 +57,7 @@ public class Aggregation implements java.io.Serializable { int syskey = new DomainPath(thisMem.itemPath).getSysKey(); if (syskey == -1) throw new MembershipException("Cannot find "+thisMem.itemPath+" specified for collection."); - newAgg.addMember(syskey, props, classProps.toString(), new GraphPoint(thisMem.geometry.x, thisMem.geometry.y), thisMem.geometry.width, thisMem.geometry.height); + newAgg.addMember(syskey, thisMem.props, classProps.toString(), new GraphPoint(thisMem.geometry.x, thisMem.geometry.y), thisMem.geometry.width, thisMem.geometry.height); } } return newAgg; diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/AggregationMember.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/AggregationMember.java index 29d3cf9..64215da 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/AggregationMember.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/AggregationMember.java @@ -1,11 +1,19 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +import com.c2kernel.utils.CastorHashMap; +import com.c2kernel.utils.KeyValuePair; + public class AggregationMember implements java.io.Serializable { public int slotNo; public String itemDescriptionPath; public String itemPath; public Geometry geometry; + public CastorHashMap props = new CastorHashMap(); public AggregationMember() { @@ -18,4 +26,25 @@ public class AggregationMember implements java.io.Serializable { this.itemPath = itemPath; this.geometry = geometry; } + + public AggregationMember(Element memElem) { + Element geom = (Element)memElem.getElementsByTagName("Geometry").item(0); + this.slotNo = Integer.parseInt(memElem.getAttribute("slotNo")); + this.itemDescriptionPath = memElem.getAttribute("itemDescriptionPath"); + this.itemPath = memElem.getAttribute("itemPath"); + this.geometry = new Geometry(Integer.parseInt(geom.getAttribute("x")), Integer.parseInt(geom.getAttribute("y")), + Integer.parseInt(geom.getAttribute("width")), Integer.parseInt(geom.getAttribute("height"))); + NodeList cmpnl = memElem.getElementsByTagName("MemberProperty"); + for (int l=0; l dependencyMemberList; + public ArrayList dependencyMemberList = new ArrayList(); + public CastorHashMap props = new CastorHashMap(); + Element elem; public Dependency() { super(); - dependencyMemberList = new ArrayList(); } public Dependency(String itemDesc) { @@ -27,14 +33,36 @@ public class Dependency implements java.io.Serializable { this.itemDescriptionPath = itemDesc; } - /** + public Dependency(Element dep) { + elem = dep; + name = dep.getAttribute("name"); + isDescription = dep.getAttribute("isDescription").equals("true"); + NodeList cpnl = dep.getElementsByTagName("CollectionProperty"); + for (int k=0; k0) { PropertyDescriptionList propList = PropertyUtility.getPropertyDescriptionOutcome(new DomainPath(itemDescriptionPath).getSysKey()); - CastorHashMap props = new CastorHashMap(); StringBuffer classProps = new StringBuffer(); for (PropertyDescription pd : propList.list) { props.put(pd.getName(), pd.getDefaultValue()); @@ -49,7 +77,8 @@ public class Dependency implements java.io.Serializable { int syskey = new DomainPath(thisMem.itemPath).getSysKey(); if (syskey == -1) throw new MembershipException("Cannot find "+thisMem.itemPath+" specified for collection."); - newDep.addMember(syskey); + com.c2kernel.collection.DependencyMember newDepMem = newDep.addMember(syskey); + newDepMem.getProperties().putAll(thisMem.props); } return newDep; } diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/DependencyMember.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/DependencyMember.java index b70619f..e20fe8b 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/DependencyMember.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/DependencyMember.java @@ -1,10 +1,18 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +import com.c2kernel.utils.CastorHashMap; +import com.c2kernel.utils.KeyValuePair; + public class DependencyMember implements java.io.Serializable { public String itemPath; + public CastorHashMap props = new CastorHashMap(); public DependencyMember() { super(); @@ -15,4 +23,19 @@ public class DependencyMember implements java.io.Serializable { } + public DependencyMember(Element elem) { + itemPath = elem.getAttribute("itemPath"); + NodeList cmpnl = elem.getElementsByTagName("MemberProperty"); + for (int l=0; l roles; + public ArrayList roles = new ArrayList(); + public ArrayList properties = new ArrayList(); public NewAgent() { - super(); - roles = new ArrayList(); + super(null); } public NewAgent(String name, String password) { + super(null); this.name = name; this.password = password; } - protected void create(int agentId) throws ObjectNotFoundException, ObjectCannotBeUpdated, NoSuchAlgorithmException, CannotManageException, ObjectAlreadyExistsException { + public NewAgent(Element imp) { + super(imp); + password = imp.getAttribute("password"); + NodeList rolenl = imp.getElementsByTagName("Role"); + for (int j=0; j propertyList; - - /** - * Field _aggregationList - */ - public ArrayList aggregationList; - - /** - * Field _dependencyList - */ - public ArrayList dependencyList; - + public ArrayList properties = new ArrayList(); + public ArrayList aggregationList = new ArrayList(); + public ArrayList dependencyList = new ArrayList(); + public ArrayList outcomes = new ArrayList(); + public String ns; public NewItem() { - super(); - propertyList = new ArrayList(); - aggregationList = new ArrayList(); - dependencyList = new ArrayList(); + super(null); } public NewItem(String name, String initialPath, String wf) { @@ -70,17 +58,44 @@ public class NewItem { this.workflow = wf; } - public void setProperty(String name, String value) { - for (Property prop : propertyList) { - if (prop.name.equals(name)) { - prop.value = value; - return; - } - } - propertyList.add(new Property(name, value)); - } - - protected void create(int agentId) throws ObjectCannotBeUpdated, ObjectNotFoundException, CannotManageException, ObjectAlreadyExistsException { + public NewItem(String ns, Element elem) { + super(elem); + this.ns = ns; + workflow = elem.getAttribute("workflow"); + if (elem.hasAttribute("initialPath")) + initialPath = elem.getAttribute("initialPath"); + else + initialPath = "/desc/"+ns; + NodeList pnl = elem.getElementsByTagName("Property"); + for (int j=0; j e = props.propertyNames(); e.hasMoreElements();) { - String propName = (String)e.nextElement(); - mC2KProps.put(propName, props.get(propName)); - } + if (props != null) mC2KProps.putAll(props); // dump properties dumpC2KProps(7); - // load kernel mapfiles - try { - CastorXMLUtility.loadMapsFrom(Resource.getKernelResourceURL("mapFiles/")); - } catch (MalformedURLException e1) { - throw new InvalidDataException("Invalid Resource Location", ""); - } - //Initialise language file String languageFile = getProperty("language.file"); if (languageFile != null && languageFile.length() > 0) { @@ -383,6 +377,11 @@ public class Gateway { return mStorage; } + + static public CastorXMLUtility getMarshaller() + { + return mMarshaller; + } static public EntityProxyManager getProxyManager() { diff --git a/src/main/java/com/c2kernel/process/ItemHTTPBridge.java b/src/main/java/com/c2kernel/process/ItemHTTPBridge.java index 40f48f7..6ad8e01 100644 --- a/src/main/java/com/c2kernel/process/ItemHTTPBridge.java +++ b/src/main/java/com/c2kernel/process/ItemHTTPBridge.java @@ -3,7 +3,6 @@ package com.c2kernel.process; import java.util.StringTokenizer; import com.c2kernel.entity.C2KLocalObject; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.server.HTTPRequestHandler; /* QueryData over HTTP Socket Handler @@ -37,7 +36,7 @@ public class ItemHTTPBridge extends HTTPRequestHandler { if (sysKey > -1) { C2KLocalObject response = Gateway.getStorage().get(sysKey, query, null); - return CastorXMLUtility.marshall(response); + return Gateway.getMarshaller().marshall(response); } else return error("404 Not Found", "The entity "+sysKey+" you requested was not found."); diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java index d015aea..22f4543 100644 --- a/src/main/java/com/c2kernel/process/module/Module.java +++ b/src/main/java/com/c2kernel/process/module/Module.java @@ -1,8 +1,8 @@ package com.c2kernel.process.module; import java.io.StringReader; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; -import java.util.HashMap; import java.util.Properties; import javax.xml.parsers.DocumentBuilder; @@ -14,44 +14,31 @@ import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.InputSource; +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; -import com.c2kernel.events.Event; -import com.c2kernel.events.History; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.AggregationMember; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Dependency; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.DependencyMember; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Geometry; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewAgent; import com.c2kernel.lifecycle.instance.predefined.entitycreation.NewItem; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Property; -import com.c2kernel.lifecycle.instance.stateMachine.States; -import com.c2kernel.lifecycle.instance.stateMachine.Transitions; import com.c2kernel.lookup.DomainPath; -import com.c2kernel.persistency.outcome.Outcome; -import com.c2kernel.persistency.outcome.Viewpoint; import com.c2kernel.process.Bootstrap; import com.c2kernel.process.Gateway; import com.c2kernel.scripting.ErrorInfo; -import com.c2kernel.scripting.Script; import com.c2kernel.scripting.ScriptingEngineException; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; import com.c2kernel.utils.Resource; public class Module { - private final String ns, name, desc, version; - private String resURL; - private final ArrayList dependency = new ArrayList(); - private final Properties clientProps = new Properties(); - private final Properties serverProps = new Properties(); - private final HashMap clientScripts = new HashMap(); - private final HashMap serverScripts = new HashMap(); - private final ArrayList imports = new ArrayList(); + public String ns, name; + public ModuleInfo info; + public String resURL; + public ModuleImports imports = new ModuleImports(); + public ArrayList config = new ArrayList(); + public ArrayList scripts = new ArrayList(); private static DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); - private final DocumentBuilder parser; + private DocumentBuilder parser; private Document moduleDOM; static { @@ -59,6 +46,10 @@ public class Module { dbf.setNamespaceAware(false); } + public Module() { + super(); + } + public Module(String moduleXML) throws ModuleException { try { parser = dbf.newDocumentBuilder(); @@ -74,12 +65,13 @@ public class Module { ns = root.getAttribute("ns"); name = root.getAttribute("name"); - Element info = (Element)moduleDOM.getElementsByTagName("Info").item(0); - desc = ((Text)info.getElementsByTagName("Description").item(0).getFirstChild()).getData(); - version = ((Text)info.getElementsByTagName("Version").item(0).getFirstChild()).getData(); - NodeList nl = info.getElementsByTagName("Dependency"); + Element infoElem = (Element)moduleDOM.getElementsByTagName("Info").item(0); + info = new ModuleInfo(); + info.desc = ((Text)infoElem.getElementsByTagName("Description").item(0).getFirstChild()).getData(); + info.version = ((Text)infoElem.getElementsByTagName("Version").item(0).getFirstChild()).getData(); + NodeList nl = infoElem.getElementsByTagName("Dependency"); for (int i=0; i scripts = isServer?serverScripts:clientScripts; - Script thisScript = scripts.get(event); - if (thisScript == null) return null; - try { - Object result = thisScript.execute(); - if (result instanceof ErrorInfo) - return (ErrorInfo)result; - else - return new ErrorInfo(result.toString()); - } catch (ScriptingEngineException ex) { - Logger.error(ex); - return new ErrorInfo("Error running "+event+" script in module "+ns); + public static com.c2kernel.property.Property newProperty(Element p) { + return new com.c2kernel.property.Property(p.getAttribute("name"), ((Text)p.getFirstChild()).getData()); + } + + public void runScript(String event, boolean isServer) throws ScriptingEngineException { + for (ModuleScript script : scripts) { + if (script.shouldRun(event, isServer)) { + Object result = script.getScript().execute(); + if (result instanceof ErrorInfo) { + ErrorInfo error = (ErrorInfo) result; + Logger.error(error.getErrors()); + if (error.getFatal()) + throw new ScriptingEngineException("Fatal Script Error"); + } + else if (result != null) + Logger.msg(result.toString()); + } } } - public void importAll(ItemProxy serverEntity) { - for (ModuleImport thisImp : imports) { - Logger.msg(5, "Importing "+thisImp.importName+" "+thisImp.getClass().getSimpleName()); + public void importAll(ItemProxy serverEntity) throws ObjectCannotBeUpdated, ObjectNotFoundException, CannotManageException, ObjectAlreadyExistsException, NoSuchAlgorithmException { + for (ModuleImport thisImp : imports.list) { + Logger.msg(5, "Importing "+thisImp.name+" "+thisImp.getClass().getSimpleName()); if (thisImp instanceof ModuleResource) { ModuleResource thisRes = (ModuleResource)thisImp; try { - Bootstrap.verifyResource(ns, thisRes.importName, thisRes.resourceType, Resource.getTextResource(ns, thisRes.resourceLocation)); + Bootstrap.verifyResource(ns, thisRes.name, thisRes.resourceType, Resource.getTextResource(ns, thisRes.resourceLocation)); } catch (Exception ex) { Logger.error(ex); } } - else if (thisImp instanceof ModuleItem) { - ModuleItem thisItem = (ModuleItem)thisImp; + else if (thisImp instanceof NewItem) { + NewItem thisItem = (NewItem)thisImp; + thisItem.ns=ns; try { - NewItem item = new NewItem(thisItem.importName, thisItem.initialPath, thisItem.workflow); - item.propertyList = thisItem.props; - DomainPath itemPath = new DomainPath(new DomainPath(item.initialPath), item.name); - if (itemPath.exists()) continue; - serverEntity.requestAction( - Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey(), - "workflow/predefined/CreateNewItem", - Transitions.DONE, - CastorXMLUtility.marshall(item)); - Logger.msg("Module.importAll() - Created item: "+thisItem.importName); - ItemProxy newProxy = (ItemProxy)Gateway.getProxyManager().getProxy(itemPath); - History hist = new History(newProxy.getSystemKey(), newProxy); - for (String thisView : thisItem.outcomes.keySet()) { - String[] info = thisView.split(":"); - int version = Integer.parseInt(info[1]); - String data = Resource.getTextResource(ns, thisItem.outcomes.get(thisView)); - Event newEvent = hist.addEvent("system", "Admin", Transitions.DONE, "Import", "Import", "Import", States.FINISHED); - Outcome newOutcome = new Outcome(newEvent.getID(), data, info[0], version); - Viewpoint newLastView = new Viewpoint(newProxy.getSystemKey(), info[0], info[2], version, newEvent.getID()); - Gateway.getStorage().put(newProxy.getSystemKey(), newOutcome, newProxy); - Gateway.getStorage().put(newProxy.getSystemKey(), newLastView, newProxy); - } - for (Dependency thisDep : thisItem.deps) { - Gateway.getStorage().put(newProxy.getSystemKey(), thisDep.create(), newProxy); - } - for (Aggregation thisAgg : thisItem.aggs) { - Gateway.getStorage().put(newProxy.getSystemKey(), thisAgg.create(), newProxy); - } - Gateway.getStorage().commit(newProxy); - } catch (Exception ex) { - Logger.error("Error importing item "+thisItem.importName+" from module "+name); - Logger.error(ex); - } + new DomainPath(new DomainPath(thisItem.initialPath), thisItem.name).getEntity(); + Logger.msg(3, "Module.importAll() - Item '"+thisItem.name+"' found."); + continue; + } catch (ObjectNotFoundException ex) { } + thisItem.create(Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey()); } - else if (thisImp instanceof ModuleAgent) { - ModuleAgent thisAgent = (ModuleAgent)thisImp; + else if (thisImp instanceof NewAgent) { + NewAgent thisAgent = (NewAgent)thisImp; try { - Gateway.getLDAPLookup().getRoleManager().getAgentPath(thisAgent.importName); - Logger.msg(3, "Module.importAll() - User '"+thisAgent.importName+"' found."); - continue; + Gateway.getLDAPLookup().getRoleManager().getAgentPath(thisAgent.name); + Logger.msg(3, "Module.importAll() - User '"+thisAgent.name+"' found."); + continue; } catch (ObjectNotFoundException ex) { } - Logger.msg("Module.importAll() - User '"+thisAgent.importName+"' not found. Creating."); + Logger.msg("Module.importAll() - User '"+thisAgent.name+"' not found. Creating."); - NewAgent agent = new NewAgent(thisAgent.importName, thisAgent.password); - agent.roles = thisAgent.roles; - try { - serverEntity.requestAction( - Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey(), - "workflow/predefined/CreateNewAgent", - Transitions.DONE, - CastorXMLUtility.marshall(agent)); - } catch (Exception ex) { - Logger.error("Error importing agent "+thisAgent.importName+" from module "+name); - Logger.error(ex); - } + thisAgent.create(Gateway.getLDAPLookup().getRoleManager().getAgentPath("system").getSysKey()); } } } - public Properties getClientProperties() { - return clientProps; - } - - public Properties getServerProperties() { - return serverProps; + public Properties getProperties(boolean isServer) { + Properties props = new Properties(); + for (ModuleConfig thisProp : config) { + if (thisProp.include(isServer)) + props.put(thisProp.name, thisProp.value); + } + return props; } public String getNs() { @@ -310,18 +207,18 @@ public class Module { return name; } public String getDesc() { - return desc; + return info.desc; } public String getVersion() { - return version; + return info.version; } public String getResURL() { return resURL; } public ArrayList getDependencies() { - return dependency; + return info.dependency; } public boolean hasDependency(String dep) { - return dependency.contains(dep); + return info.dependency.contains(dep); } } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleAgent.java b/src/main/java/com/c2kernel/process/module/ModuleAgent.java deleted file mode 100644 index d90ac2e..0000000 --- a/src/main/java/com/c2kernel/process/module/ModuleAgent.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.c2kernel.process.module; - -import java.util.ArrayList; - - -public class ModuleAgent extends ModuleImport { - String password; - ArrayList roles = new ArrayList(); -} \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleConfig.java b/src/main/java/com/c2kernel/process/module/ModuleConfig.java new file mode 100644 index 0000000..cc9acd2 --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleConfig.java @@ -0,0 +1,22 @@ +package com.c2kernel.process.module; + +public class ModuleConfig { + + public String name; + public String value; + public String target; + + public ModuleConfig() { + } + + public ModuleConfig(String name, String value, String target) { + super(); + this.name = name; + this.value = value; + this.target = target; + } + + public boolean include(boolean isServer) { + return (target == null || target.length() == 0 || isServer == target.equals("server")); + } +} diff --git a/src/main/java/com/c2kernel/process/module/ModuleImport.java b/src/main/java/com/c2kernel/process/module/ModuleImport.java index f505a40..60193c7 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleImport.java +++ b/src/main/java/com/c2kernel/process/module/ModuleImport.java @@ -1,5 +1,13 @@ package com.c2kernel.process.module; +import org.w3c.dom.Element; + public abstract class ModuleImport { - String importName; + + Element elem; + public String name; + + public ModuleImport(Element elem) { + this.elem = elem; + } } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleImports.java b/src/main/java/com/c2kernel/process/module/ModuleImports.java new file mode 100644 index 0000000..d8c56ce --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleImports.java @@ -0,0 +1,18 @@ +package com.c2kernel.process.module; + +import java.util.ArrayList; + +import com.c2kernel.utils.CastorArrayList; + +public class ModuleImports extends CastorArrayList { + + public ModuleImports() + { + super(); + } + + public ModuleImports(ArrayList aList) + { + super(aList); + } +} diff --git a/src/main/java/com/c2kernel/process/module/ModuleInfo.java b/src/main/java/com/c2kernel/process/module/ModuleInfo.java new file mode 100644 index 0000000..55e02c9 --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleInfo.java @@ -0,0 +1,14 @@ +package com.c2kernel.process.module; + +import java.util.ArrayList; + +public class ModuleInfo { + + public String desc; + public String version; + public ArrayList dependency = new ArrayList(); + + public ModuleInfo() { + } + +} diff --git a/src/main/java/com/c2kernel/process/module/ModuleItem.java b/src/main/java/com/c2kernel/process/module/ModuleItem.java deleted file mode 100644 index f74788d..0000000 --- a/src/main/java/com/c2kernel/process/module/ModuleItem.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.c2kernel.process.module; - -import java.util.ArrayList; -import java.util.HashMap; - -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Dependency; -import com.c2kernel.lifecycle.instance.predefined.entitycreation.Property; - -public class ModuleItem extends ModuleImport { - ArrayList props = new ArrayList(); - HashMap outcomes = new HashMap(); - ArrayList deps = new ArrayList(); - ArrayList aggs = new ArrayList(); - String workflow; - String initialPath; -} \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleManager.java b/src/main/java/com/c2kernel/process/module/ModuleManager.java index aa598fa..ca47ec9 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleManager.java +++ b/src/main/java/com/c2kernel/process/module/ModuleManager.java @@ -1,15 +1,19 @@ package com.c2kernel.process.module; -import java.io.IOException; import java.net.URL; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Enumeration; import java.util.Properties; +import com.c2kernel.common.CannotManageException; +import com.c2kernel.common.ObjectAlreadyExistsException; +import com.c2kernel.common.ObjectCannotBeUpdated; import com.c2kernel.common.ObjectNotFoundException; import com.c2kernel.entity.proxy.ItemProxy; import com.c2kernel.lookup.DomainPath; import com.c2kernel.process.Gateway; +import com.c2kernel.scripting.ScriptingEngineException; import com.c2kernel.utils.FileStringUtility; import com.c2kernel.utils.Logger; @@ -18,20 +22,22 @@ public class ModuleManager { Properties props = new Properties(); boolean isServer; - public ModuleManager(Enumeration moduleEnum, boolean isServer) throws ModuleException{ + public ModuleManager(Enumeration moduleEnum, boolean isServer) throws ModuleException { this.isServer = isServer; ArrayList loadedModules = new ArrayList(); ArrayList moduleNs = new ArrayList(); while(moduleEnum.hasMoreElements()) { URL newModuleURL = moduleEnum.nextElement(); try { + //Module newModule = (Module)Gateway.getMarshaller().unmarshall(FileStringUtility.url2String(newModuleURL)); + //Resource.addModuleBaseURL(newModule.ns, newModule.resURL); Module newModule = new Module(FileStringUtility.url2String(newModuleURL)); modules.add(newModule); if (loadedModules.contains(newModule.getName())) throw new ModuleException("Module name clash: "+newModule.getName()); if (moduleNs.contains(newModule.getNs())) throw new ModuleException("Module namespace clash: "+newModule.getNs()); Logger.debug(4, "Module found: "+newModule.getNs()+" - "+newModule.getName()); loadedModules.add(newModule.getName()); moduleNs.add(newModule.getNs()); - Properties modProp = isServer?newModule.getServerProperties():newModule.getClientProperties(); + Properties modProp = newModule.getProperties(isServer); for (Enumeration e = modProp.propertyNames(); e.hasMoreElements();) { String propName = (String)e.nextElement(); props.put(propName, modProp.get(propName)); @@ -39,7 +45,7 @@ public class ModuleManager { } catch (ModuleException e) { Logger.error("Could not load module description from "+newModuleURL); throw e; - } catch (IOException e) { + } catch (Exception e) { Logger.error(e); throw new ModuleException("Could not load module.xml from "+newModuleURL); } @@ -76,11 +82,16 @@ public class ModuleManager { public void runScripts(String event) { for (Module thisMod : modules) { - thisMod.runScript(event, isServer); + try { + thisMod.runScript(event, isServer); + } catch (ScriptingEngineException e) { + Logger.error(e); + Logger.die(e.getMessage()); + } } } - public void registerModules() throws ObjectNotFoundException { + public void registerModules() throws ObjectNotFoundException, ObjectCannotBeUpdated, CannotManageException, ObjectAlreadyExistsException, NoSuchAlgorithmException { ItemProxy serverEntity = (ItemProxy)Gateway.getProxyManager().getProxy(new DomainPath("/servers/"+Gateway.getProperty("ItemServer.name"))); Logger.debug(3, "Registering modules"); for (Module thisMod : modules) { @@ -89,4 +100,15 @@ public class ModuleManager { Logger.msg("Module "+thisMod.getName()+" registered"); } } + + public void dumpModules() { + for (Module thisMod : modules) { + try { + FileStringUtility.string2File(thisMod.getName()+".xml", Gateway.getMarshaller().marshall(thisMod)); + } catch (Exception e) { + Logger.error(e); + } + } + + } } diff --git a/src/main/java/com/c2kernel/process/module/ModuleResource.java b/src/main/java/com/c2kernel/process/module/ModuleResource.java index 98d15d4..f355f6f 100644 --- a/src/main/java/com/c2kernel/process/module/ModuleResource.java +++ b/src/main/java/com/c2kernel/process/module/ModuleResource.java @@ -1,6 +1,21 @@ package com.c2kernel.process.module; +import org.w3c.dom.Element; +import org.w3c.dom.Text; + public class ModuleResource extends ModuleImport { - String resourceType; - String resourceLocation; + + public String resourceType; + public String resourceLocation; + + public ModuleResource() { + super(null); + } + + public ModuleResource(Element elem) { + super(elem); + resourceType = elem.getAttribute("type"); + resourceLocation = ((Text)elem.getFirstChild()).getData(); + } + } \ No newline at end of file diff --git a/src/main/java/com/c2kernel/process/module/ModuleScript.java b/src/main/java/com/c2kernel/process/module/ModuleScript.java new file mode 100644 index 0000000..8612843 --- /dev/null +++ b/src/main/java/com/c2kernel/process/module/ModuleScript.java @@ -0,0 +1,33 @@ +package com.c2kernel.process.module; + +import com.c2kernel.scripting.ErrorInfo; +import com.c2kernel.scripting.Script; +import com.c2kernel.scripting.ScriptingEngineException; + +public class ModuleScript { + + + public String target; + public String event; + public String lang; + public String script; + public ModuleScript() { + } + + public ModuleScript(String target, String event, String lang, String script) { + super(); + this.target = target; + this.event = event; + this.lang = lang; + this.script = script; + } + + public Script getScript() throws ScriptingEngineException { + return new Script(lang, script, ErrorInfo.class); + } + + public boolean shouldRun(String event, boolean isServer) { + return ((this.target == null || this.target.length() == 0 || isServer == target.equals("server")) && + (this.event == null || this.event.length() == 0 || event.equals(this.event))); + } +} diff --git a/src/main/java/com/c2kernel/property/PropertyArrayList.java b/src/main/java/com/c2kernel/property/PropertyArrayList.java index f59b2d5..5401f22 100644 --- a/src/main/java/com/c2kernel/property/PropertyArrayList.java +++ b/src/main/java/com/c2kernel/property/PropertyArrayList.java @@ -22,8 +22,21 @@ public class PropertyArrayList extends CastorArrayList public PropertyArrayList(ArrayList aList) { - super(aList); + super(); + // put all properties in order, so later ones with the same name overwrite earlier ones + for (Property property : aList) { + put(property); + } } - + /** Overwrite */ + public void put(Property p) { + for (Property thisProp : list) { + if (thisProp.getName().equals(p.getName())) { + list.remove(thisProp); + break; + } + } + list.add(p); + } } diff --git a/src/main/java/com/c2kernel/property/PropertyUtility.java b/src/main/java/com/c2kernel/property/PropertyUtility.java index 497e5d3..968ff13 100644 --- a/src/main/java/com/c2kernel/property/PropertyUtility.java +++ b/src/main/java/com/c2kernel/property/PropertyUtility.java @@ -17,7 +17,6 @@ import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.outcome.Outcome; import com.c2kernel.process.Gateway; import com.c2kernel.utils.CastorHashMap; -import com.c2kernel.utils.CastorXMLUtility; import com.c2kernel.utils.Logger; @@ -60,7 +59,7 @@ public class PropertyUtility try { Outcome outc = (Outcome) Gateway.getStorage().get(entityKey, ClusterStorage.VIEWPOINT+"/PropertyDescription/last/data", null); - return (PropertyDescriptionList)CastorXMLUtility.unmarshall(outc.getData()); + return (PropertyDescriptionList)Gateway.getMarshaller().unmarshall(outc.getData()); } catch (Exception ex) { diff --git a/src/main/java/com/c2kernel/utils/ActDefCache.java b/src/main/java/com/c2kernel/utils/ActDefCache.java index 0c9fea1..1345e25 100644 --- a/src/main/java/com/c2kernel/utils/ActDefCache.java +++ b/src/main/java/com/c2kernel/utils/ActDefCache.java @@ -12,6 +12,7 @@ import com.c2kernel.lifecycle.ActivityDef; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.persistency.outcome.Viewpoint; +import com.c2kernel.process.Gateway; public class ActDefCache { @@ -34,7 +35,7 @@ public class ActDefCache { throw new ObjectNotFoundException("Problem loading "+actName+" v"+actVersion+": "+ex.getMessage(), ""); } try { - thisActDef = (ActivityDef)CastorXMLUtility.unmarshall(marshalledAct); + thisActDef = (ActivityDef)Gateway.getMarshaller().unmarshall(marshalledAct); } catch (Exception ex) { Logger.error(ex); throw new InvalidDataException("Could not unmarshall '"+actName+"' v"+actVersion+": "+ex.getMessage(), ""); diff --git a/src/main/java/com/c2kernel/utils/CastorArrayList.java b/src/main/java/com/c2kernel/utils/CastorArrayList.java index ea9a090..a7b5d8a 100644 --- a/src/main/java/com/c2kernel/utils/CastorArrayList.java +++ b/src/main/java/com/c2kernel/utils/CastorArrayList.java @@ -15,15 +15,15 @@ import java.util.ArrayList; * All rights reserved. **************************************************************************/ // -abstract public class CastorArrayList implements Serializable { - public ArrayList list; +abstract public class CastorArrayList implements Serializable { + public ArrayList list; public CastorArrayList() { super(); - list = new ArrayList(); + list = new ArrayList(); } - public CastorArrayList(ArrayList list) { + public CastorArrayList(ArrayList list) { this(); this.list = list; } diff --git a/src/main/java/com/c2kernel/utils/CastorXMLUtility.java b/src/main/java/com/c2kernel/utils/CastorXMLUtility.java index 4dca391..6bdc657 100644 --- a/src/main/java/com/c2kernel/utils/CastorXMLUtility.java +++ b/src/main/java/com/c2kernel/utils/CastorXMLUtility.java @@ -27,16 +27,16 @@ import com.c2kernel.persistency.outcome.Outcome; **************************************************************************/ public class CastorXMLUtility { - private static Mapping mMapping = new Mapping(); - private static HashSet mMappingKeys = new HashSet(); - + private final Mapping mMapping = new Mapping(); + private final HashSet mMappingKeys = new HashSet(); + /** * Looks for a file called 'index.xml' at the given URL, and loads every file * listed in there by relative path * * @param mapURL - map root - */ - static public void loadMapsFrom(URL mapURL) throws InvalidDataException { + */ + public CastorXMLUtility(URL mapURL) throws InvalidDataException { // load index.xml Logger.msg(3, "Loading maps from "+mapURL); String index; @@ -60,12 +60,13 @@ public class CastorXMLUtility Logger.msg("Loaded all maps from "+mapURL.toString()); } + /************************************************************************** * Updates a mapping referenced by the mapID. * The same mapping cannot be loaded many times as it generates an exception. * That is the reason for this method as it maintains the HashSet of MappingKeys. **************************************************************************/ - static public void addMapping( URL mapID ) + public void addMapping( URL mapID ) throws IOException, MappingException, MarshalException, @@ -89,7 +90,7 @@ public class CastorXMLUtility * Marshalls a mapped object to string. The mapping must be loaded before. * See updateMapping(). **************************************************************************/ - static public String marshall( Object obj ) + public String marshall( Object obj ) throws IOException, MappingException, MarshalException, @@ -112,7 +113,7 @@ public class CastorXMLUtility * Unmarshalls a mapped object from string. The mapping must be loaded before. * See updateMapping(). **************************************************************************/ - static public Object unmarshall( String data ) + public Object unmarshall( String data ) throws IOException, MappingException, MarshalException, diff --git a/src/main/resources/boot/CA/ManageElementaryActDef.xml b/src/main/resources/boot/CA/ManageElementaryActDef.xml index 03f747a..77baa8e 100644 --- a/src/main/resources/boot/CA/ManageElementaryActDef.xml +++ b/src/main/resources/boot/CA/ManageElementaryActDef.xml @@ -94,7 +94,7 @@ - + AssignNewVersionFromLast diff --git a/src/main/resources/boot/EA/CreateNewAgent.xml b/src/main/resources/boot/EA/CreateNewAgent.xml index 49f1f32..1377012 100644 --- a/src/main/resources/boot/EA/CreateNewAgent.xml +++ b/src/main/resources/boot/EA/CreateNewAgent.xml @@ -10,7 +10,7 @@ - + diff --git a/src/main/resources/boot/EA/CreateNewItem.xml b/src/main/resources/boot/EA/CreateNewItem.xml index 8daaf74..d3dee53 100644 --- a/src/main/resources/boot/EA/CreateNewItem.xml +++ b/src/main/resources/boot/EA/CreateNewItem.xml @@ -10,7 +10,7 @@ - + diff --git a/src/main/resources/boot/OD/Agent.xsd b/src/main/resources/boot/OD/Agent.xsd new file mode 100644 index 0000000..5b9f3f4 --- /dev/null +++ b/src/main/resources/boot/OD/Agent.xsd @@ -0,0 +1,20 @@ + + + + + + Complete Structure for new agent + + + + + + The initial roles that this Agent will hold + + + + + + + + diff --git a/src/main/resources/boot/OD/Item.xsd b/src/main/resources/boot/OD/Item.xsd new file mode 100644 index 0000000..5d5c1cf --- /dev/null +++ b/src/main/resources/boot/OD/Item.xsd @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A new collection with layout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/boot/OD/Module.xsd b/src/main/resources/boot/OD/Module.xsd index 10a0155..bd92ffc 100644 --- a/src/main/resources/boot/OD/Module.xsd +++ b/src/main/resources/boot/OD/Module.xsd @@ -47,7 +47,8 @@ Items to import into or verify within the - Cristal server upon launch. + Cristal server upon launch. + @@ -73,17 +74,7 @@ - - - - - - - - - + @@ -102,12 +93,23 @@ maxOccurs="unbounded"> - + + + + + + + + + + - + @@ -131,6 +134,7 @@ use="required" /> + @@ -158,6 +162,7 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/boot/OD/NewAgent.xsd b/src/main/resources/boot/OD/NewAgent.xsd deleted file mode 100644 index 773f4fc..0000000 --- a/src/main/resources/boot/OD/NewAgent.xsd +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - Complete Structure for new agent - - - - - - The initial roles that this Agent will hold - - - - - - - - diff --git a/src/main/resources/boot/OD/NewItem.xsd b/src/main/resources/boot/OD/NewItem.xsd deleted file mode 100644 index bcd5298..0000000 --- a/src/main/resources/boot/OD/NewItem.xsd +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - Complete Structure for new item - - - - - - New Properties for the item - - - - - - - - - A new collection with layout - - - - - - - - - The position and size of this member slot on the layout - - - - - - - - - - - - - - - - - - - - - - A new collection without layout - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/boot/allbootitems.txt b/src/main/resources/boot/allbootitems.txt index 5eddc7a..09a98b8 100644 --- a/src/main/resources/boot/allbootitems.txt +++ b/src/main/resources/boot/allbootitems.txt @@ -1,8 +1,8 @@ OD/CompositeActivityDef OD/ElementaryActivityDef OD/Module -OD/NewAgent -OD/NewItem +OD/Agent +OD/Item OD/PredefinedStepOutcome OD/PropertyDescription OD/Schema diff --git a/src/main/resources/mapFiles/ModuleMap.xml b/src/main/resources/mapFiles/ModuleMap.xml index 15fcb99..d858123 100644 --- a/src/main/resources/mapFiles/ModuleMap.xml +++ b/src/main/resources/mapFiles/ModuleMap.xml @@ -1,41 +1,85 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/mapFiles/NewEntityMap.xml b/src/main/resources/mapFiles/NewEntityMap.xml index 5d9d7ca..a5d5006 100644 --- a/src/main/resources/mapFiles/NewEntityMap.xml +++ b/src/main/resources/mapFiles/NewEntityMap.xml @@ -1,7 +1,7 @@ - + @@ -11,22 +11,17 @@ - + - - + + - - - - - - - + + @@ -53,6 +48,10 @@ + + + @@ -81,14 +80,37 @@ + + + + + + + + + + + + + + + + + + + + + - + @@ -98,5 +120,8 @@ - + + + + diff --git a/src/main/resources/mapFiles/PropertiesMap.xml b/src/main/resources/mapFiles/PropertiesMap.xml index 7936a75..cdb27fc 100644 --- a/src/main/resources/mapFiles/PropertiesMap.xml +++ b/src/main/resources/mapFiles/PropertiesMap.xml @@ -3,10 +3,10 @@ - + - + diff --git a/src/main/resources/mapFiles/index b/src/main/resources/mapFiles/index index 03de6f2..25fef77 100644 --- a/src/main/resources/mapFiles/index +++ b/src/main/resources/mapFiles/index @@ -8,3 +8,4 @@ JobListMap.xml ViewpointMap.xml TransferMap.xml NewEntityMap.xml +ModuleMap.xml -- cgit v1.2.3