public <X> PrismProperty<X> createProperty(PrismPropertyDefinition propertyDefinition) throws SchemaException { PrismProperty<X> property = propertyDefinition.instantiate(); add(property); return property; }
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()); if (definition.getMinOccurs() != 1) { setAttribute(property, "minOccurs", Integer.toString(definition.getMinOccurs())); if (definition.getMaxOccurs() != 1) { String maxOccurs = definition.getMaxOccurs() == XSParticle.UNBOUNDED ? MAX_OCCURS_UNBOUNDED : Integer.toString(definition.getMaxOccurs()); setAttribute(property, "maxOccurs", maxOccurs); if (!definition.canAdd() || !definition.canRead() || !definition.canModify()) { if (definition.canAdd()) { addAnnotation(A_ACCESS, A_ACCESS_CREATE, appinfo); if (definition.canRead()) { addAnnotation(A_ACCESS, A_ACCESS_READ, appinfo); if (definition.canModify()) { addAnnotation(A_ACCESS, A_ACCESS_UPDATE, appinfo); if (definition.isIndexed() != null) { addAnnotation(A_INDEXED, XmlTypeConverterInternal.toXmlTextContent(definition.isIndexed(), A_INDEXED), appinfo);
public static Object getIterationTokenVariableValue(LensProjectionContext accCtx) { String iterationTokenOld = null; PrismObject<ShadowType> shadowCurrent = accCtx.getObjectCurrent(); if (shadowCurrent != null) { iterationTokenOld = shadowCurrent.asObjectable().getIterationToken(); } if (iterationTokenOld == null) { return accCtx.getIterationToken(); } PrismPropertyDefinition<String> propDef = accCtx.getPrismContext().definitionFactory().createPropertyDefinition( ExpressionConstants.VAR_ITERATION_TOKEN, DOMUtil.XSD_STRING); PrismProperty<String> propOld = propDef.instantiate(); propOld.setRealValue(iterationTokenOld); PropertyDelta<String> propDelta = propDef.createEmptyDelta(ExpressionConstants.VAR_ITERATION_TOKEN); propDelta.setRealValuesToReplace(accCtx.getIterationToken()); PrismProperty<String> propNew = propDef.instantiate(); propNew.setRealValue(accCtx.getIterationToken()); ItemDeltaItem<PrismPropertyValue<String>,PrismPropertyDefinition<String>> idi = new ItemDeltaItem<>(propOld, propDelta, propNew); return idi; }
public static <T,X> PrismProperty<X> convertProperty(PrismProperty<T> srcProp, PrismPropertyDefinition<X> targetDef, PrismContext prismContext) throws SchemaException { if (targetDef.getTypeName().equals(srcProp.getDefinition().getTypeName())) { return (PrismProperty<X>) srcProp; } else { PrismProperty<X> targetProp = targetDef.instantiate(); Class<X> expectedJavaType = XsdTypeMapper.toJavaType(targetDef.getTypeName()); for (PrismPropertyValue<T> srcPVal: srcProp.getValues()) { X convertedRealValue = JavaTypeConverter.convert(expectedJavaType, srcPVal.getValue()); targetProp.add(prismContext.itemFactory().createPropertyValue(convertedRealValue)); } return targetProp; } }
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()); }
@Override public void validate(PrismPropertyDefinition<PolyString> propDef, String name) throws Exception { assertNotNull("No definition for name in user", propDef); assertEquals("Wrong name displayName", "ObjectType.name", propDef.getDisplayName()); assertTrue(name+" not readable", propDef.canRead()); assertTrue(name+" is creatable", !propDef.canAdd()); assertTrue(name+" is modifiable", !propDef.canModify()); } }, PrismTestUtil.createPolyString("jack"));
counterProperty.toMutable().toMutable().setReadOnly(); 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()); assertTrue("Create flag is wrong",loginDef.canAdd()); assertTrue("Update flag is wrong",loginDef.canModify()); 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()); assertFalse("Create flag is wrong",countDef.canAdd()); assertFalse("Update flag is wrong",countDef.canModify());
/** * 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()); }
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()); }
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()); }
default boolean isAnyType() { return DOMUtil.XSD_ANYTYPE.equals(getTypeName()); }
radt.setRef(new ItemPathType(gossipDefinition.getName())); MappingType outbound = new MappingType(); radt.setOutbound(outbound); PrismProperty<String> property = gossipDefinition.instantiate(); property.addRealValue("q");
@Override public void validate(PrismPropertyDefinition<String> propDef, String name) throws Exception { assertNotNull("No definition for costCenter in user", propDef); assertEquals("Wrong costCenter displayOrder", (Integer)123, propDef.getDisplayOrder()); assertTrue(name+" is readable", !propDef.canRead()); assertTrue(name+" is creatable", !propDef.canAdd()); assertTrue(name+" is modifiable", !propDef.canModify()); } });
@Test public void test100FetchEmptyChanges() throws Exception { final String TEST_NAME = "test100FetchEmptyChanges"; TestUtil.displayTestTitle(this, TEST_NAME); OperationResult result = new OperationResult(this.getClass().getName() + "." + TEST_NAME); ObjectClassComplexTypeDefinition accountDefinition = resourceSchema.findDefaultObjectClassDefinition(ShadowKindType.ACCOUNT); // WHEN PrismProperty<Integer> lastToken = cc.fetchCurrentToken(accountDefinition, null, result); assertNotNull("No last sync token", lastToken); System.out.println("Property:"); System.out.println(lastToken.debugDump()); PrismPropertyDefinition<Integer> lastTokenDef = lastToken.getDefinition(); assertNotNull("No last sync token definition", lastTokenDef); assertEquals("Last sync token definition has wrong type", DOMUtil.XSD_INT, lastTokenDef.getTypeName()); assertTrue("Last sync token definition is NOT dynamic", lastTokenDef.isDynamic()); // WHEN List<Change> changes = cc.fetchChanges(accountDefinition, lastToken, null, null, result); AssertJUnit.assertEquals(0, changes.size()); }
assertEquals("Wrong additionalName displayName", "Middle Name", propDef.getDisplayName()); assertTrue("additionalName not readable", propDef.canRead()); }, PrismTestUtil.createPolyString("Jackie")); assertEquals("Wrong costCenter displayOrder", (Integer)123, propDef.getDisplayOrder()); assertTrue("costCenter not readable", propDef.canRead()); }); (Validator<PrismPropertyDefinition<String>>) (propDef, name) -> { assertNotNull("No definition for preferredLanguage in user", propDef); assertEquals("Wrong preferredLanguage displayName", "Language", propDef.getDisplayName()); assertTrue("preferredLanguage not readable", propDef.canRead()); PrismReferenceValue valueEnumerationRef = propDef.getValueEnumerationRef(); assertNotNull("No valueEnumerationRef for preferredLanguage", valueEnumerationRef); assertEquals("Wrong valueEnumerationRef OID for preferredLanguage", LOOKUP_LANGUAGES_OID, valueEnumerationRef.getOid()); assertTrue("Password not readable", propDef.canRead()); });
throw new SchemaException("No definition for property "+itemPath+" in "+focusDefinition+" as specified in object policy"); PropertyDelta<Object> propDelta = propDef.createEmptyDelta(itemPath); if (String.class.isAssignableFrom(propDef.getTypeClass())) { propDelta.setValueToReplace(prismContext.itemFactory().createPropertyValue(newValue, OriginType.USER_POLICY, null)); } else if (PolyString.class.isAssignableFrom(propDef.getTypeClass())) { propDelta.setValueToReplace(prismContext.itemFactory().createPropertyValue(new PolyString(newValue), OriginType.USER_POLICY, null)); } else { throw new SchemaException("Unsupported type "+propDef.getTypeName()+" for property "+itemPath+" in "+focusDefinition+" as specified in object policy, only string and polystring properties are supported for OID-bound mode"); PrismObjectDefinition<AH> focusDefinition = focusContext.getObjectDefinition(); PrismPropertyDefinition<PolyString> focusNameDef = focusDefinition.findPropertyDefinition(FocusType.F_NAME); PropertyDelta<PolyString> nameDelta = focusNameDef.createEmptyDelta(FocusType.F_NAME); nameDelta.setValueToReplace(prismContext.itemFactory().createPropertyValue(new PolyString(newValue), OriginType.USER_POLICY, null)); focusContext.swallowToSecondaryDelta(nameDelta);
itemDefinition.instantiate() : new PrismPropertyImpl<>(itemName, prismContext); if (itemDefinition != null && !itemDefinition.isMultiValue() && listNode.size() > 1) { throw new SchemaException("Attempt to store multiple values in single-valued property " + itemName);
assertEquals("Wrong additionalName displayName", "Middle Name", additionalNameDef.getDisplayName()); assertTrue("additionalName not readable", additionalNameDef.canRead()); PrismAsserts.assertEmphasized(additionalNameDef, false); assertEquals("Wrong costCenter displayOrder", (Integer)123, costCenterDef.getDisplayOrder()); assertTrue("costCenter not readable", costCenterDef.canRead()); PrismAsserts.assertEmphasized(costCenterDef, true); FormItemValidationType validationAnnotation = costCenterDef.getAnnotation(ItemRefinedDefinitionType.F_VALIDATION); assertNotNull("No validation annotation in costCenter", validationAnnotation); ExpressionType validationExpression = validationAnnotation.getServer().get(0).getExpression(); assertEquals("Wrong preferredLanguage displayName", "Language", preferredLanguageDef.getDisplayName()); assertTrue("preferredLanguage not readable", preferredLanguageDef.canRead()); PrismReferenceValue valueEnumerationRef = preferredLanguageDef.getValueEnumerationRef(); assertNotNull("No valueEnumerationRef for preferredLanguage", valueEnumerationRef); assertEquals("Wrong valueEnumerationRef OID for preferredLanguage", LOOKUP_LANGUAGES_OID, valueEnumerationRef.getOid()); assertEquals("Wrong timezone displayName", "FocusType.timezone", timezoneDef.getDisplayName()); assertTrue("timezone not readable", timezoneDef.canRead()); valueEnumerationRef = timezoneDef.getValueEnumerationRef(); assertNotNull("No valueEnumerationRef for timezone", valueEnumerationRef); assertEquals("Wrong valueEnumerationRef OID for timezone", SystemObjectsType.LOOKUP_TIMEZONES.value(), valueEnumerationRef.getOid()); assertEquals("Wrong deprecation flag for employeeType", false, employeeTypeDef.isDeprecated()); PrismPropertyDefinition<ProtectedStringType> passwdValDef = editDef.findPropertyDefinition(passwdValPath); assertNotNull("No definition for "+passwdValPath+" in user", passwdValDef); assertTrue("Password not readable", passwdValDef.canRead());
@Test public void testReindex() throws Exception { final String TEST_NAME = "testReindex"; TestUtil.displayTestTitle(TEST_NAME); OperationResult result = new OperationResult(TEST_NAME); PrismObject<UserType> user = prismContext.createObjectable(UserType.class) .name("unstable") .asPrismObject(); ItemPath UNSTABLE_PATH = ItemPath.create(UserType.F_EXTENSION, "unstable"); PrismPropertyDefinition<String> unstableDef = user.getDefinition().findPropertyDefinition(UNSTABLE_PATH); PrismProperty<String> unstable = unstableDef.instantiate(); unstable.setRealValue("hi"); user.addExtensionItem(unstable); String oid = repositoryService.addObject(user, null, result); // brutal hack -- may stop working in the future! unstableDef.toMutable().setIndexed(true); repositoryService.modifyObject(UserType.class, oid, emptySet(), getModifyOptions(), result); ObjectQuery query = prismContext.queryFor(UserType.class) .item(UNSTABLE_PATH).eq("hi") .build(); int count = repositoryService.countObjects(UserType.class, query, null, result); assertEquals("Wrong # of objects found", 1, count); }
protected void closeCase(String caseOid) throws ObjectNotFoundException, SchemaException, ObjectAlreadyExistsException { OperationResult result = new OperationResult("closeCase"); Collection modifications = new ArrayList<>(1); PrismPropertyDefinition<String> statePropertyDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(CaseType.class).findPropertyDefinition(CaseType.F_STATE); PropertyDelta<String> statusDelta = statePropertyDef.createEmptyDelta(CaseType.F_STATE); statusDelta.setRealValuesToReplace(SchemaConstants.CASE_STATE_CLOSED); modifications.add(statusDelta); PrismPropertyDefinition<String> outcomePropertyDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(CaseType.class).findPropertyDefinition(CaseType.F_OUTCOME); PropertyDelta<String> outcomeDelta = outcomePropertyDef.createEmptyDelta(CaseType.F_OUTCOME); outcomeDelta.setRealValuesToReplace(OperationResultStatusType.SUCCESS.value()); modifications.add(outcomeDelta); repositoryService.modifyObject(CaseType.class, caseOid, modifications, null, result); PrismObject<CaseType> caseClosed = repositoryService.getObject(CaseType.class, caseOid, null, result); display("Case closed", caseClosed); }