diff options
| author | Andrew Branson <andrew.branson@cern.ch> | 2012-07-06 11:00:24 +0200 |
|---|---|---|
| committer | Andrew Branson <andrew.branson@cern.ch> | 2012-07-06 11:00:24 +0200 |
| commit | 24314dc1699c7e73048fa24e33729f1aa1ec0e86 (patch) | |
| tree | c97af82997783b860c36f4410973b23caff0d42e /src | |
| parent | cc79e98c4763affba4fa2e17dfe5a412f9de66c3 (diff) | |
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.
Diffstat (limited to 'src')
55 files changed, 811 insertions, 554 deletions
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<Integer> mInEdgeIdVector = new Vector<Integer>();
private Vector<Integer> mOutEdgeIdVector = new Vector<Integer>();
- private Vector<Object> mTags = new Vector<Object>();
+ private final Vector<Object> mTags = new Vector<Object>();
// 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<? extends CollectionMember> thisCol = (Collection<? extends CollectionMember>)storage.get(myPath.getSysKey(), ClusterStorage.COLLECTION+"/"+collName, null);
if (thisCol instanceof CollectionDescription) {
CollectionDescription<? extends CollectionMember> thisDesc = (CollectionDescription<? extends CollectionMember>)thisCol;
- collections.add(CastorXMLUtility.marshall(thisDesc.newInstance()));
+ collections.add(Gateway.getMarshaller().marshall(thisDesc.newInstance()));
}
else if (thisCol.getName().equalsIgnoreCase("workflow") && wfDefName == null) {
ArrayList<? extends CollectionMember> 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<AggregationMember> aggregationMemberList;
+ public ArrayList<AggregationMember> aggregationMemberList = new ArrayList<AggregationMember>();
public String name;
public Aggregation() {
super();
- aggregationMemberList = new ArrayList<AggregationMember>();
}
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; k<depmemnl.getLength(); k++) {
+ Element memElem = (Element)depmemnl.item(k);
+ AggregationMember newAggMem = new AggregationMember(memElem);
+ aggregationMemberList.add(newAggMem);
+ }
+ }
+
+ public com.c2kernel.collection.Aggregation create() throws MembershipException, ObjectNotFoundException {
com.c2kernel.collection.Aggregation newAgg = isDescription?new com.c2kernel.collection.AggregationDescription(name):new com.c2kernel.collection.AggregationInstance(name);
newAgg.setName(name);
for (AggregationMember thisMem : aggregationMemberList) {
- CastorHashMap props = new CastorHashMap();
StringBuffer classProps = new StringBuffer();
if (thisMem.itemDescriptionPath != null && thisMem.itemDescriptionPath.length()>0) {
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<cmpnl.getLength(); l++) {
+ Element p = (Element)cmpnl.item(l);
+ props.put(p.getAttribute("name"), ((Text)p.getFirstChild()).getData());
+ }
+ }
+ public KeyValuePair[] getKeyValuePairs() {
+ return props.getKeyValuePairs();
+ }
+
+ public void setKeyValuePairs(KeyValuePair[] pairs) {
+ props.setKeyValuePairs(pairs);
+ }
}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java index aa30677..9ec6519 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewAgent.java @@ -1,5 +1,5 @@ /**************************************************************************
- * AddDomainPath
+ * CreateNewAgent.java
*
* Copyright (C) 2001 CERN - European Organization for Nuclear Research
* All rights reserved.
@@ -7,15 +7,12 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation;
-
-
-
import com.c2kernel.common.AccessRightsException;
import com.c2kernel.common.InvalidDataException;
import com.c2kernel.common.InvalidTransitionException;
import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lookup.AgentPath;
-import com.c2kernel.utils.CastorXMLUtility;
+import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
public class CreateNewAgent extends PredefinedStep
@@ -35,10 +32,10 @@ public class CreateNewAgent extends PredefinedStep checkAccessRights(agent);
String redactedRequestData;
try {
- NewAgent newAgent = (NewAgent)CastorXMLUtility.unmarshall(requestData);
+ NewAgent newAgent = (NewAgent)Gateway.getMarshaller().unmarshall(requestData);
newAgent.create(agent.getSysKey());
newAgent.password = "REDACTED";
- redactedRequestData = CastorXMLUtility.marshall(newAgent);
+ redactedRequestData = Gateway.getMarshaller().marshall(newAgent);
} catch (Exception ex) {
Logger.error(ex);
throw new InvalidDataException("Error creating agent", "");
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java index a66b062..824ca4f 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/CreateNewItem.java @@ -15,7 +15,7 @@ import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.InvalidTransitionException;
import com.c2kernel.lifecycle.instance.predefined.PredefinedStep;
import com.c2kernel.lookup.AgentPath;
-import com.c2kernel.utils.CastorXMLUtility;
+import com.c2kernel.process.Gateway;
import com.c2kernel.utils.Logger;
public class CreateNewItem extends PredefinedStep
@@ -35,7 +35,7 @@ public class CreateNewItem extends PredefinedStep checkAccessRights(agent);
try {
- NewItem item = (NewItem)CastorXMLUtility.unmarshall(requestData);
+ NewItem item = (NewItem)Gateway.getMarshaller().unmarshall(requestData);
item.create(agent.getSysKey());
} catch (Exception ex) {
Logger.error(ex);
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Dependency.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Dependency.java index 5993f62..a0d7a1e 100644 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Dependency.java +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Dependency.java @@ -2,6 +2,10 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation; import java.util.ArrayList;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
import com.c2kernel.collection.MembershipException;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.lookup.DomainPath;
@@ -9,17 +13,19 @@ import com.c2kernel.property.PropertyDescription; import com.c2kernel.property.PropertyDescriptionList;
import com.c2kernel.property.PropertyUtility;
import com.c2kernel.utils.CastorHashMap;
+import com.c2kernel.utils.KeyValuePair;
public class Dependency implements java.io.Serializable {
public String name;
public boolean isDescription;
public String itemDescriptionPath;
- public ArrayList<DependencyMember> dependencyMemberList;
+ public ArrayList<DependencyMember> dependencyMemberList = new ArrayList<DependencyMember>();
+ public CastorHashMap props = new CastorHashMap();
+ Element elem;
public Dependency() {
super();
- dependencyMemberList = new ArrayList<DependencyMember>();
}
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; k<cpnl.getLength(); k++) {
+ Element p = (Element)cpnl.item(k);
+ props.put(p.getAttribute("name"), ((Text)p.getFirstChild()).getData());
+ }
+ NodeList depmemnl = dep.getElementsByTagName("DependencyMember");
+ for (int k=0; k<depmemnl.getLength(); k++) {
+ Element p = (Element)depmemnl.item(k);
+ dependencyMemberList.add(new DependencyMember(p));
+ }
+ }
+ public KeyValuePair[] getKeyValuePairs() {
+ return props.getKeyValuePairs();
+ }
+
+ public void setKeyValuePairs(KeyValuePair[] pairs) {
+ props.setKeyValuePairs(pairs);
+ }
+
+ /**
* @return
*/
public com.c2kernel.collection.Dependency create() throws MembershipException, ObjectNotFoundException {
com.c2kernel.collection.Dependency newDep = isDescription?new com.c2kernel.collection.DependencyDescription(name):new com.c2kernel.collection.Dependency(name);
if (itemDescriptionPath != null && itemDescriptionPath.length()>0) {
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<cmpnl.getLength(); l++) {
+ Element p = (Element)cmpnl.item(l);
+ props.put(p.getAttribute("name"), ((Text)p.getFirstChild()).getData());
+ }
+ }
+ public KeyValuePair[] getKeyValuePairs() {
+ return props.getKeyValuePairs();
+ }
+
+ public void setKeyValuePairs(KeyValuePair[] pairs) {
+ props.setKeyValuePairs(pairs);
+ }
}
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 540a6fc..07d2250 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 @@ -3,6 +3,10 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation; import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.ObjectAlreadyExistsException;
import com.c2kernel.common.ObjectCannotBeUpdated;
@@ -11,40 +15,54 @@ import com.c2kernel.entity.agent.ActiveEntity; import com.c2kernel.lookup.AgentPath;
import com.c2kernel.lookup.RolePath;
import com.c2kernel.process.Gateway;
+import com.c2kernel.process.module.Module;
+import com.c2kernel.process.module.ModuleImport;
+import com.c2kernel.property.Property;
import com.c2kernel.property.PropertyArrayList;
-import com.c2kernel.utils.CastorXMLUtility;
import com.c2kernel.utils.Logger;
-public class NewAgent implements java.io.Serializable {
-
- public String name;
+public class NewAgent extends ModuleImport implements java.io.Serializable {
public String password;
- public ArrayList<String> roles;
+ public ArrayList<String> roles = new ArrayList<String>();
+ public ArrayList<Property> properties = new ArrayList<Property>();
public NewAgent() {
- super();
- roles = new ArrayList<String>();
+ 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<rolenl.getLength(); j++) {
+ roles.add(((Text)rolenl.item(j).getFirstChild()).getData());
+ }
+ NodeList pnl = imp.getElementsByTagName("Property");
+ for (int j=0; j<pnl.getLength(); j++) {
+ Element p = (Element)pnl.item(j);
+ properties.add(Module.newProperty(p));
+ }
+ }
+
+ public void create(int agentId) throws ObjectNotFoundException, ObjectCannotBeUpdated, NoSuchAlgorithmException, CannotManageException, ObjectAlreadyExistsException {
AgentPath newAgent = Gateway.getLDAPLookup().getNextKeyManager().generateNextAgentKey();
newAgent.setAgentName(name);
newAgent.setPassword(password);
ActiveEntity newAgentEnt = (ActiveEntity)Gateway.getCorbaServer().createEntity(newAgent);
Gateway.getLDAPLookup().add(newAgent);
// assemble properties
- PropertyArrayList propList = new PropertyArrayList();
- propList.list.add(new com.c2kernel.property.Property("Name", name));
- propList.list.add(new com.c2kernel.property.Property("Type", "Agent"));
+ properties.add(new com.c2kernel.property.Property("Name", name));
+ properties.add(new com.c2kernel.property.Property("Type", "Agent"));
try {
- newAgentEnt.initialise(CastorXMLUtility.marshall(propList));
+ newAgentEnt.initialise(Gateway.getMarshaller().marshall(new PropertyArrayList(properties)));
} catch (Exception ex) {
Logger.error(ex);
throw new CannotManageException("Error initialising new agent");
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 16f6cbf..050615f 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 @@ -3,21 +3,33 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation; import java.util.ArrayList;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
import com.c2kernel.collection.MembershipException;
import com.c2kernel.common.CannotManageException;
import com.c2kernel.common.ObjectAlreadyExistsException;
import com.c2kernel.common.ObjectCannotBeUpdated;
import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.entity.TraceableEntity;
+import com.c2kernel.events.Event;
+import com.c2kernel.events.History;
import com.c2kernel.lifecycle.CompositeActivityDef;
+import com.c2kernel.lifecycle.instance.stateMachine.States;
+import com.c2kernel.lifecycle.instance.stateMachine.Transitions;
import com.c2kernel.lookup.DomainPath;
import com.c2kernel.lookup.EntityPath;
import com.c2kernel.persistency.ClusterStorageException;
+import com.c2kernel.persistency.outcome.Viewpoint;
import com.c2kernel.process.Gateway;
+import com.c2kernel.process.module.Module;
+import com.c2kernel.process.module.ModuleImport;
+import com.c2kernel.property.Property;
import com.c2kernel.property.PropertyArrayList;
-import com.c2kernel.utils.CastorXMLUtility;
import com.c2kernel.utils.LocalObjectLoader;
import com.c2kernel.utils.Logger;
+import com.c2kernel.utils.Resource;
/**
* Complete Structure for new item
@@ -25,42 +37,18 @@ import com.c2kernel.utils.Logger; * @version $Revision: 1.8 $ $Date: 2006/03/03 13:52:21 $
*/
-public class NewItem {
-
- public String name;
+public class NewItem extends ModuleImport {
- /**
- * The initial Domain Path to be created for this Item.
- */
public String initialPath;
-
- /**
- * The name of the Composite Activity Definition to be
- * instantiated for the workflow of this Item
- */
public String workflow;
-
- /**
- * New Properties for the item
- */
- public ArrayList<Property> propertyList;
-
- /**
- * Field _aggregationList
- */
- public ArrayList<Aggregation> aggregationList;
-
- /**
- * Field _dependencyList
- */
- public ArrayList<Dependency> dependencyList;
-
+ public ArrayList<Property> properties = new ArrayList<Property>();
+ public ArrayList<Aggregation> aggregationList = new ArrayList<Aggregation>();
+ public ArrayList<Dependency> dependencyList = new ArrayList<Dependency>();
+ public ArrayList<Outcome> outcomes = new ArrayList<Outcome>();
+ public String ns;
public NewItem() {
- super();
- propertyList = new ArrayList<Property>();
- aggregationList = new ArrayList<Aggregation>();
- dependencyList = new ArrayList<Dependency>();
+ 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<pnl.getLength(); j++) {
+ Element p = (Element)pnl.item(j);
+ properties.add(Module.newProperty(p));
+ }
+ NodeList ocnl = elem.getElementsByTagName("Outcome");
+ for (int j=0; j<ocnl.getLength(); j++) {
+ Element oc = (Element)ocnl.item(j);
+ outcomes.add(new Outcome(oc.getAttribute("schema"), oc.getAttribute("version"), oc.getAttribute("viewname"), ((Text)oc.getFirstChild()).getData()));
+ }
+
+ NodeList depnl = elem.getElementsByTagName("Dependency");
+ for (int j=0; j<depnl.getLength(); j++) {
+ Element dep = (Element)depnl.item(j);
+ Dependency newDep = new Dependency(dep);
+ dependencyList.add(newDep);
+ }
+ NodeList aggnl = elem.getElementsByTagName("Aggregation");
+ for (int j=0; j<aggnl.getLength(); j++) {
+ Element agg = (Element)aggnl.item(j);
+ Aggregation newAgg = new Aggregation(agg);
+ aggregationList.add(newAgg);
+ }
+ }
+
+ public void setNs(String ns) {
+ this.ns = ns;
+ }
+
+ public void create(int agentId) throws ObjectCannotBeUpdated, ObjectNotFoundException, CannotManageException, ObjectAlreadyExistsException {
DomainPath domPath = new DomainPath(new DomainPath(initialPath), name);
if (domPath.exists())
throw new ObjectAlreadyExistsException(domPath+" already exists!", "");
@@ -90,28 +105,40 @@ public class NewItem { TraceableEntity newItem = (TraceableEntity)Gateway.getCorbaServer().createEntity(entPath);
Gateway.getLDAPLookup().add(entPath);
- // assemble properties
- PropertyArrayList propList = new PropertyArrayList();
- propList.list.add(new com.c2kernel.property.Property("Name", name));
- for (Property element : propertyList) {
- propList.list.add(new com.c2kernel.property.Property(element.name, element.value));
- }
+ // set the name property
+ properties.add(new Property("Name", name));
+
// init the new item
try {
// find workflow def
- CompositeActivityDef compact = (CompositeActivityDef)LocalObjectLoader.getActDef(workflow, "last");
-
+ CompositeActivityDef compact = (CompositeActivityDef)LocalObjectLoader.getActDef(workflow, "0");
newItem.initialise(
agentId,
- CastorXMLUtility.marshall(propList),
- CastorXMLUtility.marshall(compact.instantiate()));
+ Gateway.getMarshaller().marshall(new PropertyArrayList(properties)),
+ Gateway.getMarshaller().marshall(compact.instantiate()));
} catch (Exception ex) {
Logger.error("Error initialising new item");
Logger.error(ex);
throw new CannotManageException("Problem initialising new item. See server log.", "");
}
+ // import outcomes
+
+ History hist = new History(entPath.getSysKey(), null);
+ for (Outcome thisOutcome : outcomes) {
+ String data = Resource.getTextResource(ns, thisOutcome.path);
+ Event newEvent = hist.addEvent("system", "Admin", Transitions.DONE, "Import", "Import", "Import", States.FINISHED);
+ com.c2kernel.persistency.outcome.Outcome newOutcome = new com.c2kernel.persistency.outcome.Outcome(newEvent.getID(), data, thisOutcome.schema, thisOutcome.version);
+ Viewpoint newLastView = new Viewpoint(entPath.getSysKey(), thisOutcome.schema, thisOutcome.viewname, thisOutcome.version, newEvent.getID());
+ try {
+ Gateway.getStorage().put(entPath.getSysKey(), newOutcome, null);
+ Gateway.getStorage().put(entPath.getSysKey(), newLastView, null);
+ } catch (ClusterStorageException e) {
+ throw new ObjectCannotBeUpdated("Could not store data for view "+thisOutcome.schema+"/"+thisOutcome.viewname+" in "+name);
+ }
+ }
+
// create collections
for (Dependency element: dependencyList) {
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Outcome.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Outcome.java new file mode 100644 index 0000000..c0e62ec --- /dev/null +++ b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Outcome.java @@ -0,0 +1,18 @@ +package com.c2kernel.lifecycle.instance.predefined.entitycreation;
+
+public class Outcome {
+ public String schema, viewname, path;
+ public int version;
+
+ public Outcome() {
+ }
+
+ public Outcome(String schema, String version, String viewname, String path) {
+ super();
+ this.schema = schema;
+ this.version = Integer.parseInt(version);
+ this.viewname = viewname;
+ this.path = path;
+ }
+
+}
diff --git a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Property.java b/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Property.java deleted file mode 100644 index e2d214c..0000000 --- a/src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Property.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.c2kernel.lifecycle.instance.predefined.entitycreation;
-/**
- * New Properties for the item
- *
- * @version $Revision: 1.1 $ $Date: 2005/04/28 13:48:26 $
- */
-public class Property implements java.io.Serializable {
-
- public String name;
- public String value;
-
-
- //----------------/
- //- Constructors -/
- //----------------/
-
- public Property() {
- super();
- }
-
- public Property(String name, String value) {
- super();
- this.name = name;
- this.value = value;
- }
-}
diff --git a/src/main/java/com/c2kernel/persistency/ProxyLoader.java b/src/main/java/com/c2kernel/persistency/ProxyLoader.java index e614b0d..e93c1ff 100644 --- a/src/main/java/com/c2kernel/persistency/ProxyLoader.java +++ b/src/main/java/com/c2kernel/persistency/ProxyLoader.java @@ -10,7 +10,6 @@ import com.c2kernel.lookup.EntityPath; import com.c2kernel.lookup.LDAPLookup;
import com.c2kernel.persistency.outcome.Outcome;
import com.c2kernel.process.Gateway;
-import com.c2kernel.utils.CastorXMLUtility;
import com.c2kernel.utils.Logger;
/** Used by proxies to load clusters by queryData from the Entity.
@@ -59,7 +58,7 @@ public class ProxyLoader extends ClusterStorage { if (type.equals(OUTCOME))
return new Outcome(path, queryData);
else
- return (C2KLocalObject)CastorXMLUtility.unmarshall(queryData);
+ return (C2KLocalObject)Gateway.getMarshaller().unmarshall(queryData);
}
} catch (Exception e) {
//Logger.error(e);
diff --git a/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java b/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java index 01c7b90..056fe28 100644 --- a/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java +++ b/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java @@ -7,7 +7,6 @@ import com.c2kernel.lookup.EntityPath; import com.c2kernel.lookup.InvalidEntityPathException;
import com.c2kernel.persistency.outcome.Outcome;
import com.c2kernel.process.Gateway;
-import com.c2kernel.utils.CastorXMLUtility;
import com.c2kernel.utils.FileStringUtility;
import com.c2kernel.utils.Logger;
@@ -67,7 +66,7 @@ public class XMLClusterStorage extends ClusterStorage { if (type.equals("Outcome"))
return new Outcome(path, objString);
else {
- C2KLocalObject obj = (C2KLocalObject)CastorXMLUtility.unmarshall(objString);
+ C2KLocalObject obj = (C2KLocalObject)Gateway.getMarshaller().unmarshall(objString);
return obj;
}
@@ -83,7 +82,7 @@ public class XMLClusterStorage extends ClusterStorage { try {
String filePath = getFilePath(sysKey, getPath(obj)+".xml");
Logger.msg(7, "Writing "+filePath);
- String data = CastorXMLUtility.marshall(obj);
+ String data = Gateway.getMarshaller().marshall(obj);
String dir = filePath.substring(0, filePath.lastIndexOf('/'));
if( !FileStringUtility.checkDir( dir ) ) {
diff --git a/src/main/java/com/c2kernel/process/Bootstrap.java b/src/main/java/com/c2kernel/process/Bootstrap.java index 39a13d2..507be7e 100644 --- a/src/main/java/com/c2kernel/process/Bootstrap.java +++ b/src/main/java/com/c2kernel/process/Bootstrap.java @@ -29,7 +29,6 @@ import com.c2kernel.property.Property; import com.c2kernel.property.PropertyArrayList;
import com.c2kernel.property.PropertyDescription;
import com.c2kernel.property.PropertyDescriptionList;
-import com.c2kernel.utils.CastorXMLUtility;
import com.c2kernel.utils.FileStringUtility;
import com.c2kernel.utils.LocalObjectLoader;
import com.c2kernel.utils.Logger;
@@ -153,7 +152,7 @@ public class Bootstrap */
private static ItemProxy createResourceItem(String itemType, String itemName, String ns) throws Exception {
// create props
- PropertyDescriptionList pdList = (PropertyDescriptionList)CastorXMLUtility.unmarshall(Resource.getTextResource(null, "boot/property/"+itemType+"Prop.xml"));
+ PropertyDescriptionList pdList = (PropertyDescriptionList)Gateway.getMarshaller().unmarshall(Resource.getTextResource(null, "boot/property/"+itemType+"Prop.xml"));
PropertyArrayList props = new PropertyArrayList();
for (int i = 0; i < pdList.list.size(); i++) {
PropertyDescription pd = pdList.list.get(i);
@@ -179,8 +178,8 @@ public class Bootstrap Gateway.getLDAPLookup().add(entityPath);
newItem.initialise(
1,
- CastorXMLUtility.marshall(props),
- CastorXMLUtility.marshall(ca));
+ Gateway.getMarshaller().marshall(props),
+ Gateway.getMarshaller().marshall(ca));
DomainPath newDomPath = new DomainPath(getTypeRoot(itemType).toString()+"/system/"+(ns==null?"kernel":ns)+"/"+itemName);
newDomPath.setEntity(entityPath);
Gateway.getLDAPLookup().add(newDomPath);
diff --git a/src/main/java/com/c2kernel/process/Gateway.java b/src/main/java/com/c2kernel/process/Gateway.java index e0decc4..4cba4ba 100644 --- a/src/main/java/com/c2kernel/process/Gateway.java +++ b/src/main/java/com/c2kernel/process/Gateway.java @@ -58,6 +58,7 @@ public class Gateway static private EntityProxyManager mProxyManager;
static private CorbaServer mCorbaServer;
static private SimpleTCPIPServer mHTTPServer;
+ static private CastorXMLUtility mMarshaller;
@@ -73,15 +74,18 @@ public class Gateway */
static public void init(Properties props, boolean isServer) throws InvalidDataException {
- // if supplied props are null, use system props
- if (props == null) props = System.getProperties();
-
// Init properties
mC2KProps = new Properties();
- mC2KProps.putAll(props);
// report version info
Logger.msg("Kernel version: "+Resource.getKernelVersion());
+
+ // load kernel mapfiles
+ try {
+ mMarshaller = new CastorXMLUtility(Resource.getKernelResourceURL("mapFiles/"));
+ } catch (MalformedURLException e1) {
+ throw new InvalidDataException("Invalid Resource Location", "");
+ }
// init module manager
try {
@@ -99,21 +103,11 @@ public class Gateway }
// Overwrite with argument props
- for (Enumeration<?> 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<String> dependency = new ArrayList<String>();
- private final Properties clientProps = new Properties();
- private final Properties serverProps = new Properties();
- private final HashMap<String, Script> clientScripts = new HashMap<String, Script>();
- private final HashMap<String, Script> serverScripts = new HashMap<String, Script>();
- private final ArrayList<ModuleImport> imports = new ArrayList<ModuleImport>();
+ public String ns, name;
+ public ModuleInfo info;
+ public String resURL;
+ public ModuleImports imports = new ModuleImports();
+ public ArrayList<ModuleConfig> config = new ArrayList<ModuleConfig>();
+ public ArrayList<ModuleScript> scripts = new ArrayList<ModuleScript>();
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<nl.getLength();i++)
- dependency.add(((Text)nl.item(i).getFirstChild()).getData());
+ info.dependency.add(((Text)nl.item(i).getFirstChild()).getData());
// register resource URL
nl = root.getElementsByTagName("ResourceURL");
@@ -95,9 +87,7 @@ public class Module { String target = confElement.getAttribute("target");
String name = confElement.getAttribute("name");
String value = ((Text)confElement.getFirstChild()).getData();
- // target can be 'client', 'server' or missing, which implies both.
- if (!target.equals("client")) serverProps.put(name, value);
- if (!target.equals("server")) clientProps.put(name, value);
+ config.add(new ModuleConfig(name, value, target));
}
// find scripts
@@ -107,15 +97,7 @@ public class Module { String target = confElement.getAttribute("target");
String event = confElement.getAttribute("event");
String lang = confElement.getAttribute("lang");
- try {
- Script thisScript = new Script(lang, ((Text)confElement.getFirstChild()).getData(), ErrorInfo.class);
- // target can be 'client', 'server' or missing, which implies both.
- if (!target.equals("client")) serverScripts.put(event, thisScript);
- if (!target.equals("server")) clientScripts.put(event, thisScript);
- } catch (ScriptingEngineException e) {
- Logger.error(e);
- throw new ModuleException("Could not process module script");
- }
+ scripts.add(new ModuleScript(target, event, lang, ((Text)confElement.getFirstChild()).getData()));
}
// Get imports
@@ -129,67 +111,15 @@ public class Module { ModuleImport newImp;
String type = imp.getTagName();
if (type.equals("Resource")) {
- ModuleResource newRes = new ModuleResource();
- newRes.resourceType = imp.getAttribute("type");
- newRes.resourceLocation = ((Text)imp.getFirstChild()).getData();
+ ModuleResource newRes = new ModuleResource(imp);
newImp = newRes;
}
else if (type.equals("Item")) {
- ModuleItem newItem = new ModuleItem();
- newItem.workflow = imp.getAttribute("workflow");
- if (imp.hasAttribute("initialPath"))
- newItem.initialPath = imp.getAttribute("initialPath");
- else
- newItem.initialPath = "/desc/"+ns;
- NodeList pnl = imp.getElementsByTagName("Property");
- for (int j=0; j<pnl.getLength(); j++) {
- Element p = (Element)pnl.item(j);
- newItem.props.add(new Property(p.getAttribute("name"), ((Text)p.getFirstChild()).getData()));
- }
- NodeList ocnl = imp.getElementsByTagName("Outcome");
- for (int j=0; j<ocnl.getLength(); j++) {
- Element oc = (Element)ocnl.item(j);
- newItem.outcomes.put(oc.getAttribute("schema")+":"+oc.getAttribute("version")+":"+oc.getAttribute("viewname"), ((Text)oc.getFirstChild()).getData());
- }
- NodeList depnl = imp.getElementsByTagName("Dependency");
- for (int j=0; j<depnl.getLength(); j++) {
- Element dep = (Element)depnl.item(j);
- Dependency newDep = new Dependency();
- newDep.name = dep.getAttribute("name");
- newDep.isDescription = dep.getAttribute("isDescription").equals("true");
- NodeList depmemnl = dep.getElementsByTagName("DependencyMember");
- for (int k=0; k<depmemnl.getLength(); k++) {
- newDep.dependencyMemberList.add(new DependencyMember(((Text)depmemnl.item(k).getFirstChild()).getData()));
- }
- newItem.deps.add(newDep);
- }
- NodeList aggnl = imp.getElementsByTagName("Aggregation");
- for (int j=0; j<aggnl.getLength(); j++) {
- Element agg = (Element)aggnl.item(j);
- Aggregation newAgg = new Aggregation();
- newAgg.name = agg.getAttribute("name");
- newAgg.isDescription = agg.getAttribute("isDescription").equals("true");
- NodeList depmemnl = agg.getElementsByTagName("AggregationMember");
- for (int k=0; k<depmemnl.getLength(); k++) {
- Element memElem = (Element)depmemnl.item(k);
- Element geom = (Element)memElem.getElementsByTagName("Geometry").item(0);
- //HACK: please kill me
- AggregationMember newAggMem = new AggregationMember(Integer.parseInt(memElem.getAttribute("slotNo")), memElem.getAttribute("itemDescriptionPath"),
- memElem.getAttribute("itemPath"), new Geometry(Integer.parseInt(geom.getAttribute("x")), Integer.parseInt(geom.getAttribute("y")),
- Integer.parseInt(geom.getAttribute("width")), Integer.parseInt(geom.getAttribute("height"))));
- newAgg.aggregationMemberList.add(newAggMem);
- }
- newItem.aggs.add(newAgg);
- }
+ NewItem newItem = new NewItem(ns, imp);
newImp = newItem;
}
else if (type.equals("Agent")) {
- ModuleAgent newAgent = new ModuleAgent();
- newAgent.password = imp.getAttribute("password");
- NodeList rolenl = imp.getElementsByTagName("Role");
- for (int j=0; j<rolenl.getLength(); j++) {
- newAgent.roles.add(((Text)rolenl.item(j).getFirstChild()).getData());
- }
+ NewAgent newAgent = new NewAgent(imp);
newImp = newAgent;
}
else {
@@ -197,110 +127,77 @@ public class Module { continue;
}
- newImp.importName = imp.getAttribute("name");
- imports.add(newImp);
- Logger.msg(8, "Found import "+imports.size()+"- "+newImp.importName+": "+newImp.getClass().getSimpleName());
+ newImp.name = imp.getAttribute("name");
+ imports.list.add(newImp);
+ Logger.msg(8, "Found import "+imports.list.size()+"- "+newImp.name+": "+newImp.getClass().getSimpleName());
}
}
}
- public ErrorInfo runScript(String event, boolean isServer) {
- HashMap<String, Script> 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<String> 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<String> roles = new ArrayList<String>();
-}
\ 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<ModuleImport> {
+
+ public ModuleImports()
+ {
+ super();
+ }
+
+ public ModuleImports(ArrayList<ModuleImport> 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<String> dependency = new ArrayList<String>();
+
+ 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<Property> props = new ArrayList<Property>();
- HashMap<String, String> outcomes = new HashMap<String, String>();
- ArrayList<Dependency> deps = new ArrayList<Dependency>();
- ArrayList<Aggregation> aggs = new ArrayList<Aggregation>();
- 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<URL> moduleEnum, boolean isServer) throws ModuleException{
+ public ModuleManager(Enumeration<URL> moduleEnum, boolean isServer) throws ModuleException {
this.isServer = isServer;
ArrayList<String> loadedModules = new ArrayList<String>();
ArrayList<String> moduleNs = new ArrayList<String>();
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<Property> public PropertyArrayList(ArrayList<Property> 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<T> implements Serializable {
- public ArrayList<T> list;
+abstract public class CastorArrayList<E> implements Serializable {
+ public ArrayList<E> list;
public CastorArrayList() {
super();
- list = new ArrayList<T>();
+ list = new ArrayList<E>();
}
- public CastorArrayList(ArrayList<T> list) {
+ public CastorArrayList(ArrayList<E> 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<URL> mMappingKeys = new HashSet<URL>();
-
+ private final Mapping mMapping = new Mapping();
+ private final HashSet<URL> mMappingKeys = new HashSet<URL>();
+
/**
* 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 @@ <KeyValuePair Key="Prefill" Boolean="false"/>
<KeyValuePair Key="Prefill Version" String="-1"/>
<KeyValuePair Key="ViewName" String="ElementaryActivityDef"/>
- <KeyValuePair Key="Name" String="AssignNewSchemaVersionFromLast"/>
+ <KeyValuePair Key="Name" String="AssignNewActivityVersionFromLast"/>
</Properties>
<activityDef>AssignNewVersionFromLast</activityDef>
</ActivitySlotDef>
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 @@ <KeyValuePair Key="Show time" Boolean="true"/>
<KeyValuePair Key="Viewpoint" String=""/>
<KeyValuePair Key="Agent Role" String="Admin"/>
- <KeyValuePair Key="SchemaType" String="NewAgent"/>
+ <KeyValuePair Key="SchemaType" String="Agent"/>
<KeyValuePair Key="ScriptName" String="ServerNewEntity"/>
<KeyValuePair Key="Ignorable" Boolean="false"/>
<KeyValuePair Key="ScriptVersion" String="0"/>
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 @@ <KeyValuePair Key="Show time" Boolean="true"/>
<KeyValuePair Key="Viewpoint" String=""/>
<KeyValuePair Key="Agent Role" String="Admin"/>
- <KeyValuePair Key="SchemaType" String="NewItem"/>
+ <KeyValuePair Key="SchemaType" String="Item"/>
<KeyValuePair Key="ScriptName" String="ServerNewEntity"/>
<KeyValuePair Key="Ignorable" Boolean="false"/>
<KeyValuePair Key="ScriptVersion" String="0"/>
diff --git a/src/main/resources/boot/OD/NewAgent.xsd b/src/main/resources/boot/OD/Agent.xsd index 773f4fc..5b9f3f4 100644 --- a/src/main/resources/boot/OD/NewAgent.xsd +++ b/src/main/resources/boot/OD/Agent.xsd @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by Andrew Branson (CERN) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
- <xs:element name="NewAgent">
+ <xs:element name="Agent">
<xs:annotation>
<xs:documentation>Complete Structure for new agent</xs:documentation>
</xs:annotation>
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 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element name="Item">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Properties" type="properties" />
+ <xs:element name="Outcome" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="schema" type="xs:string" use="required" />
+ <xs:attribute name="version" type="xs:string" use="required" />
+ <xs:attribute name="viewname" type="xs:string" use="required" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="Dependency" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="CollectionProperties" type="collprops" />
+ <xs:element name="DependencyMember" minOccurs="0"
+ maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="MemberProperties" type="collprops" />
+ </xs:sequence>
+ <xs:attribute name="itemPath" type="xs:string"
+ use="required" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required" />
+ <xs:attribute name="isDescription" type="xs:boolean"
+ use="optional" default="false" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="Aggregation" minOccurs="0" maxOccurs="unbounded">
+ <xs:annotation>
+ <xs:documentation>A new collection with layout
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="AggregationMember" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="Geometry" minOccurs="1"
+ maxOccurs="1">
+ <xs:complexType>
+ <xs:attribute name="x" type="xs:int" use="required" />
+ <xs:attribute name="y" type="xs:int" use="required" />
+ <xs:attribute name="width" type="xs:int" use="required" />
+ <xs:attribute name="height" type="xs:int" use="required" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="MemberProperties" type="collprops" />
+ </xs:sequence>
+ <xs:attribute name="slotNo" type="xs:int" use="required" />
+ <xs:attribute name="itemDescriptionPath" type="xs:string"
+ use="optional" />
+ <xs:attribute name="itemPath" type="xs:string"
+ use="optional" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required" />
+ <xs:attribute name="isDescription" type="xs:boolean"
+ use="required" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required" />
+ <xs:attribute name="workflow" type="xs:string" use="optional" />
+ <xs:attribute name="initialPath" type="xs:string" use="optional" />
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="properties">
+ <xs:sequence>
+ <xs:element name="Property" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="name" type="xs:string" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="collprops">
+ <xs:sequence>
+ <xs:element name="KeyValuePair" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="Key" type="xs:string" use="optional" />
+ <xs:attribute name="Boolean" type="xs:boolean" use="optional" />
+ <xs:attribute name="String" type="xs:string" use="optional" />
+ <xs:attribute name="Integer" type="xs:int" use="optional" />
+ <xs:attribute name="Float" type="xs:double" use="optional" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema>
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 @@ <xs:element name="Imports" minOccurs="0">
<xs:annotation>
<xs:documentation>Items to import into or verify within the
- Cristal server upon launch.</xs:documentation>
+ Cristal server upon launch.
+ </xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
@@ -73,17 +74,7 @@ <xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
- <xs:element name="Property" minOccurs="0"
- maxOccurs="unbounded">
- <xs:complexType>
- <xs:simpleContent>
- <xs:extension base="xs:string">
- <xs:attribute name="name" type="xs:string"
- use="required" />
- </xs:extension>
- </xs:simpleContent>
- </xs:complexType>
- </xs:element>
+ <xs:element name="Property" type="property" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="Outcome" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
@@ -102,12 +93,23 @@ maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
- <xs:element name="DependencyMember" type="xs:string"
- minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="DependencyMember" minOccurs="0"
+ maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="MemberProperties" type="collprops" minOccurs="0"/>
+ </xs:sequence>
+ <xs:attribute name="itemPath" type="xs:string"
+ use="required" />
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="CollectionProperties" type="collprops" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="isDescription" type="xs:boolean"
use="optional" default="false" />
+ <xs:attribute name="itemDescriptionPath"
+ type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
<xs:element name="Aggregation" minOccurs="0"
@@ -121,7 +123,8 @@ <xs:element name="AggregationMember" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
- <xs:element name="Geometry">
+ <xs:element name="Geometry" minOccurs="1"
+ maxOccurs="1">
<xs:complexType>
<xs:attribute name="x" type="xs:int" use="required" />
<xs:attribute name="y" type="xs:int" use="required" />
@@ -131,6 +134,7 @@ use="required" />
</xs:complexType>
</xs:element>
+ <xs:element name="MemberProperties" type="collprops" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="slotNo" type="xs:int"
use="required" />
@@ -158,6 +162,7 @@ <xs:complexType>
<xs:sequence>
<xs:element name="Role" type="xs:string" maxOccurs="unbounded" />
+ <xs:element name="Property" type="property" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="password" type="xs:string"
@@ -194,4 +199,24 @@ </xs:restriction>
</xs:simpleType>
</xs:attribute>
+ <xs:complexType name="property">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="name" type="xs:string" />
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+ <xs:complexType name="collprops">
+ <xs:sequence>
+ <xs:element name="KeyValuePair" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:attribute name="Key" type="xs:string" use="optional" />
+ <xs:attribute name="Boolean" type="xs:boolean" use="optional" />
+ <xs:attribute name="String" type="xs:string" use="optional" />
+ <xs:attribute name="Integer" type="xs:int" use="optional" />
+ <xs:attribute name="Float" type="xs:double" use="optional" />
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
</xs:schema>
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 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by Andrew Branson (CERN) -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
- <xs:element name="NewItem">
- <xs:annotation>
- <xs:documentation>Complete Structure for new item</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element name="Property" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>New Properties for the item</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="value" type="xs:string" use="required"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="Aggregation" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>A new collection with layout</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element name="AggregationMember" maxOccurs="unbounded">
- <xs:complexType>
- <xs:sequence>
- <xs:element name="Geometry">
- <xs:annotation>
- <xs:documentation>The position and size of this member slot on the layout</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:attribute name="x" type="xs:int" use="required"/>
- <xs:attribute name="y" type="xs:int" use="required"/>
- <xs:attribute name="width" type="xs:int" use="required"/>
- <xs:attribute name="height" type="xs:int" use="required"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="slotNo" type="xs:int" use="required"/>
- <xs:attribute name="itemDescriptionPath" type="xs:string" use="optional"/>
- <xs:attribute name="itemPath" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="isDescription" type="xs:boolean" use="required"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="Dependency" minOccurs="0" maxOccurs="unbounded">
- <xs:annotation>
- <xs:documentation>A new collection without layout</xs:documentation>
- </xs:annotation>
- <xs:complexType>
- <xs:sequence>
- <xs:element name="DependencyMember" maxOccurs="unbounded">
- <xs:complexType>
- <xs:attribute name="itemPath" type="xs:string" use="required"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="isDescription" type="xs:boolean" use="required"/>
- <xs:attribute name="itemDescriptionPath" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="initialPath" type="xs:string" use="required"/>
- <xs:attribute name="workflow" type="xs:string" use="required"/>
- </xs:complexType>
- </xs:element>
-</xs:schema>
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 @@ <?xml version="1.0"?>
<mapping>
<class name="com.c2kernel.process.module.Module">
- <map-to xml="CristalModule"/>
- <field name="ns" direct="true" type="string">
- <bind-xml name="ns" node="attribute"/>
- </field>
- <field name="name" direct="true" type="string">
- <bind-xml name="name" node="attribute"/>
- </field>
- <field name="desc" direct="true" type="string">
- <bind-xml name="Description" node="element"/>
- </field>
- <field name="version" direct="true" type="string">
- <bind-xml name="Version" node="element"/>
- </field>
- <field name="dependency" collection="arraylist" direct="true" type="string">
- <bind-xml name="Dependency" node="element"/>
- </field>
- <field name="resURL" direct="true" type="string">
- <bind-xml name="ResourceURL" node="element"/>
- </field>
- <field name="dependency" collection="arraylist" direct="true" type="string">
- <bind-xml name="Dependency" node="element"/>
- </field>
- <field name="imports" collection="arraylist" direct="true"
- type="com.c2kernel.process.module.ModuleImport">
- <bind-xml auto-naming="deriveByClass" node="element"/>
- <field name="importName" direct="true" type="string">
- <bind-xml name="name" node="attribute"/>
- </field>
- </field>
- </class>
- <class name="com.c2kernel.process.module.ModuleItem"
- extends="com.c2kernel.process.module.ModuleImport">
- <map-to xml="Item"/>
- <field name="workflow" direct="true" type="string">
- <bind-xml name="workflow" node="attribute"/>
- </field>
+ <map-to xml="CristalModule" />
+ <field name="ns" direct="true" type="string">
+ <bind-xml name="ns" node="attribute" />
+ </field>
+ <field name="name" direct="true" type="string">
+ <bind-xml name="name" node="attribute" />
+ </field>
+ <field name="info" direct="true" type="com.c2kernel.process.module.ModuleInfo">
+ <bind-xml name="Info" node="element" />
+ </field>
+ <field name="resURL" direct="true" type="string">
+ <bind-xml name="ResourceURL" node="element" />
+ </field>
+ <field name="imports" direct="true" type="com.c2kernel.process.module.ModuleImports">
+ <bind-xml name="Imports" node="element" />
+ </field>
+ <field name="config" collection="arraylist" direct="true" type="com.c2kernel.process.module.ModuleConfig">
+ <bind-xml name="Config" node="element" />
+ </field>
+ <field name="scripts" collection="arraylist" direct="true" type="com.c2kernel.process.module.ModuleScript">
+ <bind-xml name="Script" node="element" />
+ </field>
</class>
+ <class name="com.c2kernel.process.module.ModuleImports">
+ <map-to xml="Imports"/>
+ <field name="list" collection="arraylist" direct="true" type="com.c2kernel.process.module.ModuleImport">
+ <bind-xml auto-naming="deriveByClass" node="element" />
+ </field>
+ </class>
+ <class name="com.c2kernel.process.module.ModuleInfo">
+ <map-to xml="Info"/>
+ <field name="desc" direct="true" type="string">
+ <bind-xml name="Description" node="element" />
+ </field>
+ <field name="version" direct="true" type="string">
+ <bind-xml name="Version" node="element" />
+ </field>
+ <field name="dependency" collection="arraylist" direct="true"
+ type="string">
+ <bind-xml name="Dependency" node="element" />
+ </field>
+ </class>
+ <class name="com.c2kernel.process.module.ModuleResource" extends="com.c2kernel.process.module.ModuleImport">
+ <map-to xml="Resource"/>
+ <field name="name" direct="true" type="string">
+ <bind-xml name="name" node="attribute" />
+ </field>
+ <field name="resourceType" direct="true" type="string">
+ <bind-xml name="type" node="attribute" />
+ </field>
+ <field name="resourceLocation" direct="true" type="string">
+ <bind-xml node="text" />
+ </field>
+ </class>
+ <class name="com.c2kernel.process.module.ModuleConfig">
+ <map-to xml="Config"/>
+ <field name="name" direct="true" type="string">
+ <bind-xml name="name" node="attribute" />
+ </field>
+ <field name="target" direct="true" type="string">
+ <bind-xml name="target" node="attribute" />
+ </field>
+ <field name="value" direct="true" type="string">
+ <bind-xml node="text" />
+ </field>
+ </class>
+ <class name="com.c2kernel.process.module.ModuleScript">
+ <map-to xml="Script"/>
+ <field name="target" direct="true" type="string">
+ <bind-xml name="target" node="attribute" />
+ </field>
+ <field name="event" direct="true" type="string">
+ <bind-xml name="event" node="attribute" />
+ </field>
+ <field name="lang" direct="true" type="string">
+ <bind-xml name="lang" node="attribute" />
+ </field>
+ <field name="script" direct="true" type="string">
+ <bind-xml node="text" />
+ </field>
+ </class>
</mapping>
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 @@ <?xml version="1.0"?>
<mapping>
<class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.NewItem">
- <map-to xml="NewItem"/>
+ <map-to xml="Item"/>
<field name="name" type="string" direct="true">
<bind-xml name="name" node="attribute"/>
</field>
@@ -11,22 +11,17 @@ <field name="workflow" type="string" direct="true">
<bind-xml name="workflow" node="attribute"/>
</field>
- <field name="propertyList" collection="arraylist" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.Property">
+ <field name="properties" collection="arraylist" direct="true" type="com.c2kernel.property.Property">
<bind-xml name="Property" node="element"/>
</field>
- <field name="aggregationList" collection="arraylist" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation">
- <bind-xml name="Aggregation" node="element"/>
+ <field name="outcomes" collection="arraylist" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.Outcome">
+ <bind-xml name="Outcome" node="element"/>
</field>
<field name="dependencyList" collection="arraylist" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.Dependency">
<bind-xml name="Dependency" node="element"/>
</field>
- </class>
- <class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.Property">
- <field name="name" type="string" direct="true">
- <bind-xml name="name" node="attribute"/>
- </field>
- <field name="value" type="string" direct="true">
- <bind-xml name="value" node="attribute"/>
+ <field name="aggregationList" collection="arraylist" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation">
+ <bind-xml name="Aggregation" node="element"/>
</field>
</class>
<class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.Aggregation">
@@ -53,6 +48,10 @@ <field name="geometry" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.Geometry">
<bind-xml name="Geometry" node="element"/>
</field>
+ <field name="props" type="com.c2kernel.utils.KeyValuePair" collection="array" container="false" direct="false"
+ get-method="getKeyValuePairs" set-method="setKeyValuePairs">
+ <bind-xml name="MemberProperties" node="element"/>
+ </field>
</class>
<class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.Geometry">
<field name="x" type="int" direct="true">
@@ -81,14 +80,37 @@ <field name="dependencyMemberList" collection="arraylist" direct="true" type="com.c2kernel.lifecycle.instance.predefined.entitycreation.DependencyMember">
<bind-xml name="DependencyMember" node="element"/>
</field>
+ <field name="props" type="com.c2kernel.utils.KeyValuePair" collection="array" container="false" direct="false"
+ get-method="getKeyValuePairs" set-method="setKeyValuePairs">
+ <bind-xml name="CollectionProperties" node="element"/>
+ </field>
</class>
<class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.DependencyMember">
<field name="itemPath" type="string" direct="true">
<bind-xml name="itemPath" node="attribute"/>
</field>
+ <field name="props" type="com.c2kernel.utils.KeyValuePair" collection="array" container="false" direct="false"
+ get-method="getKeyValuePairs" set-method="setKeyValuePairs">
+ <bind-xml name="MemberProperties" node="element"/>
+ </field>
</class>
+ <class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.Outcome">
+ <map-to xml="Outcome"/>
+ <field name="viewname" type="string" direct="true">
+ <bind-xml name="viewname" node="attribute"/>
+ </field>
+ <field name="schema" type="string" direct="true">
+ <bind-xml name="schema" node="attribute"/>
+ </field>
+ <field name="version" type="integer" direct="true">
+ <bind-xml name="version" node="attribute"/>
+ </field>
+ <field name="path" type="string" direct="true">
+ <bind-xml name="viewname" node="text"/>
+ </field>
+ </class>
<class name="com.c2kernel.lifecycle.instance.predefined.entitycreation.NewAgent">
- <map-to xml="NewAgent"/>
+ <map-to xml="Agent"/>
<field name="name" type="string" direct="true">
<bind-xml name="name" node="attribute"/>
</field>
@@ -98,5 +120,8 @@ <field name="roles" collection="arraylist" direct="true" type="string">
<bind-xml name="Role" node="element"/>
</field>
- </class>
+ <field name="properties" collection="arraylist" direct="true" type="com.c2kernel.property.Property">
+ <bind-xml name="Property" node="element"/>
+ </field>
+ </class>
</mapping>
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 @@ <class name="com.c2kernel.property.Property">
<map-to xml="Property"/>
<field name="mName" type="string" direct="false" get-method="getName" set-method="setName">
- <bind-xml name="Name" node="attribute"/>
+ <bind-xml name="name" node="attribute"/>
</field>
<field name="mValue" type="string" direct="false" get-method="getValue" set-method="setValue">
- <bind-xml name="Value" node="element"/>
+ <bind-xml node="text"/>
</field>
</class>
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
|
