summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Branson <andrew.branson@cern.ch>2012-06-22 10:11:17 +0200
committerAndrew Branson <andrew.branson@cern.ch>2012-06-22 10:11:17 +0200
commit0baa46d5ee4f62adb58f436af4978d9468454870 (patch)
treecb88cda1ed564b8bb445fd4180728fd0db25192f
parente0b01f55e2be314ee60df092aa75f34c5f4cb8f2 (diff)
Modules and entitycreation support Aggregations, collection properties
and class identifiers
-rw-r--r--src/main/java/com/c2kernel/collection/Aggregation.java8
-rw-r--r--src/main/java/com/c2kernel/collection/AggregationDescription.java3
-rw-r--r--src/main/java/com/c2kernel/collection/CollectionDescription.java4
-rw-r--r--src/main/java/com/c2kernel/collection/DependencyDescription.java3
-rw-r--r--src/main/java/com/c2kernel/collection/RelationshipUtils.java2
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Aggregation.java33
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/Dependency.java19
-rw-r--r--src/main/java/com/c2kernel/lifecycle/instance/predefined/entitycreation/NewItem.java5
-rw-r--r--src/main/java/com/c2kernel/persistency/XMLClusterStorage.java1
-rw-r--r--src/main/java/com/c2kernel/process/module/Module.java37
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleAgent.java9
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleImport.java5
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleItem.java17
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleManager.java1
-rw-r--r--src/main/java/com/c2kernel/process/module/ModuleResource.java6
-rw-r--r--src/main/java/com/c2kernel/property/PropertyUtility.java5
-rw-r--r--src/main/resources/boot/OD/Module.xsd133
17 files changed, 233 insertions, 58 deletions
diff --git a/src/main/java/com/c2kernel/collection/Aggregation.java b/src/main/java/com/c2kernel/collection/Aggregation.java
index e869621..f840d41 100644
--- a/src/main/java/com/c2kernel/collection/Aggregation.java
+++ b/src/main/java/com/c2kernel/collection/Aggregation.java
@@ -73,8 +73,10 @@ abstract public class Aggregation extends Parent2ChildCollection<AggregationMemb
AggregationMember aggMem = new AggregationMember();
aggMem.setProperties(props);
aggMem.setClassProps(classProps);
- aggMem.assignEntity(entityKey);
-
+ if (entityKey > -1) {
+ aggMem.assignEntity(entityKey);
+ aggMem.setIsComposite( RelationshipUtils.getIsComposite(entityKey) );
+ }
// create vertex
com.c2kernel.graph.model.Vertex vertex = new com.c2kernel.graph.model.Vertex();
vertex.setHeight(h); vertex.setWidth(w);
@@ -82,7 +84,7 @@ abstract public class Aggregation extends Parent2ChildCollection<AggregationMemb
aggMem.setCollection(this);
aggMem.setID(vertex.getID());
aggMem.setIsLayoutable(true);
- aggMem.setIsComposite( RelationshipUtils.getIsComposite(entityKey) );
+
mMembers.list.add(aggMem);
Logger.msg(8, "AggregationDescription::addMember(" + entityKey + ") added to children linked to vertexid " + vertex.getID());
return aggMem;
diff --git a/src/main/java/com/c2kernel/collection/AggregationDescription.java b/src/main/java/com/c2kernel/collection/AggregationDescription.java
index a046871..6021ed6 100644
--- a/src/main/java/com/c2kernel/collection/AggregationDescription.java
+++ b/src/main/java/com/c2kernel/collection/AggregationDescription.java
@@ -5,6 +5,7 @@ package com.c2kernel.collection;
* @author $Author: abranson $
*/
+import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.graph.model.Vertex;
import com.c2kernel.property.PropertyDescriptionList;
import com.c2kernel.property.PropertyUtility;
@@ -25,7 +26,7 @@ public class AggregationDescription extends Aggregation implements CollectionDes
@Override
- public Aggregation newInstance()
+ public Aggregation newInstance() throws ObjectNotFoundException
{
AggregationInstance newInstance = new AggregationInstance(getName());
newInstance.setURLInfo(getURLInfo());
diff --git a/src/main/java/com/c2kernel/collection/CollectionDescription.java b/src/main/java/com/c2kernel/collection/CollectionDescription.java
index 69b569e..15c6928 100644
--- a/src/main/java/com/c2kernel/collection/CollectionDescription.java
+++ b/src/main/java/com/c2kernel/collection/CollectionDescription.java
@@ -1,5 +1,7 @@
package com.c2kernel.collection;
+import com.c2kernel.common.ObjectNotFoundException;
+
/**************************************************************************
*
* $Revision: 1.1 $
@@ -10,5 +12,5 @@ package com.c2kernel.collection;
**************************************************************************/
public interface CollectionDescription<E extends CollectionMember> extends Collection<E> {
- public Collection<E> newInstance();
+ public Collection<E> newInstance() throws ObjectNotFoundException;
}
diff --git a/src/main/java/com/c2kernel/collection/DependencyDescription.java b/src/main/java/com/c2kernel/collection/DependencyDescription.java
index 547a286..681e98b 100644
--- a/src/main/java/com/c2kernel/collection/DependencyDescription.java
+++ b/src/main/java/com/c2kernel/collection/DependencyDescription.java
@@ -1,5 +1,6 @@
package com.c2kernel.collection;
+import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.property.PropertyDescriptionList;
import com.c2kernel.property.PropertyUtility;
import com.c2kernel.utils.CastorHashMap;
@@ -17,7 +18,7 @@ public class DependencyDescription extends Dependency implements CollectionDescr
}
@Override
- public Collection<DependencyMember> newInstance() {
+ public Collection<DependencyMember> newInstance() throws ObjectNotFoundException{
String depName = getName().replaceFirst("\'$", ""); // HACK: Knock the special 'prime' off the end for the case of descriptions of descriptions
Dependency newDep = new Dependency(depName);
if (mMembers.list.size() == 1) { // constrain the members based on the property description
diff --git a/src/main/java/com/c2kernel/collection/RelationshipUtils.java b/src/main/java/com/c2kernel/collection/RelationshipUtils.java
index 6e35ac8..0151b7e 100644
--- a/src/main/java/com/c2kernel/collection/RelationshipUtils.java
+++ b/src/main/java/com/c2kernel/collection/RelationshipUtils.java
@@ -19,7 +19,7 @@ public class RelationshipUtils
if (entityKey == -1) return false;
try
{
- if ( ((Aggregation) Gateway.getProxyManager().getProxy(new EntityPath(entityKey)).getObject(ClusterStorage.COLLECTION+"/Composition" )).size() > 0 )
+ if ( Gateway.getProxyManager().getProxy(new EntityPath(entityKey)).getContents(ClusterStorage.COLLECTION).length > 0 )
return true;
}
catch (Exception ex)
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 2de12e0..b99e898 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,15 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation;
import java.util.ArrayList;
+import com.c2kernel.collection.MembershipException;
+import com.c2kernel.common.ObjectNotFoundException;
+import com.c2kernel.graph.model.GraphPoint;
+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;
@@ -19,7 +28,27 @@ public class Aggregation implements java.io.Serializable {
this.isDescription = isDescription;
}
- public com.c2kernel.collection.Aggregation create() {
- return new com.c2kernel.collection.AggregationInstance();
+ 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());
+ if (pd.getIsClassIdentifier())
+ classProps.append((classProps.length()>0?",":"")).append(pd.getName());
+ }
+ }
+ if (thisMem.itemPath != null && thisMem.itemPath.length()>0) {
+ 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);
+ }
+ }
+ return newAgg;
}
}
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 1124ede..5993f62 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
@@ -3,8 +3,12 @@ package com.c2kernel.lifecycle.instance.predefined.entitycreation;
import java.util.ArrayList;
import com.c2kernel.collection.MembershipException;
+import com.c2kernel.common.ObjectNotFoundException;
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 Dependency implements java.io.Serializable {
@@ -26,12 +30,21 @@ public class Dependency implements java.io.Serializable {
/**
* @return
*/
- public com.c2kernel.collection.Dependency create() throws MembershipException{
+ 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) {
- PropertyUtility.getPropertyDescriptionOutcome(new DomainPath(itemDescriptionPath).getSysKey());
- //TODO: set props and class identifiers
+ 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());
+ if (pd.getIsClassIdentifier())
+ classProps.append((classProps.length()>0?",":"")).append(pd.getName());
+ }
+ newDep.setProperties(props);
+ newDep.setClassProps(classProps.toString());
}
+
for (DependencyMember thisMem : dependencyMemberList) {
int syskey = new DomainPath(thisMem.itemPath).getSysKey();
if (syskey == -1)
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 f155ced..16f6cbf 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
@@ -132,7 +132,10 @@ public class NewItem {
} catch (ClusterStorageException ex) {
Logger.error(ex);
throw new CannotManageException("Could not create Aggregation "+element.name, "");
- }
+ } catch (MembershipException ex) {
+ Logger.error(ex);
+ throw new CannotManageException("A specified member is not of the correct type in "+element.name, "");
+ }
}
// register domain path
domPath.setEntity(entPath);
diff --git a/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java b/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java
index 5cfa63c..01c7b90 100644
--- a/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java
+++ b/src/main/java/com/c2kernel/persistency/XMLClusterStorage.java
@@ -72,7 +72,6 @@ public class XMLClusterStorage extends ClusterStorage {
}
} catch (Exception e) {
- Logger.error(e);
Logger.msg(3,"XMLClusterStorage.get() - The path "+path+" from "+sysKey+" does not exist.: "+e.getMessage());
}
return null;
diff --git a/src/main/java/com/c2kernel/process/module/Module.java b/src/main/java/com/c2kernel/process/module/Module.java
index 08ea4dc..d015aea 100644
--- a/src/main/java/com/c2kernel/process/module/Module.java
+++ b/src/main/java/com/c2kernel/process/module/Module.java
@@ -18,8 +18,11 @@ 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;
@@ -134,6 +137,10 @@ public class Module {
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);
@@ -156,6 +163,24 @@ public class Module {
}
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);
+ }
newImp = newItem;
}
else if (type.equals("Agent")) {
@@ -174,6 +199,8 @@ public class Module {
newImp.importName = imp.getAttribute("name");
imports.add(newImp);
+ Logger.msg(8, "Found import "+imports.size()+"- "+newImp.importName+": "+newImp.getClass().getSimpleName());
+
}
}
@@ -197,6 +224,7 @@ public class Module {
public void importAll(ItemProxy serverEntity) {
for (ModuleImport thisImp : imports) {
+ Logger.msg(5, "Importing "+thisImp.importName+" "+thisImp.getClass().getSimpleName());
if (thisImp instanceof ModuleResource) {
ModuleResource thisRes = (ModuleResource)thisImp;
try {
@@ -208,7 +236,7 @@ public class Module {
else if (thisImp instanceof ModuleItem) {
ModuleItem thisItem = (ModuleItem)thisImp;
try {
- NewItem item = new NewItem(thisItem.importName, "/desc/"+ns, thisItem.workflow);
+ 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;
@@ -233,6 +261,9 @@ public class Module {
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);
@@ -244,7 +275,7 @@ public class Module {
try {
Gateway.getLDAPLookup().getRoleManager().getAgentPath(thisAgent.importName);
Logger.msg(3, "Module.importAll() - User '"+thisAgent.importName+"' found.");
- return;
+ continue;
} catch (ObjectNotFoundException ex) { }
Logger.msg("Module.importAll() - User '"+thisAgent.importName+"' not found. Creating.");
@@ -260,7 +291,7 @@ public class Module {
Logger.error("Error importing agent "+thisAgent.importName+" from module "+name);
Logger.error(ex);
}
- }
+ }
}
}
diff --git a/src/main/java/com/c2kernel/process/module/ModuleAgent.java b/src/main/java/com/c2kernel/process/module/ModuleAgent.java
new file mode 100644
index 0000000..d90ac2e
--- /dev/null
+++ b/src/main/java/com/c2kernel/process/module/ModuleAgent.java
@@ -0,0 +1,9 @@
+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/ModuleImport.java b/src/main/java/com/c2kernel/process/module/ModuleImport.java
new file mode 100644
index 0000000..f505a40
--- /dev/null
+++ b/src/main/java/com/c2kernel/process/module/ModuleImport.java
@@ -0,0 +1,5 @@
+package com.c2kernel.process.module;
+
+public abstract class ModuleImport {
+ String importName;
+} \ No newline at end of file
diff --git a/src/main/java/com/c2kernel/process/module/ModuleItem.java b/src/main/java/com/c2kernel/process/module/ModuleItem.java
new file mode 100644
index 0000000..f74788d
--- /dev/null
+++ b/src/main/java/com/c2kernel/process/module/ModuleItem.java
@@ -0,0 +1,17 @@
+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 b99b325..aa598fa 100644
--- a/src/main/java/com/c2kernel/process/module/ModuleManager.java
+++ b/src/main/java/com/c2kernel/process/module/ModuleManager.java
@@ -46,6 +46,7 @@ public class ModuleManager {
}
Logger.debug(5, "Checking dependencies");
+ //TODO: order the importing so each modules dependencies are imported ahead of it
boolean depFailed = false;
for (Module thisMod : modules) {
ArrayList<String> deps = thisMod.getDependencies();
diff --git a/src/main/java/com/c2kernel/process/module/ModuleResource.java b/src/main/java/com/c2kernel/process/module/ModuleResource.java
new file mode 100644
index 0000000..98d15d4
--- /dev/null
+++ b/src/main/java/com/c2kernel/process/module/ModuleResource.java
@@ -0,0 +1,6 @@
+package com.c2kernel.process.module;
+
+public class ModuleResource extends ModuleImport {
+ String resourceType;
+ String resourceLocation;
+} \ No newline at end of file
diff --git a/src/main/java/com/c2kernel/property/PropertyUtility.java b/src/main/java/com/c2kernel/property/PropertyUtility.java
index f8e714c..497e5d3 100644
--- a/src/main/java/com/c2kernel/property/PropertyUtility.java
+++ b/src/main/java/com/c2kernel/property/PropertyUtility.java
@@ -12,6 +12,7 @@ package com.c2kernel.property;
import java.util.ArrayList;
import java.util.Iterator;
+import com.c2kernel.common.ObjectNotFoundException;
import com.c2kernel.persistency.ClusterStorage;
import com.c2kernel.persistency.outcome.Outcome;
import com.c2kernel.process.Gateway;
@@ -54,7 +55,7 @@ public class PropertyUtility
}
- static public PropertyDescriptionList getPropertyDescriptionOutcome(int entityKey)
+ static public PropertyDescriptionList getPropertyDescriptionOutcome(int entityKey) throws ObjectNotFoundException
{
try
{
@@ -64,7 +65,7 @@ public class PropertyUtility
catch (Exception ex)
{
Logger.error(ex);
- return null;
+ throw new ObjectNotFoundException("Problem getting PropertyDescription from "+entityKey, "");
}
}
diff --git a/src/main/resources/boot/OD/Module.xsd b/src/main/resources/boot/OD/Module.xsd
index 6cd84e0..10a0155 100644
--- a/src/main/resources/boot/OD/Module.xsd
+++ b/src/main/resources/boot/OD/Module.xsd
@@ -1,28 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- edited with XMLSpy v2007 rel. 3 (http://www.altova.com) by Andrew Branson (CERN) -->
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+<!-- edited with XMLSpy v2007 rel. 3 (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="CristalModule">
<xs:complexType>
<xs:sequence>
<xs:element name="Info">
<xs:complexType>
<xs:sequence>
- <xs:element name="Description" type="xs:string"/>
- <xs:element name="Version" type="xs:string"/>
- <xs:element name="Dependency" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="Description" type="xs:string" />
+ <xs:element name="Version" type="xs:string" />
+ <xs:element name="Dependency" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
- <xs:element name="ResourceURL" type="xs:string" minOccurs="0"/>
+ <xs:element name="ResourceURL" type="xs:string"
+ minOccurs="0" />
<xs:element name="Config" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
- <xs:documentation>Configuration parameters to add to the Cristal VM on launch. May target either client or server processes.</xs:documentation>
+ <xs:documentation>Configuration parameters to add to the Cristal
+ VM on launch. May target either client or server processes.
+ </xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute ref="target"/>
+ <xs:attribute name="name" type="xs:string" use="required" />
+ <xs:attribute ref="target" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@@ -31,16 +37,17 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
- <xs:attribute ref="event"/>
- <xs:attribute ref="target"/>
- <xs:attribute name="lang" type="xs:string"/>
+ <xs:attribute ref="event" />
+ <xs:attribute ref="target" />
+ <xs:attribute name="lang" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Imports" minOccurs="0">
<xs:annotation>
- <xs:documentation>Items to import into or verify within the Cristal server upon launch.</xs:documentation>
+ <xs:documentation>Items to import into or verify within the
+ Cristal server upon launch.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
@@ -48,14 +55,14 @@
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
- <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
- <xs:enumeration value="EA"/>
- <xs:enumeration value="CA"/>
- <xs:enumeration value="OD"/>
- <xs:enumeration value="SC"/>
+ <xs:enumeration value="EA" />
+ <xs:enumeration value="CA" />
+ <xs:enumeration value="OD" />
+ <xs:enumeration value="SC" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
@@ -66,11 +73,13 @@
<xs:element name="Item" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
- <xs:element name="Property" minOccurs="0" maxOccurs="unbounded">
+ <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:attribute name="name" type="xs:string"
+ use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
@@ -79,41 +88,87 @@
<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: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:element name="Dependency" minOccurs="0"
+ maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
- <xs:element name="DependencyMember" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="DependencyMember" type="xs:string"
+ minOccurs="0" maxOccurs="unbounded" />
</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="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">
+ <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:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="workflow" type="xs:string" use="optional"/>
+ <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:element name="Agent" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
- <xs:element name="Role" type="xs:string" maxOccurs="unbounded"/>
+ <xs:element name="Role" type="xs:string" maxOccurs="unbounded" />
</xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
- <xs:attribute name="password" type="xs:string" use="required"/>
+ <xs:attribute name="name" type="xs:string" use="required" />
+ <xs:attribute name="password" type="xs:string"
+ use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
- <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="ns" type="xs:string" use="required">
<xs:annotation>
<xs:documentation>Prefix for module components</xs:documentation>
@@ -124,18 +179,18 @@
<xs:attribute name="target">
<xs:simpleType>
<xs:restriction base="xs:string">
- <xs:enumeration value="client"/>
- <xs:enumeration value="server"/>
+ <xs:enumeration value="client" />
+ <xs:enumeration value="server" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="event">
<xs:simpleType>
<xs:restriction base="xs:string">
- <xs:enumeration value="startup"/>
- <xs:enumeration value="shutdown"/>
- <xs:enumeration value="install"/>
- <xs:enumeration value="uninstall"/>
+ <xs:enumeration value="startup" />
+ <xs:enumeration value="shutdown" />
+ <xs:enumeration value="install" />
+ <xs:enumeration value="uninstall" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>