public boolean isIgnored(LayerType layer) { QName name = getAssociationAttribute(); RefinedAttributeDefinition<?> associationAttributeDef = associationTarget.findAttributeDefinition(name); if (associationAttributeDef == null) { throw new IllegalStateException("No such attribute :" + name + " in kind: " + associationTarget.getKind() + ", intent: " + associationTarget.getIntent() + " as defined for association: " + resourceObjectAssociationType.getDisplayName()); } return associationAttributeDef.isIgnored(layer); }
@Override default Collection<? extends RefinedAttributeDefinition<?>> getAllIdentifiers() { return Stream.concat(getPrimaryIdentifiers().stream(), getSecondaryIdentifiers().stream()) .collect(Collectors.toList()); }
@NotNull public String getObjectTypeName(RefinedObjectClassDefinition refinedObjectClassDefinition, boolean formatted) { if (refinedObjectClassDefinition == null) { return "?"; } StringBuilder sb = new StringBuilder(); if (refinedObjectClassDefinition.getDisplayName() != null) { sb.append(refinedObjectClassDefinition.getDisplayName()); sb.append(formatted ? LF : "/"); } sb.append(ResourceTypeUtil.fillDefault(refinedObjectClassDefinition.getKind())); sb.append(formatted ? LF : "/"); sb.append(ResourceTypeUtil.fillDefault(refinedObjectClassDefinition.getIntent())); sb.append(formatted ? LF : "/"); sb.append("("); sb.append(refinedObjectClassDefinition.getObjectClassDefinition().getTypeName().getLocalPart()); sb.append(")"); return sb.toString(); }
public RefinedObjectClassDefinitionKey(RefinedObjectClassDefinition rObjectClassDefinition) { typeName = rObjectClassDefinition.getTypeName(); intent = rObjectClassDefinition.getIntent(); }
@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; }
assertNotNull("Null identifiers in account", accountDef.getPrimaryIdentifiers()); assertFalse("Empty identifiers in account", accountDef.getPrimaryIdentifiers().isEmpty()); assertNotNull("Null secondary identifiers in account", accountDef.getSecondaryIdentifiers()); assertFalse("Empty secondary identifiers in account", accountDef.getSecondaryIdentifiers().isEmpty()); assertNotNull("No naming attribute in account", accountDef.getNamingAttribute()); assertFalse("No nativeObjectClass in account", StringUtils.isEmpty(accountDef.getNativeObjectClass())); assertEquals("Unexpected kind in account definition", ShadowKindType.ACCOUNT, accountDef.getKind()); assertTrue("Account definition in not default", accountDef.isDefaultInAKind()); assertEquals("Wrong intent in account definition", SchemaConstants.INTENT_DEFAULT, accountDef.getIntent()); assertFalse("Account definition is deprecated", accountDef.isDeprecated()); assertFalse("Account definition in auxiliary", accountDef.isAuxiliary()); RefinedAttributeDefinition uidDef = accountDef.findAttributeDefinition(SchemaConstants.ICFS_UID); assertEquals(1, uidDef.getMaxOccurs()); assertEquals(0, uidDef.getMinOccurs()); assertFalse("UID has update", uidDef.canModify()); assertTrue("No UID read", uidDef.canRead()); assertTrue("UID definition not in identifiers", accountDef.getPrimaryIdentifiers().contains(uidDef)); RefinedAttributeDefinition nameDef = accountDef.findAttributeDefinition(SchemaConstants.ICFS_NAME); assertEquals(1, nameDef.getMaxOccurs()); assertEquals(1, nameDef.getMinOccurs()); assertTrue("No NAME update", nameDef.canModify()); assertTrue("No NAME read", nameDef.canRead()); assertTrue("NAME definition not in identifiers", accountDef.getSecondaryIdentifiers().contains(nameDef));
System.out.println(rAccountDef.debugDump()); assertEquals("Wrong kind", ShadowKindType.ACCOUNT, rAccountDef.getKind()); Collection<? extends RefinedAttributeDefinition> accAttrsDef = rAccountDef.getAttributeDefinitions(); assertNotNull("Null attributeDefinitions", accAttrsDef); assertFalse("Empty attributeDefinitions", accAttrsDef.isEmpty()); assertEquals("Unexpected number of attributeDefinitions", 55, accAttrsDef.size()); RefinedAttributeDefinition disabledAttribute = rAccountDef.findAttributeDefinition("ds-pwp-account-disabled"); assertNotNull("No ds-pwp-account-disabled attribute", disabledAttribute); assertTrue("ds-pwp-account-disabled not ignored", disabledAttribute.isIgnored()); RefinedAttributeDefinition<?> displayNameAttributeDef = rAccountDef.getDisplayNameAttribute(); assertNotNull("No account displayNameAttribute", displayNameAttributeDef); assertEquals("Wrong account displayNameAttribute", new QName(resourceType.getNamespace(), "uid"), displayNameAttributeDef.getName()); Collection<? extends ItemDefinition> propertyDefinitions = rAccountDef.getDefinitions(); assertNotNull("Null propertyDefinitions", propertyDefinitions); assertFalse("Empty propertyDefinitions", propertyDefinitions.isEmpty()); ObjectReferenceType passwordPolicyRef = rAccountDef.getPasswordPolicy(); assertNotNull("Expected password policy for account definition not found", passwordPolicyRef); assertEquals("Wrong kind", ShadowKindType.ENTITLEMENT, rEntDef.getKind()); Collection<? extends RefinedAttributeDefinition> entAttrDefs = rEntDef.getAttributeDefinitions(); assertNotNull("Null attributeDefinitions", entAttrDefs); assertFalse("Empty attributeDefinitions", entAttrDefs.isEmpty());
assertNotNull("Null identifiers in account", accountDef.getPrimaryIdentifiers()); assertFalse("Empty identifiers in account", accountDef.getPrimaryIdentifiers().isEmpty()); assertNotNull("Null secondary identifiers in account", accountDef.getSecondaryIdentifiers()); assertFalse("Empty secondary identifiers in account", accountDef.getSecondaryIdentifiers().isEmpty()); assertNotNull("No naming attribute in account", accountDef.getNamingAttribute()); assertFalse("No nativeObjectClass in account", StringUtils.isEmpty(accountDef.getNativeObjectClass())); RefinedAttributeDefinition uidDef = accountDef.findAttributeDefinition(SchemaTestConstants.ICFS_UID); assertEquals(1, uidDef.getMaxOccurs()); assertEquals(0, uidDef.getMinOccurs()); assertFalse("UID has update",uidDef.canModify()); assertTrue("No UID read",uidDef.canRead()); assertTrue("UID definition not in identifiers", accountDef.getPrimaryIdentifiers().contains(uidDef)); RefinedAttributeDefinition nameDef = accountDef.findAttributeDefinition(SchemaTestConstants.ICFS_NAME); assertEquals(1, nameDef.getMaxOccurs()); assertEquals(1, nameDef.getMinOccurs()); assertTrue("No NAME update",nameDef.canModify()); assertTrue("No NAME read",nameDef.canRead()); assertTrue("NAME definition not in identifiers", accountDef.getSecondaryIdentifiers().contains(nameDef)); RefinedAttributeDefinition fullnameDef = accountDef.findAttributeDefinition(DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME); assertNotNull("No definition for fullname", fullnameDef); assertEquals(1, fullnameDef.getMaxOccurs()); assertNull("The _PASSSWORD_ attribute sneaked into schema", accountDef.findAttributeDefinition(new QName(SchemaTestConstants.NS_ICFS,"password")));
String previousNodeName = null; indent++; for (ResourceAttributeDefinition attrDef : def.getAttributeDefinitions()) { if (attrDef.isIgnored()) { continue; ResourceDataItem item = dataModel.findResourceItem(resource.getOid(), def.getKind(), def.getIntent(), getObjectClassName(def), attrDef.getName()); previousNodeName = addResourceItem(itemsShown, indent, sb1, previousNodeName, item); for (RefinedAssociationDefinition assocDef : def.getAssociationDefinitions()) { if (assocDef.isIgnored()) { continue; ResourceDataItem item = dataModel.findResourceItem(resource.getOid(), def.getKind(), def.getIntent(), getObjectClassName(def), assocDef.getName()); previousNodeName = addResourceItem(itemsShown, indent, sb1, previousNodeName, item); dataModel.findResourceItem(resource.getOid(), def.getKind(), def.getIntent(), getObjectClassName(def), ItemPath.create(ShadowType.F_ACTIVATION, ActivationType.F_ADMINISTRATIVE_STATUS))); previousNodeName = addResourceItem(itemsShown, indent, sb1, previousNodeName, dataModel.findResourceItem(resource.getOid(), def.getKind(), def.getIntent(), getObjectClassName(def), ItemPath.create(ShadowType.F_ACTIVATION, DataModelVisualizerImpl.ACTIVATION_EXISTENCE))); previousNodeName = addResourceItem(itemsShown, indent, sb1, previousNodeName, dataModel.findResourceItem(resource.getOid(), def.getKind(), def.getIntent(), getObjectClassName(def), ItemPath.create(ShadowType.F_ACTIVATION, ActivationType.F_VALID_FROM))); previousNodeName = addResourceItem(itemsShown, indent, sb1, previousNodeName, dataModel.findResourceItem(resource.getOid(), def.getKind(), def.getIntent(), getObjectClassName(def), ItemPath.create(ShadowType.F_ACTIVATION, ActivationType.F_VALID_TO))); previousNodeName = addResourceItem(itemsShown, indent, sb1, previousNodeName,
public static String debugDump(int indent, LayerType layer, RefinedObjectClassDefinition _this) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < indent; i++) { sb.append(INDENT_STRING); } sb.append(_this.getDebugDumpClassName()).append("("); sb.append(SchemaDebugUtil.prettyPrint(_this.getTypeName())); if (_this.isDefault()) { sb.append(",default"); } if (_this.getKind() != null) { sb.append(" ").append(_this.getKind().value()); } sb.append(","); if (_this.getIntent() != null) { sb.append("intent=").append(_this.getIntent()); } if (layer != null) { sb.append(",layer=").append(layer); } sb.append(")"); for (RefinedAttributeDefinition rAttrDef: _this.getAttributeDefinitions()) { sb.append("\n"); sb.append(rAttrDef.debugDump(indent + 1, layer)); } return sb.toString(); }
for (RefinedObjectClassDefinition refinedDefinition : refinedDefinitions) { LOGGER.debug("Processing refined definition {}", refinedDefinition); Collection<? extends RefinedAttributeDefinition<?>> attributeDefinitions = refinedDefinition.getAttributeDefinitions(); final ShadowKindType kind = def(refinedDefinition.getKind()); final String intent = def(refinedDefinition.getIntent()); for (RefinedAttributeDefinition<?> attributeDefinition : attributeDefinitions) { if (attributeDefinition.isIgnored()) { Collection<RefinedAssociationDefinition> associationDefinitions = refinedDefinition.getAssociationDefinitions(); for (RefinedAssociationDefinition associationDefinition : associationDefinitions) { if (associationDefinition.isIgnored()) { ResourceActivationDefinitionType actMapping = refinedDefinition.getActivationSchemaHandling(); if (actMapping != null) { QName objectClassName = getObjectClassName(refinedDefinition); processBidirectionalMapping(model, resource.getOid(), kind, intent, objectClassName, ItemPath.create(FocusType.F_ACTIVATION, ACTIVATION_EXISTENCE), actMapping.getExistence()); ResourcePasswordDefinitionType pwdDef = refinedDefinition.getPasswordDefinition(); if (pwdDef != null) { ResourceDataItem resourceDataItem = model.findResourceItem(resource.getOid(), kind, intent,
protected RefinedAttributeDefinition getAttributeDefinition(ResourceType resourceType, ShadowKindType kind, QName objectClassName, String attributeLocalName) throws SchemaException { RefinedResourceSchema refinedResourceSchema = RefinedResourceSchemaImpl.getRefinedSchema(resourceType); RefinedObjectClassDefinition refinedObjectClassDefinition = refinedResourceSchema.findRefinedDefinitionByObjectClassQName(kind, objectClassName); return refinedObjectClassDefinition.findAttributeDefinition(attributeLocalName); }
protected Collection<PrismObject<ShadowType>> listAccounts(PrismObject<ResourceType> resource, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException { RefinedResourceSchema rSchema = RefinedResourceSchemaImpl.getRefinedSchema(resource); RefinedObjectClassDefinition rAccount = rSchema.getDefaultRefinedDefinition(ShadowKindType.ACCOUNT); Collection<? extends ResourceAttributeDefinition> identifierDefs = rAccount.getPrimaryIdentifiers(); assert identifierDefs.size() == 1 : "Unexpected identifier set in "+resource+" refined schema: "+identifierDefs; ResourceAttributeDefinition identifierDef = identifierDefs.iterator().next(); ObjectQuery query = prismContext.queryFor(ShadowType.class) .item(ShadowType.F_OBJECT_CLASS).eq(rAccount.getObjectClassDefinition().getTypeName()) .and().item(ShadowType.F_RESOURCE_REF).ref(resource.getOid()) .build(); List<PrismObject<ShadowType>> accounts = modelService.searchObjects(ShadowType.class, query, null, task, result); return accounts; }
private <T> Integer countAccounts(ResourceType resourceType, QName attributeName, T attributeValue, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException { RefinedResourceSchema rSchema = RefinedResourceSchemaImpl.getRefinedSchema(resourceType); RefinedObjectClassDefinition rAccountDef = rSchema.getDefaultRefinedDefinition(ShadowKindType.ACCOUNT); RefinedAttributeDefinition attrDef = rAccountDef.findAttributeDefinition(attributeName); ObjectQuery query = prismContext.queryFor(ShadowType.class) .itemWithDef(attrDef, ShadowType.F_ATTRIBUTES, attrDef.getName()).eq(attributeValue) .and().item(ShadowType.F_OBJECT_CLASS).eq(rAccountDef.getObjectClassDefinition().getTypeName()) .and().item(ShadowType.F_RESOURCE_REF).ref(resourceType.getOid()) .build(); return modelObjectResolver.countObjects(ShadowType.class, query, null, task, result); }
private void assertRefinedObjectClass(ObjectClassComplexTypeDefinition objectClass, QName objectClassQName, ShadowKindType kind, String intent) { assertNotNull("No object class", objectClass); if (!(objectClass instanceof RefinedObjectClassDefinition)) { AssertJUnit.fail("Expected refined object class definition, but it was "+objectClass+" ("+objectClass.getClass()+")"); } RefinedObjectClassDefinition rOcDef = (RefinedObjectClassDefinition)objectClass; assertEquals("Wrong object class QName in rOcDef "+rOcDef, objectClassQName, rOcDef.getTypeName()); assertEquals("Wrong kind in rOcDef "+rOcDef, kind, rOcDef.getKind()); assertEquals("Wrong kind in rOcDef "+rOcDef, intent, rOcDef.getIntent()); }
outboundConstruction.setRefinedObjectClassDefinition(rOcDef); Collection<RefinedObjectClassDefinition> auxiliaryObjectClassDefinitions = rOcDef.getAuxiliaryObjectClassDefinitions(); if (auxiliaryObjectClassDefinitions != null) { for (RefinedObjectClassDefinition auxiliaryObjectClassDefinition: auxiliaryObjectClassDefinitions) { for (QName attributeName : rOcDef.getNamesOfAttributesWithOutboundExpressions()) { RefinedAttributeDefinition<?> refinedAttributeDefinition = rOcDef.findAttributeDefinition(attributeName); for (QName assocName : rOcDef.getNamesOfAssociationsWithOutboundExpressions()) { RefinedAssociationDefinition associationDefinition = rOcDef.findAssociationDefinition(assocName);
public static boolean shouldStoreAtributeInShadow(RefinedObjectClassDefinition objectClassDefinition, QName attributeName, CachingStategyType cachingStrategy) throws ConfigurationException { if (cachingStrategy == null || cachingStrategy == CachingStategyType.NONE) { if (objectClassDefinition.isPrimaryIdentifier(attributeName) || objectClassDefinition.isSecondaryIdentifier(attributeName)) { return true; } for (RefinedAssociationDefinition associationDef: objectClassDefinition.getAssociationDefinitions()) { if (associationDef.getResourceObjectAssociationType().getDirection() == ResourceObjectAssociationDirectionType.OBJECT_TO_SUBJECT) { QName valueAttributeName = associationDef.getResourceObjectAssociationType().getValueAttribute(); if (QNameUtil.match(attributeName, valueAttributeName)) { return true; } } } return false; } else if (cachingStrategy == CachingStategyType.PASSIVE) { RefinedAttributeDefinition<Object> attrDef = objectClassDefinition.findAttributeDefinition(attributeName); return attrDef != null; } else { throw new ConfigurationException("Unknown caching strategy "+cachingStrategy); } }
@Override public ShadowKindType getKind() { return refinedObjectClassDefinition.getKind(); }
throw new SchemaException("No name in entitlement association "+associationCVal); RefinedAssociationDefinition assocDefType = subjectCtx.getObjectClassDefinition().findAssociationDefinition(associationName); if (assocDefType == null) { throw new SchemaException("No entitlement association with name "+assocDefType+" in schema of "+resource); RefinedAttributeDefinition assocAttrDef = entitlementOcDef.findAttributeDefinition(assocAttrName); if (assocAttrDef == null) { throw new SchemaException("Association attribute '"+assocAttrName+"'defined in entitlement association was not found in entitlement intent(s) '"+entitlementIntents+"' in schema for "+resource); Collection<ResourceAttribute<?>> entitlementIdentifiersFromAssociation = identifiersContainer.getAttributes(); ResourceObjectDiscriminator disc = new ResourceObjectDiscriminator(entitlementOcDef.getTypeName(), entitlementIdentifiersFromAssociation); ResourceObjectOperations operations = roMap.get(disc); if (operations == null) {
default <X> RefinedAttributeDefinition<X> findAttributeDefinition(String name) { return findAttributeDefinition(new QName(getTypeName().getNamespaceURI(), name)); }