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 | |
| 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.
56 files changed, 816 insertions, 555 deletions
@@ -40,7 +40,6 @@ <dependency>
<groupId>cristal</groupId>
<artifactId>cristal-dev</artifactId>
- <version>0.3</version>
</dependency>
</dependencies>
<dependencyManagement>
@@ -71,6 +70,11 @@ <artifactId>jldap</artifactId>
<version>4.3</version>
</dependency>
+ <dependency>
+ <groupId>cristal</groupId>
+ <artifactId>cristal-dev</artifactId>
+ <version>0.3</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<build>
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
|
