public static <T> PropertyDelta<T> createModificationDeleteProperty(ItemPath propertyPath, PrismObjectDefinition<?> objectDefinition, T... propertyValues) { PrismPropertyDefinition<T> propertyDefinition = objectDefinition.findPropertyDefinition(propertyPath); return createModificationDeleteProperty(propertyPath, propertyDefinition, propertyValues); }
public static <T> PropertyDelta<T> createModificationAddProperty(ItemPath propertyPath, PrismObjectDefinition<?> objectDefinition, T... propertyValues) { PrismPropertyDefinition<T> propertyDefinition = objectDefinition.findPropertyDefinition(propertyPath); return createModificationAddProperty(propertyPath, propertyDefinition, propertyValues); }
private PrismPropertyDefinition<Integer> getFailedLoginsDefinition() { if (failedLoginsDefinition == null) { PrismObjectDefinition<UserType> userDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(UserType.class); failedLoginsDefinition = userDef.findPropertyDefinition(SchemaConstants.PATH_CREDENTIALS_PASSWORD_FAILED_LOGINS); } return failedLoginsDefinition; }
public static <O extends Objectable,T> PropertyDelta<T> createDelta(ItemPath propertyPath, PrismObjectDefinition<O> objectDefinition) { PrismPropertyDefinition propDef = objectDefinition.findPropertyDefinition(propertyPath); return new PropertyDeltaImpl<T>(propertyPath, propDef, objectDefinition.getPrismContext()); // hoping the prismContext is there }
/** * Create delta that deletes all values of the specified property. */ public static <O extends Objectable> PropertyDelta createReplaceEmptyDelta(PrismObjectDefinition<O> objectDefinition, ItemPath propertyPath) { PrismPropertyDefinition propertyDefinition = objectDefinition.findPropertyDefinition(propertyPath); if (propertyDefinition == null) { throw new IllegalArgumentException("No definition for "+propertyPath+" in "+objectDefinition); } PropertyDelta delta = new PropertyDeltaImpl(propertyPath, propertyDefinition, objectDefinition.getPrismContext()); // hoping the prismContext is there delta.setValuesToReplace(new ArrayList<PrismPropertyValue>()); return delta; }
public static <T> PropertyDelta<T> createModificationReplaceProperty(ItemPath propertyPath, PrismObjectDefinition<?> objectDefinition, Collection<T> propertyValues) { PrismPropertyDefinition propDef = objectDefinition.findPropertyDefinition(propertyPath); PropertyDelta<T> propertyDelta = new PropertyDeltaImpl<T>(propertyPath, propDef, objectDefinition.getPrismContext()); // hoping the prismContext is there Collection<PrismPropertyValue<T>> pValues = new ArrayList<>(propertyValues.size()); for (T val: propertyValues) { pValues.add(new PrismPropertyValueImpl<>(val)); } propertyDelta.setValuesToReplace(pValues); return propertyDelta; }
public static <O extends Objectable,T> PropertyDelta<T> createDelta(ItemPath propertyPath, Class<O> compileTimeClass, PrismContext prismContext) { PrismObjectDefinition<O> objectDefinition = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(compileTimeClass); PrismPropertyDefinition propDef = objectDefinition.findPropertyDefinition(propertyPath); return new PropertyDeltaImpl<T>(propertyPath, propDef, prismContext); }
/** * Convenience method for quick creation of object deltas that replace a single object property. This is used quite often * to justify a separate method. */ public static <T> PropertyDelta<T> createModificationReplaceProperty(ItemPath propertyPath, PrismObjectDefinition<?> objectDefinition, T... propertyValues) { PrismPropertyDefinition propDef = objectDefinition.findPropertyDefinition(propertyPath); PropertyDelta<T> propertyDelta = new PropertyDeltaImpl<T>(propertyPath, propDef, objectDefinition.getPrismContext()); // hoping the prismContext is there Collection<PrismPropertyValue<T>> pValues = new ArrayList<>(propertyValues.length); for (T val: propertyValues) { pValues.add(new PrismPropertyValueImpl<>(val)); } propertyDelta.setValuesToReplace(pValues); return propertyDelta; }
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); }
public <X> PropertyDelta<X> createPropertyModification(ItemPath path) { PrismObjectDefinition<O> objDef = getPrismContext().getSchemaRegistry().findObjectDefinitionByCompileTimeClass(getObjectTypeClass()); PrismPropertyDefinition<X> propDef = objDef.findPropertyDefinition(path); return createPropertyModification(path, propDef); }
private <T> PropertyDelta<T> createShadowPropertyReplaceDelta(PrismObject<ShadowType> repoShadow, QName propName, T value) { PrismPropertyDefinition<T> def = repoShadow.getDefinition().findPropertyDefinition(ItemName.fromQName(propName)); PropertyDelta<T> delta = def.createEmptyDelta(ItemPath.create(propName)); if (value == null) { delta.setValueToReplace(); } else { delta.setRealValuesToReplace(value); } return delta; }
private void addModifyMetadataDeltas(PrismObject<ShadowType> repoShadow, Collection<ItemDelta> shadowChanges) { PropertyDelta<XMLGregorianCalendar> modifyTimestampDelta = ItemDeltaCollectionsUtil .findPropertyDelta(shadowChanges, SchemaConstants.PATH_METADATA_MODIFY_TIMESTAMP); if (modifyTimestampDelta != null) { return; } if (LOGGER.isDebugEnabled()) { LOGGER.debug("Metadata not found, adding minimal metadata. Modifications:\n{}", DebugUtil.debugDump(shadowChanges, 1)); } PrismPropertyDefinition<XMLGregorianCalendar> def = repoShadow.getDefinition().findPropertyDefinition(SchemaConstants.PATH_METADATA_MODIFY_TIMESTAMP); modifyTimestampDelta = def.createEmptyDelta(SchemaConstants.PATH_METADATA_MODIFY_TIMESTAMP); modifyTimestampDelta.setRealValuesToReplace(clock.currentTimeXMLGregorianCalendar()); shadowChanges.add(modifyTimestampDelta); } }
@Test public void test310LessThanItem() throws Exception { PrismObjectDefinition userDef = getSchemaRegistry().findObjectDefinitionByCompileTimeClass(UserType.class); PrismPropertyDefinition nameDef = userDef.findPropertyDefinition(UserType.F_NAME); PrismPropertyDefinition localityDef = userDef.findPropertyDefinition(UserType.F_LOCALITY); ObjectQuery actual = getPrismContext().queryFor(UserType.class) .item(UserType.F_LOCALITY, localityDef) .le() .item(UserType.F_NAME, nameDef) .build(); ObjectQuery expected = ObjectQueryImpl.createObjectQuery( LessFilterImpl.createLess(UserType.F_LOCALITY, localityDef, null, UserType.F_NAME, nameDef, true) ); compare(actual, expected); }
@Test public void test500EnumerationExtension() throws Exception { final String TEST_NAME = "test500EnumerationExtension"; displayTestTitle(TEST_NAME); PrismObjectDefinition<UserType> userDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(UserType.class); PrismPropertyDefinition<String> markDef = userDef.findPropertyDefinition(ItemPath.create(UserType.F_EXTENSION, PIRACY_MARK)); // WHEN TestUtil.assertSetEquals("Wrong allowedValues in mark", MiscUtil.getValuesFromDisplayableValues(markDef.getAllowedValues()), "pegLeg","noEye","hook","tatoo","scar","bravery"); for (DisplayableValue<String> disp: markDef.getAllowedValues()) { if (disp.getValue().equals("pegLeg")) { assertEquals("Wrong pegLeg label", "Peg Leg", disp.getLabel()); } } }
@Test public void test105ModifyAddNonTolerantAttribute() throws Exception { final String TEST_NAME = "test105ModifyAddNonTolerantAttribute"; displayTestTitle(TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestTolerantAttributes.class.getName() + ".test105modifyAddNonTolerantAttribute"); OperationResult result = task.getResult(); assumeAssignmentPolicy(AssignmentPolicyEnforcementType.POSITIVE); ObjectDelta<ShadowType> userDelta = prismContext.deltaFactory().object() .createEmptyModifyDelta(ShadowType.class, accountOid); ItemPath drinkItemPath = ItemPath.create(ShadowType.F_ATTRIBUTES, new QName(RESOURCE_DUMMY_BLACK_NAMESPACE, "drink")); assertNotNull("null definition for drink attribute ", accountDefinition.findPropertyDefinition(drinkItemPath)); PropertyDelta propertyDelta = prismContext.deltaFactory().property().createModificationAddProperty(drinkItemPath, accountDefinition.findPropertyDefinition(drinkItemPath), "This should be ignored"); userDelta.addModification(propertyDelta); Collection<ObjectDelta<? extends ObjectType>> deltas = (Collection)MiscUtil.createCollection(userDelta); // WHEN displayWhen(TEST_NAME); modelService.executeChanges(deltas, ModelExecuteOptions.createReconcile(), task, result); // THEN displayThen(TEST_NAME); assertPartialError(result); }
@Test public void testCommonSchemaAccountType() throws SchemaException, SAXException, IOException { MidPointPrismContextFactory factory = getContextFactory(); PrismContext context = factory.createInitializedPrismContext(); SchemaRegistry schemaRegistry = context.getSchemaRegistry(); PrismObjectDefinition<ShadowType> accountDef = schemaRegistry.findObjectDefinitionByCompileTimeClass(ShadowType.class); assertNotNull("No account definition", accountDef); System.out.println("testCommonSchemaAccountType:"); System.out.println(accountDef.debugDump()); PrismPropertyDefinition nameDef = accountDef.findPropertyDefinition(ShadowType.F_NAME); assertNotNull("No name definition", nameDef); PrismContainerDefinition extensionDef = accountDef.findContainerDefinition(ShadowType.F_EXTENSION); assertNotNull("No 'extension' definition", extensionDef); assertTrue("'extension' definition is not marked as runtime", extensionDef.isRuntimeSchema()); PrismContainerDefinition attributesDef = accountDef.findContainerDefinition(ShadowType.F_ATTRIBUTES); assertNotNull("No 'attributes' definition", attributesDef); assertTrue("'attributes' definition is not marked as runtime", attributesDef.isRuntimeSchema()); }
@Test public void testRoleType() throws Exception { MidPointPrismContextFactory factory = getContextFactory(); PrismContext context = factory.createInitializedPrismContext(); SchemaRegistry schemaRegistry = context.getSchemaRegistry(); PrismObjectDefinition<RoleType> roleDefinition = schemaRegistry.findObjectDefinitionByCompileTimeClass(RoleType.class); assertNotNull("No role definition", roleDefinition); assertFalse("Role definition is marked as runtime", roleDefinition.isRuntimeSchema()); PrismPropertyDefinition nameDef = roleDefinition.findPropertyDefinition(ObjectType.F_NAME); assertNotNull("No name definition", nameDef); PrismContainerDefinition extensionDef = roleDefinition.findContainerDefinition(ObjectType.F_EXTENSION); assertNotNull("No 'extension' definition", extensionDef); assertTrue("Extension definition is NOT marked as runtime", extensionDef.isRuntimeSchema()); PrismPropertyDefinition identifierDef = roleDefinition.findPropertyDefinition(RoleType.F_IDENTIFIER); assertNotNull("No identifier definition", identifierDef); // Just make sure this does not end with NPE or stack overflow PrismObjectDefinition<RoleType> shallowClone = roleDefinition.clone(); PrismObjectDefinition<RoleType> deepClone = roleDefinition.deepClone(false, null); PrismObjectDefinition<RoleType> ultraDeepClone = roleDefinition.deepClone(true, null); }
protected boolean isActivationStatusModifyDelta(ObjectDeltaType delta, ActivationStatusType expected) throws SchemaException { if (delta.getChangeType() != ChangeTypeType.MODIFY) { return false; } for (ItemDeltaType itemDelta: delta.getItemDelta()) { ItemPath deltaPath = itemDelta.getPath().getItemPath(); if (SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS.equivalent(deltaPath)) { List<RawType> value = itemDelta.getValue(); PrismProperty<ActivationStatusType> parsedItem = (PrismProperty<ActivationStatusType>)(Item) value.get(0).getParsedItem(getUserDefinition().findPropertyDefinition(SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS)); ActivationStatusType status = parsedItem.getRealValue(); display("Delta status " + status, itemDelta); if (expected.equals(status)) { return true; } } } return false; }
@Test public void test250EditSchemaRole() throws Exception { final String TEST_NAME="test250EditSchemaRole"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObjectDefinition<RoleType> roleDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(RoleType.class); PrismObject<RoleType> role = roleDef.instantiate(); // WHEN displayWhen(TEST_NAME); PrismObjectDefinition<RoleType> editDef = getEditObjectDefinition(role); // THEN displayThen(TEST_NAME); // TODO PrismPropertyDefinition requestableDef = editDef.findPropertyDefinition(RoleType.F_REQUESTABLE); assertNotNull("No definition for requestable in role", requestableDef); assertEquals("Wrong requestable displayName", "Can request", requestableDef.getDisplayName()); assertSteadyResources(); }
@Test public void test502EnumerationStoreGood() throws Exception { final String TEST_NAME = "test502EnumerationStoreGood"; displayTestTitle(TEST_NAME); // GIVEN PrismObjectDefinition<UserType> userDef = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(UserType.class); PrismPropertyDefinition<String> markDef = userDef.findPropertyDefinition(ItemPath.create(UserType.F_EXTENSION, PIRACY_MARK)); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); dummyAuditService.clear(); // WHEN modifyObjectReplaceProperty(UserType.class, USER_GUYBRUSH_OID, ItemPath.create(UserType.F_EXTENSION, PIRACY_MARK), task, result, "bravery"); // THEN displayThen(TEST_NAME); assertSuccess(result); PrismObject<UserType> user = getUser(USER_GUYBRUSH_OID); PrismProperty<String> markProp = user.findProperty(ItemPath.create(UserType.F_EXTENSION, PIRACY_MARK)); assertEquals("Bad mark", "bravery", markProp.getRealValue()); }