public static ResourceAttributeDefinition<String> getUidDefinition(ObjectClassComplexTypeDefinition def) { Collection<? extends ResourceAttributeDefinition> primaryIdentifiers = def.getPrimaryIdentifiers(); if (primaryIdentifiers.size() > 1) { throw new UnsupportedOperationException("Multiple primary identifiers are not supported"); } if (primaryIdentifiers.size() == 1) { return primaryIdentifiers.iterator().next(); } else { // fallback, compatibility return def.findAttributeDefinition(SchemaConstants.ICFS_UID); } }
public static ResourceAttributeDefinition<String> getNameDefinition(ObjectClassComplexTypeDefinition def) { Collection<? extends ResourceAttributeDefinition> secondaryIdentifiers = def.getSecondaryIdentifiers(); if (secondaryIdentifiers.size() > 1) { throw new UnsupportedOperationException("Multiple secondary identifiers are not supported"); } if (secondaryIdentifiers.size() == 1) { return secondaryIdentifiers.iterator().next(); } else { // fallback, compatibility return def.findAttributeDefinition(SchemaConstants.ICFS_NAME); } }
default <X> ResourceAttributeDefinition<X> findAttributeDefinition(String name) { return findAttributeDefinition(new QName(getTypeName().getNamespaceURI(), name)); }
public static <T,RA> ResourceAttributeDefinitionAsserter<T,RA> forAttribute(ObjectClassComplexTypeDefinition objectClassDefinition, QName attrName, RA returnAsserter, String desc) { ResourceAttributeDefinition<T> attrDefinition = objectClassDefinition.findAttributeDefinition(attrName); assertNotNull("No definition for attribute "+attrName+" in " + desc, attrDefinition); ResourceAttributeDefinitionAsserter<T, RA> asserter = new ResourceAttributeDefinitionAsserter<>(attrDefinition, returnAsserter, desc); asserter.objectClassDefinition = objectClassDefinition; return asserter; }
public static <T,RA> ResourceAttributeDefinitionAsserter<T,RA> forAttribute(ObjectClassComplexTypeDefinition objectClassDefinition, String attrName, RA returnAsserter, String desc) { ResourceAttributeDefinition<T> attrDefinition = objectClassDefinition.findAttributeDefinition(attrName); assertNotNull("No definition for attribute "+attrName+" in " + desc, attrDefinition); ResourceAttributeDefinitionAsserter<T, RA> asserter = new ResourceAttributeDefinitionAsserter<>(attrDefinition, returnAsserter, desc); asserter.objectClassDefinition = objectClassDefinition; return asserter; }
public <T> String convertAttributeNameToConnId(QName attributeName, ObjectClassComplexTypeDefinition ocDef, String desc) throws SchemaException { ResourceAttributeDefinition<T> attrDef = ocDef.findAttributeDefinition(attributeName); if (attrDef == null) { throw new SchemaException("No attribute "+attributeName+" in object class "+ocDef.getTypeName() + " " + desc); } return convertAttributeNameToConnId(attrDef); }
private ObjectQuery narrowQueryForBucket(ObjectQuery query, Task localCoordinatorTask, WorkBucketType workBucket, ObjectClassComplexTypeDefinition objectclassDef, OperationResult opResult) throws SchemaException, ObjectNotFoundException { return taskManager.narrowQueryForWorkBucket(query, ShadowType.class, itemPath -> { if (itemPath.startsWithName(ShadowType.F_ATTRIBUTES)) { return objectclassDef.findAttributeDefinition(itemPath.rest().asSingleName()); } else { return null; } }, localCoordinatorTask, workBucket, opResult); }
public String convertAttributeNameToConnId(ResourceAttribute<?> attribute, ObjectClassComplexTypeDefinition ocDef) throws SchemaException { ResourceAttributeDefinition attrDef = attribute.getDefinition(); if (attrDef == null) { attrDef = ocDef.findAttributeDefinition(attribute.getElementName()); if (attrDef == null) { throw new SchemaException("No attribute "+attribute.getElementName()+" in object class "+ocDef.getTypeName()); } } return convertAttributeNameToConnId(attrDef); }
public String convertAttributeNameToConnId(PropertyDelta<?> attributeDelta, ObjectClassComplexTypeDefinition ocDef) throws SchemaException { PrismPropertyDefinition<?> propDef = attributeDelta.getDefinition(); ResourceAttributeDefinition attrDef; if (propDef != null && (propDef instanceof ResourceAttributeDefinition)) { attrDef = (ResourceAttributeDefinition)propDef; } else { attrDef = ocDef.findAttributeDefinition(attributeDelta.getElementName()); if (attrDef == null) { throw new SchemaException("No attribute "+attributeDelta.getElementName()+" in object class "+ocDef.getTypeName()); } } return convertAttributeNameToConnId(attrDef); }
private PrismProperty createProperty(String propertyName, String propertyValue) { ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findObjectClassDefinition( new QName(ResourceTypeUtil.getResourceNamespace(resourceType), OpenDJController.OBJECT_CLASS_INETORGPERSON_NAME)); ResourceAttributeDefinition propertyDef = accountDefinition.findAttributeDefinition(new QName( ResourceTypeUtil.getResourceNamespace(resourceType), propertyName)); ResourceAttribute property = propertyDef.instantiate(); property.setRealValue(propertyValue); return property; }
public void assertDummyResourceSchemaSanityExtended(ResourceSchema resourceSchema, ResourceType resourceType, boolean checkDisplayOrder, int numberOfAccountDefinitions) { assertDummyResourceSchemaSanity(resourceSchema, resourceType, checkDisplayOrder); ObjectClassComplexTypeDefinition accountDef = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); assertNotNull("No default account definition", accountDef); ObjectClassComplexTypeDefinition accountObjectClassDef = resourceSchema.findObjectClassDefinition(SchemaTestConstants.ICF_ACCOUNT_OBJECT_CLASS_LOCAL_NAME); assertNotNull("No AccountObjectClass definition", accountObjectClassDef); assertTrue("Default account definition is not same as AccountObjectClass", accountDef == accountObjectClassDef); assertEquals("Unexpected number of definitions", numberOfAccountDefinitions, accountDef.getDefinitions().size()); ResourceAttributeDefinition<String> treasureDef = accountDef.findAttributeDefinition(DUMMY_ACCOUNT_ATTRIBUTE_TREASURE_NAME); assertFalse("Treasure IS returned by default and should not be", treasureDef.isReturnedByDefault()); // MID-4751 ResourceAttributeDefinition<XMLGregorianCalendar> enlistTimestampDef = accountDef.findAttributeDefinition(DUMMY_ACCOUNT_ATTRIBUTE_ENLIST_TIMESTAMP_NAME); PrismAsserts.assertDefinition(enlistTimestampDef, new QName(ResourceTypeUtil.getResourceNamespace(resourceType), DUMMY_ACCOUNT_ATTRIBUTE_ENLIST_TIMESTAMP_NAME), DOMUtil.XSD_DATETIME, 0, 1); assertEquals("Unexpected kind in account definition", ShadowKindType.ACCOUNT, accountDef.getKind()); assertTrue("Account definition in not default", accountDef.isDefaultInAKind()); assertNull("Non-null intent in account definition", accountDef.getIntent()); assertFalse("Account definition is deprecated", accountDef.isDeprecated()); assertFalse("Account definition is auxiliary", accountDef.isAuxiliary()); }
protected ObjectQuery createShadowQueryByAttribute(ObjectClassComplexTypeDefinition rAccount, String attributeName, String attributeValue, PrismObject<ResourceType> resource) throws SchemaException { ResourceAttributeDefinition<Object> attrDef = rAccount.findAttributeDefinition(attributeName); return prismContext.queryFor(ShadowType.class) .itemWithDef(attrDef, ShadowType.F_ATTRIBUTES, attrDef.getName()).eq(attributeValue) .and().item(ShadowType.F_OBJECT_CLASS).eq(rAccount.getTypeName()) .and().item(ShadowType.F_RESOURCE_REF).ref(resource.getOid()) .build(); }
protected <T> void testSeachIterativeAlternativeAttrFilter(final String TEST_NAME, QName attr1QName, T attr1Val, QName attr2QName, T attr2Val, GetOperationOptions rootOptions, boolean fullShadow, String... expectedAccountNames) throws Exception { ResourceSchema resourceSchema = RefinedResourceSchemaImpl.getResourceSchema(resource, prismContext); ObjectClassComplexTypeDefinition objectClassDef = resourceSchema.findObjectClassDefinition(SchemaTestConstants.ACCOUNT_OBJECT_CLASS_LOCAL_NAME); ResourceAttributeDefinition<T> attr1Def = objectClassDef.findAttributeDefinition(attr1QName); ResourceAttributeDefinition<T> attr2Def = objectClassDef.findAttributeDefinition(attr2QName); ObjectFilter filter = prismContext.queryFor(ShadowType.class) .itemWithDef(attr1Def, ShadowType.F_ATTRIBUTES, attr1Def.getName()).eq(attr1Val) .or().itemWithDef(attr2Def, ShadowType.F_ATTRIBUTES, attr2Def.getName()).eq(attr2Val) .buildFilter(); testSeachIterative(TEST_NAME, filter, rootOptions, fullShadow, false, true, expectedAccountNames); }
protected <T> void testSeachIterativeSingleAttrFilter(final String TEST_NAME, QName attrQName, T attrVal, GetOperationOptions rootOptions, boolean fullShadow, String... expectedAccountNames) throws Exception { ResourceSchema resourceSchema = RefinedResourceSchemaImpl.getResourceSchema(resource, prismContext); ObjectClassComplexTypeDefinition objectClassDef = resourceSchema.findObjectClassDefinition(SchemaTestConstants.ACCOUNT_OBJECT_CLASS_LOCAL_NAME); ResourceAttributeDefinition<T> attrDef = objectClassDef.findAttributeDefinition(attrQName); ObjectFilter filter = prismContext.queryFor(ShadowType.class) .itemWithDef(attrDef, ShadowType.F_ATTRIBUTES, attrDef.getName()).eq(attrVal) .buildFilter(); testSeachIterative(TEST_NAME, filter, rootOptions, fullShadow, true, false, expectedAccountNames); }
@Override protected void assertAccountDefinition(ObjectClassComplexTypeDefinition accountDef) { assertEquals("Unexpected number of definitions", 4, accountDef.getDefinitions().size()); ResourceAttributeDefinition<String> usernameDef = accountDef.findAttributeDefinition(ATTR_USERNAME); assertNotNull("No definition for username", usernameDef); assertEquals(1, usernameDef.getMaxOccurs()); assertEquals(1, usernameDef.getMinOccurs()); assertTrue("No username create", usernameDef.canAdd()); assertTrue("No username update", usernameDef.canModify()); assertTrue("No username read", usernameDef.canRead()); }
private List<PrismObject<ShadowType>> getJacksShadows(OperationResult result) throws SchemaException { ObjectQuery shadowQuery = prismContext.queryFor(ShadowType.class) .item(ShadowType.F_RESOURCE_REF).ref(RESOURCE_DUMMY_OID) .and().item(ItemPath.create(ShadowType.F_ATTRIBUTES, SchemaConstants.ICFS_NAME), getAccountObjectClassDefinition().findAttributeDefinition(SchemaConstants.ICFS_NAME)).eq("jack") .build(); return repositoryService.searchObjects(ShadowType.class, shadowQuery, null, result); } }
@Override protected void assertAccountDefinition(ObjectClassComplexTypeDefinition accountDef) { assertEquals("Unexpected number of definitions", 5, accountDef.getDefinitions().size()); ResourceAttributeDefinition<String> guidDef = accountDef.findAttributeDefinition(ATTR_GUID); assertNotNull("No definition for guid", guidDef); assertEquals(1, guidDef.getMaxOccurs()); assertEquals(1, guidDef.getMinOccurs()); assertTrue("No guid create", guidDef.canAdd()); assertTrue("No guid update", guidDef.canModify()); assertTrue("No guid read", guidDef.canRead()); ResourceAttributeDefinition<String> unameDef = accountDef.findAttributeDefinition(ATTR_UNAME); assertNotNull("No definition for uname", unameDef); assertEquals(1, unameDef.getMaxOccurs()); assertEquals(0, unameDef.getMinOccurs()); // TODO: should be 1 assertTrue("No uname create", unameDef.canAdd()); assertTrue("No uname update", unameDef.canModify()); assertTrue("No uname read", unameDef.canRead()); assertNotNull("Null secondary identifiers in account", accountDef.getSecondaryIdentifiers()); assertFalse("Empty secondary identifiers in account", accountDef.getSecondaryIdentifiers().isEmpty()); }
private void checkOpenDjSchema(ResourceType resource, String source) throws SchemaException { ResourceSchema schema = RefinedResourceSchemaImpl.getResourceSchema(resource, prismContext); ObjectClassComplexTypeDefinition accountDefinition = schema.findObjectClassDefinition(RESOURCE_OPENDJ_ACCOUNT_OBJECTCLASS); assertNotNull("Schema does not define any account (resource from " + source + ")", accountDefinition); Collection<? extends ResourceAttributeDefinition> identifiers = accountDefinition.getPrimaryIdentifiers(); assertFalse("No account identifiers (resource from " + source + ")", identifiers == null || identifiers.isEmpty()); // TODO: check for naming attributes and display names, etc ActivationCapabilityType capActivation = ResourceTypeUtil.getEffectiveCapability(resource, ActivationCapabilityType.class); if (capActivation != null && capActivation.getStatus() != null && capActivation.getStatus().getAttribute() != null) { // There is simulated activation capability, check if the attribute is in schema. QName enableAttrName = capActivation.getStatus().getAttribute(); ResourceAttributeDefinition enableAttrDef = accountDefinition.findAttributeDefinition(enableAttrName); display("Simulated activation attribute definition", enableAttrDef); assertNotNull("No definition for enable attribute " + enableAttrName + " in account (resource from " + source + ")", enableAttrDef); assertTrue("Enable attribute " + enableAttrName + " is not ignored (resource from " + source + ")", enableAttrDef.isIgnored()); } }
private ObjectQuery createOnOffQuery() throws SchemaException { ResourceSchema resourceSchema = RefinedResourceSchemaImpl.getResourceSchema(resource, prismContext); ObjectClassComplexTypeDefinition objectClassDef = resourceSchema.findObjectClassDefinition(SchemaTestConstants.ACCOUNT_OBJECT_CLASS_LOCAL_NAME); ResourceAttributeDefinition<String> attrDef = objectClassDef.findAttributeDefinition( dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_SHIP_NAME)); ObjectQuery query = prismContext.queryFor(ShadowType.class) .item(ShadowType.F_RESOURCE_REF).ref(RESOURCE_DUMMY_OID) .and().item(ShadowType.F_OBJECT_CLASS).eq(new QName(ResourceTypeUtil.getResourceNamespace(resourceType), SchemaConstants.ACCOUNT_OBJECT_CLASS_LOCAL_NAME)) .and().itemWithDef(attrDef, ShadowType.F_ATTRIBUTES, attrDef.getName()).eq("Sea Monkey") .and().item(ShadowType.F_DEAD).eq(true) .build(); display("Query", query); return query; }
private PrismObject<ShadowType> getGroupShadow(DummyResourceContoller dummyResourceCtl, QName objectClass, String name, Task task, OperationResult result) throws Exception { PrismObject<ResourceType> resource = dummyResourceCtl.getResource(); ObjectClassComplexTypeDefinition groupDef = RefinedResourceSchema.getRefinedSchema(resource) .findObjectClassDefinition(dummyResourceCtl.getGroupObjectClass()); ResourceAttributeDefinition<Object> nameDef = groupDef.findAttributeDefinition(SchemaConstants.ICFS_NAME); assertNotNull("No icfs:name definition", nameDef); ObjectQuery query = ObjectQueryUtil.createResourceAndObjectClassFilterPrefix(resource.getOid(), objectClass, prismContext) .and().item(ItemPath.create(ShadowType.F_ATTRIBUTES, SchemaConstants.ICFS_NAME), nameDef).eq(name) .build(); SearchResultList<PrismObject<ShadowType>> shadows = modelService.searchObjects(ShadowType.class, query, null, task, result); assertEquals("Wrong # of results for " + name + " of " + objectClass + " at " + resource, 1, shadows.size()); return shadows.get(0); }