Dear Thomas
If I assume your response?
just to clarify a bit:
- occurrences etc are defined in the archetype, on slot nodes, as
for any other object node in an archetype
- when a slot is being filled (in a template), the id used for the
archetype_node_id at the root node of the filler archetype in the
resulting structure is the archetype_id of that archetype.
- this means you never see at0000 in the resulting structure (called
an operational template), and therefore, never in data, because
all data is generated from operational templates
the constraints you have in the example below look correct to me - they will be preserved in the operational template.
How to apply occurrence of slot please see the following code:
void validateArchetypeSLot(ArchetypeSlot cobj, Object object, String path) {
logger.debug(“validateArchetypeSLot..”);
Interval occurrences = cobj.getOccurrences();
String code = cobj.getNodeID();
List objects = null;
objects = findMatchingNodes((Collection)object, code);
if (occurrences != null) {
if (occurrences.getLower() != null && occurrences.getLower() > objects.size()) {
throw new OccurencesTooFew(“at: " + path + " [” + cobj.path() + "]: must be " + occurrences.getLower() + " but is " + objects.size(), null);
} else if (occurrences.getUpper() != null && occurrences.getUpper() < objects.size()) {
throw new OccurencesTooMany(“at: " + path + " [” + cobj.path() + "]: must be " + occurrences.getUpper() + " but is " + objects.size(), null);
}
}
}
List findMatchingNodes(Collection values, String code) {
List objects = new ArrayList();
Locatable lo = null;
for (Object value : values) {
lo = (Locatable) value;
if (code.equals(lo.getArchetypeNodeId())) {
objects.add(lo);
}
}
return objects;
}
The findMatchingNodes function, find matching objects depend on archetype_node_id of slot. If I use archetype_id for object related to slot instead of slot archetype_node_id,then I must change findMatchingNodes to findMatchingArchetypeIds! So what happened if I define more than one slot, under attribute, with conflicts in naming pattern? To prevent previous condition we must define a conceptual constraint like this:
- if we define more than one slot under an attribute, then included patterns must be unique, this means we must prevent to define patterns with conflicts
So I can change findMatchingNodes to findMatchingArchetypeIds?
If we use archetype_node_id of slot, then we need no additional constraint!!