@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public Collection<ObjectClassComplexTypeDefinition> getObjectClassDefinitions() { return (Collection) getRefinedDefinitions(); }
@Override public List<? extends RefinedObjectClassDefinition> getRefinedDefinitions(ShadowKindType kind) { List<RefinedObjectClassDefinition> rv = new ArrayList<>(); for (RefinedObjectClassDefinition def: getRefinedDefinitions()) { if (MiscSchemaUtil.matchesKind(kind, def.getKind())) { rv.add(def); } } return rv; }
@Override public RefinedObjectClassDefinition getRefinedDefinition(QName objectClassName) { for (RefinedObjectClassDefinition def: getRefinedDefinitions()) { if (def.isDefault() && (QNameUtil.match(def.getTypeName(), objectClassName))) { return def; } } // No default for this object class, so just use the first one. // This is not strictly correct .. but it is a "compatible bug" :-) // TODO: remove this in next major revision for (RefinedObjectClassDefinition def: getRefinedDefinitions()) { if ((QNameUtil.match(def.getTypeName(), objectClassName))) { return def; } } return null; }
@Override public RefinedObjectClassDefinition getRefinedDefinition(ShadowKindType kind, String intent) { for (RefinedObjectClassDefinition acctDef: getRefinedDefinitions(kind)) { if (intent == null && acctDef.isDefault()) { return acctDef; } if (acctDef.getIntent() != null && acctDef.getIntent().equals(intent)) { return acctDef; } if (acctDef.getIntent() == null && intent == null) { return acctDef; } } return null; }
@Override public RefinedObjectClassDefinition findRefinedDefinitionByObjectClassQName(ShadowKindType kind, QName objectClass) { if (objectClass == null) { return getDefaultRefinedDefinition(kind); } for (RefinedObjectClassDefinition acctDef: getRefinedDefinitions(kind)) { if (acctDef.isDefault() && QNameUtil.match(acctDef.getObjectClassDefinition().getTypeName(), objectClass)) { return acctDef; } } // No default for this object class, so just use the first one. // This is not strictly correct .. but it is a "compatible bug" :-) // TODO: remove this in next major revision for (RefinedObjectClassDefinition acctDef: getRefinedDefinitions(kind)) { if (QNameUtil.match(acctDef.getObjectClassDefinition().getTypeName(), objectClass)) { return acctDef; } } return null; }
public static RefinedResourceSchema parse(ResourceType resourceType, PrismContext prismContext) throws SchemaException { ResourceSchema originalResourceSchema = getResourceSchema(resourceType, prismContext); if (originalResourceSchema == null) { return null; } String contextDescription = "definition of "+resourceType; RefinedResourceSchemaImpl rSchema = new RefinedResourceSchemaImpl(originalResourceSchema); SchemaHandlingType schemaHandling = resourceType.getSchemaHandling(); if (schemaHandling != null) { parseObjectTypeDefsFromSchemaHandling(rSchema, resourceType, schemaHandling, schemaHandling.getObjectType(), null, prismContext, contextDescription); } parseObjectTypesFromSchema(rSchema, resourceType, prismContext, contextDescription); // We need to parse associations and auxiliary object classes in a second pass. We need to have all object classes parsed before correctly setting association // targets for (RefinedObjectClassDefinition rOcDef: rSchema.getRefinedDefinitions()) { ((RefinedObjectClassDefinitionImpl) rOcDef).parseAssociations(rSchema); ((RefinedObjectClassDefinitionImpl) rOcDef).parseAuxiliaryObjectClasses(rSchema); } // We can parse attributes only after we have all the object class info parsed (including auxiliary object classes) for (RefinedObjectClassDefinition rOcDef: rSchema.getRefinedDefinitions()) { ((RefinedObjectClassDefinitionImpl) rOcDef).parseAttributes(rSchema, contextDescription); } return rSchema; }
@Override public RefinedObjectClassDefinition getRefinedDefinition(ShadowKindType kind, Collection<String> intents) throws SchemaException { RefinedObjectClassDefinition found = null; for (RefinedObjectClassDefinition acctDef: getRefinedDefinitions(kind)) { RefinedObjectClassDefinition foundCurrent = null; if (intents == null || intents.isEmpty()) { if (acctDef.isDefault()) { foundCurrent = acctDef; } } else { if (intents.contains(acctDef.getIntent())) { foundCurrent = acctDef; } } if (foundCurrent != null) { if (found != null) { if (!QNameUtil.match(found.getTypeName(), foundCurrent.getTypeName())) { throw new SchemaException("More than one ObjectClass found for kind " + kind + ", intents: " + intents + ": " + found.getTypeName() + ", " + foundCurrent.getTypeName()); } } else { found = foundCurrent; } } } return found; }