@Override public ObjectClassComplexTypeDefinition getComplexTypeDefinition() { return (ObjectClassComplexTypeDefinition)super.getComplexTypeDefinition(); }
@Override public ItemDefinition deepClone(Map<QName,ComplexTypeDefinition> ctdMap, Map<QName,ComplexTypeDefinition> onThisPath, Consumer<ItemDefinition> postCloneAction) { PrismContainerDefinitionImpl<C> clone = clone(); ComplexTypeDefinition ctd = getComplexTypeDefinition(); if (ctd != null) { ctd = ctd.deepClone(ctdMap, onThisPath, postCloneAction); clone.setComplexTypeDefinition(ctd); } return clone; }
@Override public void replaceDefinition(QName itemName, ItemDefinition newDefinition) { ComplexTypeDefinition originalComplexTypeDefinition = getComplexTypeDefinition(); ComplexTypeDefinition cloneComplexTypeDefinition = originalComplexTypeDefinition.clone(); setComplexTypeDefinition(cloneComplexTypeDefinition); ((ComplexTypeDefinitionImpl) cloneComplexTypeDefinition).replaceDefinition(itemName, newDefinition); }
public <ID extends ItemDefinition> ID findItemDefinition(@NotNull ItemPath path, @NotNull Class<ID> clazz) { for (;;) { if (path.isEmpty()) { if (clazz.isAssignableFrom(PrismContainerDefinition.class)) { return (ID) this; } else { return null; } } Object first = path.first(); if (ItemPath.isName(first)) { return findNamedItemDefinition(ItemPath.toName(first), path.rest(), clazz); } else if (ItemPath.isId(first)) { path = path.rest(); } else if (ItemPath.isParent(first)) { ItemPath rest = path.rest(); ComplexTypeDefinition parent = getSchemaRegistry().determineParentDefinition(getComplexTypeDefinition(), rest); if (rest.isEmpty()) { // requires that the parent is defined as an item (container, object) return (ID) getSchemaRegistry().findItemDefinitionByType(parent.getTypeName()); } else { return parent.findItemDefinition(rest, clazz); } } else if (ItemPath.isObjectReference(first)) { throw new IllegalStateException("Couldn't use '@' path segment in this context. PCD=" + getTypeName() + ", path=" + path); } else { throw new IllegalStateException("Unexpected path segment: " + first + " in " + path); } } }