/** * Finds a specific property in the container by definition. * <p> * Returns null if nothing is found. * * @param propertyDefinition property definition to find. * @return found property or null */ public <X> PrismProperty<X> findProperty(PrismPropertyDefinition<X> propertyDefinition) { if (propertyDefinition == null) { throw new IllegalArgumentException("No property definition"); } return findProperty(propertyDefinition.getName()); }
public <X> PrismProperty<X> findOrCreateProperty(PrismPropertyDefinition propertyDef) throws SchemaException { PrismProperty<X> property = findItem(propertyDef.getName(), PrismProperty.class); if (property != null) { return property; } return createProperty(propertyDef); }
protected String desc() { return descWithDetails("property definition " + PrettyPrinter.prettyPrint(getDefinition().getName())); }
private void assertConfigurationPropertyDefinition(PrismPropertyDefinition propDef, QName expectedType, int expectedMinOccurs, int expectedMaxOccurs, String expectedDisplayName, String expectedHelp) { PrismAsserts.assertDefinition(propDef, propDef.getName(), expectedType, expectedMinOccurs, expectedMaxOccurs); assertEquals("Wrong displayName in "+propDef.getName()+" definition", expectedDisplayName, propDef.getDisplayName()); assertEquals("Wrong help in "+propDef.getName()+" definition", expectedHelp, propDef.getHelp()); }
private <T> void recordDelta(ValueMatcher<T> valueMatcher, LensProjectionContext projCtx, ItemPath parentPath, PrismPropertyDefinition<T> attrDef, ModificationType changeType, T value, ObjectType originObject, String reason) throws SchemaException { ItemDelta existingDelta = null; if (projCtx.getSecondaryDelta() != null) { existingDelta = projCtx.getSecondaryDelta().findItemDelta( ItemPath.create(parentPath, attrDef.getName())); } if (LOGGER.isTraceEnabled()) { LOGGER.trace(" reconciliation will {} value of attribute {}: {} because {}", changeType, PrettyPrinter.prettyPrint(attrDef.getName()), value, reason); } PropertyDelta<T> attrDelta = prismContext.deltaFactory().property().create(parentPath, attrDef.getName(), attrDef); PrismPropertyValue<T> pValue = prismContext.itemFactory().createPropertyValue(value, OriginType.RECONCILIATION, originObject); if (changeType == ModificationType.ADD) { attrDelta.addValueToAdd(pValue); } else if (changeType == ModificationType.DELETE) { if (!isToBeDeleted(existingDelta, valueMatcher, value)){ attrDelta.addValueToDelete(pValue); } } else if (changeType == ModificationType.REPLACE) { attrDelta.setValueToReplace(pValue); } else { throw new IllegalArgumentException("Unknown change type " + changeType); } LensUtil.setDeltaOldValue(projCtx, attrDelta); projCtx.swallowToSecondaryDelta(attrDelta); }
if (useCache && Cache.isOk(resourceType.getOid(), oid, objectClassDefinition.getTypeName(), identifier.getDefinition().getName(), identifier.getValues())) { return true; Cache.setOk(resourceType.getOid(), oid, objectClassDefinition.getTypeName(), identifier.getDefinition().getName(), identifier.getValues()); Cache.setOk(resourceType.getOid(), oid, objectClassDefinition.getTypeName(), identifier.getDefinition().getName(), identifier.getValues());
String attrNamespace = definition.getName().getNamespaceURI(); if (attrNamespace != null && attrNamespace.equals(getNamespace())) { setAttribute(property, "name", definition.getName().getLocalPart()); setQNameAttribute(property, "type", definition.getTypeName()); } else { setQNameAttribute(property, "ref", definition.getName());
.itemWithDef(def, ShadowType.F_ATTRIBUTES, def.getName()).eq(getNormalizedValue(identifier, ctx.getObjectClassDefinition())) .and().item(ShadowType.F_OBJECT_CLASS).eq(resourceShadow.getPropertyRealValue(ShadowType.F_OBJECT_CLASS, QName.class)) .and().item(ShadowType.F_RESOURCE_REF).ref(ctx.getResourceOid())
private static ObjectQuery createShadowQuery(ShadowType resourceShadow, ObjectClassComplexTypeDefinition objectClassDef, MatchingRule<String> uidMatchingRule, PrismContext prismContext) throws SchemaException { PrismContainer<?> attributesContainer = resourceShadow.asPrismObject().findContainer(ShadowType.F_ATTRIBUTES); QName identifierName = objectClassDef.getPrimaryIdentifiers().iterator().next().getName(); PrismProperty<String> identifier = attributesContainer.findProperty(ItemName.fromQName(identifierName)); if (identifier == null) { throw new SchemaException("No identifier in "+resourceShadow); } String identifierValue = identifier.getRealValue(); if (uidMatchingRule != null) { identifierValue = uidMatchingRule.normalize(identifierValue); } PrismPropertyDefinition<String> identifierDef = identifier.getDefinition(); return prismContext.queryFor(ShadowType.class) .item(ShadowType.F_RESOURCE_REF).ref(ShadowUtil.getResourceOid(resourceShadow)) .and().item(ItemPath.create(ShadowType.F_ATTRIBUTES, identifierDef.getName()), identifierDef).eq(identifierValue) .build(); }
private void searchFettucini(int expectedNumberOfFettucinis) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException { Task task = createTask(TestDummy.class.getName() + ".searchFettucini"); OperationResult result = task.getResult(); ObjectQuery query = prismContext.queryFor(ShadowType.class) .item(ShadowType.F_RESOURCE_REF).ref(resource.getOid()) .and().item(ShadowType.F_OBJECT_CLASS).eq(new QName(dummyResourceCtl.getNamespace(), "AccountObjectClass")) .and().itemWithDef(getIcfNameDefinition(), ShadowType.F_ATTRIBUTES, getIcfNameDefinition().getName()).eq(ACCOUNT_FETTUCINI_NAME) .build(); // WHEN List<PrismObject<ShadowType>> shadows = provisioningService.searchObjects(ShadowType.class, query, null, task, result); assertEquals("Wrong number of Fettucinis found", expectedNumberOfFettucinis, shadows.size()); }
q = q.itemWithDef(def, ShadowType.F_ATTRIBUTES, def.getName()).eq(normalizedIdentifierValue).and();
protected void checkUniqueness(PrismObject<? extends ShadowType> object) throws SchemaException { OperationResult result = new OperationResult(TestDummyNegative.class.getName() + ".checkConsistency"); PrismPropertyDefinition itemDef = ShadowUtil.getAttributesContainer(object).getDefinition().findAttributeDefinition(SchemaConstants.ICFS_NAME); LOGGER.info("item definition: {}", itemDef.debugDump()); //TODO: matching rule ObjectQuery query = prismContext.queryFor(ShadowType.class) .itemWithDef(itemDef, ShadowType.F_ATTRIBUTES, itemDef.getName()).eq(getWillRepoIcfName()) .build(); System.out.println("Looking for shadows of \"" + getWillRepoIcfName() + "\" with filter " + query.debugDump()); display("Looking for shadows of \"" + getWillRepoIcfName() + "\" with filter " + query.debugDump()); List<PrismObject<ShadowType>> objects = repositoryService.searchObjects(ShadowType.class, query, null, result); assertEquals("Wrong number of repo shadows for ICF NAME \"" + getWillRepoIcfName() + "\"", 1, objects.size()); }
private boolean checkAttributeUniqueness(PrismProperty identifier, RefinedObjectClassDefinition accountDefinition, ResourceType resourceType, String oid, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException { List<PrismPropertyValue<?>> identifierValues = identifier.getValues(); if (identifierValues.isEmpty()) { throw new SchemaException("Empty identifier "+identifier+" while checking uniqueness of "+oid+" ("+resourceType+")"); } //TODO: set matching rule instead of null ObjectQuery query = prismContext.queryFor(ShadowType.class) .itemWithDef(identifier.getDefinition(), ShadowType.F_ATTRIBUTES, identifier.getDefinition().getName()) .eq(PrismValueCollectionsUtil.cloneCollection(identifierValues)) .and().item(ShadowType.F_OBJECT_CLASS).eq(accountDefinition.getObjectClassDefinition().getTypeName()) .and().item(ShadowType.F_RESOURCE_REF).ref(resourceType.getOid()) .and().block() .item(ShadowType.F_DEAD).eq(false) .or().item(ShadowType.F_DEAD).isNull() .endBlock() .build(); boolean unique = checkUniqueness(oid, identifier, query, task, result); return unique; }
private void assertResourceSchema(ResourceSchema unSchema) { ObjectClassComplexTypeDefinition objectClassDef = unSchema.findObjectClassDefinition(new ItemName(SCHEMA_NAMESPACE,"AccountObjectClass")); assertEquals(new ItemName(SCHEMA_NAMESPACE,"AccountObjectClass"),objectClassDef.getTypeName()); assertEquals("AccountObjectClass class not an account", ShadowKindType.ACCOUNT, objectClassDef.getKind()); assertTrue("AccountObjectClass class not a DEFAULT account", objectClassDef.isDefaultInAKind()); PrismPropertyDefinition<String> loginDef = objectClassDef.findPropertyDefinition(new ItemName(SCHEMA_NAMESPACE,"login")); assertEquals(new ItemName(SCHEMA_NAMESPACE,"login"), loginDef.getName()); assertEquals(DOMUtil.XSD_STRING, loginDef.getTypeName()); PrismPropertyDefinition<ProtectedStringType> passwdDef = objectClassDef.findPropertyDefinition(new ItemName(SCHEMA_NAMESPACE,"password")); assertEquals(new ItemName(SCHEMA_NAMESPACE,"password"), passwdDef.getName()); assertEquals(ProtectedStringType.COMPLEX_TYPE, passwdDef.getTypeName()); // PrismContainerDefinition<CredentialsType> credDef = objectClassDef.findContainerDefinition(new SingleNamePath(SchemaConstants.NS_C,"credentials")); // assertEquals(new SingleNamePath(SchemaConstants.NS_C,"credentials"), credDef.getName()); // assertEquals(new SingleNamePath(SchemaConstants.NS_C,"CredentialsType"), credDef.getTypeName()); }
assertEquals(new ItemName(SCHEMA_NS,"number1"),number1def.getName()); assertEquals(DOMUtil.XSD_INT,number1def.getTypeName()); assertEquals(new ItemName(SCHEMA_NS,"login"), loginDef.getName()); assertEquals(DOMUtil.XSD_STRING, loginDef.getTypeName()); assertTrue("Read flag is wrong",loginDef.canRead()); assertEquals(new ItemName(SCHEMA_NS,"password"), passwdDef.getName()); assertEquals(ProtectedStringType.COMPLEX_TYPE, passwdDef.getTypeName()); assertEquals(new ItemName(SchemaConstants.NS_C,"credentials"), credDef.getName()); assertEquals(new ItemName(SchemaConstants.NS_C,"CredentialsType"), credDef.getTypeName()); assertEquals(new ItemName(SCHEMA_NS,"counter"), countDef.getName()); assertEquals(DOMUtil.XSD_INT, countDef.getTypeName()); assertTrue("Read flag is wrong",countDef.canRead());
assertEquals(new ItemName(SCHEMA_NS,"login"), loginDef.getName()); assertEquals(DOMUtil.XSD_STRING, loginDef.getTypeName()); assertFalse(loginDef.isIgnored()); assertEquals(new ItemName(SCHEMA_NS,"password"), passwdDef.getName()); assertEquals(ProtectedStringType.COMPLEX_TYPE, passwdDef.getTypeName()); assertFalse(passwdDef.isIgnored()); assertEquals(new ItemName(SCHEMA_NS,"sep"), sepDef.getName()); assertEquals(DOMUtil.XSD_STRING, sepDef.getTypeName()); assertTrue(sepDef.isIgnored());
private void assertSimpleSchema(ResourceSchema schema, String filename) { assertNotNull(schema); System.out.println("Parsed schema from " + filename + ":"); System.out.println(schema.debugDump()); ObjectClassComplexTypeDefinition accDef = schema.findObjectClassDefinition(new ItemName(SCHEMA_NAMESPACE, "AccountObjectClass")); assertEquals("Wrong account objectclass", new ItemName(SCHEMA_NAMESPACE, "AccountObjectClass"), accDef.getTypeName()); assertEquals("Wrong account kind", ShadowKindType.ACCOUNT, accDef.getKind()); assertEquals("Wrong account intent", "admin", accDef.getIntent()); assertTrue("Not a default account", accDef.isDefaultInAKind()); PrismPropertyDefinition<String> loginAttrDef = accDef.findPropertyDefinition(new ItemName(SCHEMA_NAMESPACE, "login")); assertEquals(new ItemName(SCHEMA_NAMESPACE, "login"), loginAttrDef.getName()); assertEquals(DOMUtil.XSD_STRING, loginAttrDef.getTypeName()); assertFalse("Ignored while it should not be", loginAttrDef.isIgnored()); PrismPropertyDefinition<Integer> groupAttrDef = accDef.findPropertyDefinition(new ItemName(SCHEMA_NAMESPACE, "group")); assertEquals(new ItemName(SCHEMA_NAMESPACE, "group"), groupAttrDef.getName()); assertEquals(DOMUtil.XSD_INT, groupAttrDef.getTypeName()); assertFalse("Ignored while it should not be", groupAttrDef.isIgnored()); PrismPropertyDefinition<String> ufoAttrDef = accDef.findPropertyDefinition(new ItemName(SCHEMA_NAMESPACE, "ufo")); assertEquals(new ItemName(SCHEMA_NAMESPACE, "ufo"), ufoAttrDef.getName()); assertTrue("Not ignored as it should be", ufoAttrDef.isIgnored()); ObjectClassComplexTypeDefinition groupDef = schema.findObjectClassDefinition(new ItemName(SCHEMA_NAMESPACE, "GroupObjectClass")); assertEquals("Wrong group objectclass", new ItemName(SCHEMA_NAMESPACE, "GroupObjectClass"), groupDef.getTypeName()); assertEquals("Wrong group kind", ShadowKindType.ENTITLEMENT, groupDef.getKind()); assertEquals("Wrong group intent", null, groupDef.getIntent()); assertFalse("Default group but it should not be", groupDef.isDefaultInAKind()); }
ItemPath namePath = UserType.F_NAME; PrismPropertyDefinition ppd = getUserDefinition().findPropertyDefinition(namePath); PrismAsserts.assertEqualsFilter(typeFilter.getFilter(), ppd.getName(), ppd.getTypeName(), namePath); PrismAsserts.assertEqualsFilterValue((EqualFilter) typeFilter.getFilter(), PrismTestUtil.createPolyString("some name identificator"));
PrismProperty item = shadow.findProperty(employeeTypePath); PropertyDelta deleteDelta = prismContext.deltaFactory().property().create(ShadowType.F_ATTRIBUTES, item.getDefinition().getName(), item.getDefinition());
radt.setRef(new ItemPathType(gossipDefinition.getName())); MappingType outbound = new MappingType(); radt.setOutbound(outbound);