public static <T extends Objectable> Collection<? extends ItemDelta> toModifications(ObjectModificationType objectModification, PrismObjectDefinition<T> objDef) throws SchemaException { return toModifications(objectModification.getItemDelta(), objDef); }
private Collection<ItemDelta<?, ?>> parseDeltas(List<ItemDeltaType> deltas) { try { //noinspection unchecked return (Collection<ItemDelta<?, ?>>) DeltaConvertor.toModifications(deltas, taskDefinition); } catch (SchemaException e) { throw new SystemException("Couldn't parse task item deltas: " + e.getMessage(), e); } }
public static <T extends Objectable> Collection<? extends ItemDelta> toModifications(ObjectModificationType objectModification, Class<T> type, PrismContext prismContext) throws SchemaException { Validate.notNull(prismContext, "No prismContext in DeltaConvertor.toModifications call"); PrismObjectDefinition<T> objectDefinition = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(type); if (objectDefinition == null) { throw new SchemaException("No object definition for class "+type); } return toModifications(objectModification, objectDefinition); }
private void applyDeltas(TaskType worker, List<ItemDeltaType> deltas) throws SchemaException { Collection<? extends ItemDelta> itemDeltas = DeltaConvertor.toModifications(deltas, worker.asPrismObject().getDefinition()); ItemDeltaCollectionsUtil.applyTo(itemDeltas, worker.asPrismContainerValue()); }
@PATCH @Path("/{type}/{oid}") @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, RestServiceUtil.APPLICATION_YAML}) public Response modifyObjectPatch(@PathParam("type") String type, @PathParam("oid") String oid, ObjectModificationType modificationType, @QueryParam("options") List<String> options, @Context MessageContext mc) { LOGGER.debug("model rest service for modify operation start"); Task task = RestServiceUtil.initRequest(mc); OperationResult parentResult = task.getResult().createSubresult(OPERATION_MODIFY_OBJECT); Class clazz = ObjectTypes.getClassFromRestType(type); Response response; try { ModelExecuteOptions modelExecuteOptions = ModelExecuteOptions.fromRestOptions(options); Collection<? extends ItemDelta> modifications = DeltaConvertor.toModifications(modificationType, clazz, prismContext); model.modifyObject(clazz, oid, modifications, modelExecuteOptions, task, parentResult); // response = Response.noContent().build(); response = RestServiceUtil.createResponse(Response.Status.NO_CONTENT, parentResult); } catch (Exception ex) { parentResult.recordFatalError("Could not modify object. " + ex.getMessage(), ex); response = RestServiceUtil.handleException(parentResult, ex); } parentResult.computeStatus(); finishRequest(task); return response; }
@Test(expectedExceptions = ObjectNotFoundException.class) public void test020ModifyNotExistingUser() throws Exception { final String TEST_NAME = "test020ModifyNotExistingUser"; TestUtil.displayTestTitle(TEST_NAME); ObjectModificationType modification = PrismTestUtil.parseAtomicValue( MODIFY_USER_ADD_LINK, ObjectModificationType.COMPLEX_TYPE); Collection<? extends ItemDelta> deltas = DeltaConvertor.toModifications(modification, UserType.class, prismContext); OperationResult result = new OperationResult("MODIFY"); repositoryService.modifyObject(UserType.class, "1234", deltas, getModifyOptions(), result); }
@Test public void testAccountRefDelta() throws Exception { System.out.println("===[ testAccountRefDelta ]===="); // GIVEN ObjectModificationType objectChange = new ObjectModificationType(); objectChange.setOid("12345"); ItemDeltaType modificationDeleteAccountRef = new ItemDeltaType(); modificationDeleteAccountRef.setModificationType(ModificationTypeType.DELETE); ObjectReferenceType accountRefToDelete = new ObjectReferenceType(); accountRefToDelete.setOid("54321"); PrismContext prismContext = getPrismContext(); RawType modificationValue = new RawType(prismContext.xnodeSerializer().root(new QName("dummy")).serializeRealValue(accountRefToDelete).getSubnode(), prismContext); modificationDeleteAccountRef.getValue().add(modificationValue); objectChange.getItemDelta().add(modificationDeleteAccountRef); ItemPathType itemPathType = new ItemPathType(UserType.F_LINK_REF); modificationDeleteAccountRef.setPath(itemPathType); PrismObjectDefinition<UserType> objDef = PrismTestUtil.getObjectDefinition(UserType.class); // WHEN Collection<? extends ItemDelta> modifications = DeltaConvertor.toModifications(objectChange, objDef); // THEN assertNotNull("Null modifications", modifications); assertFalse("Empty modifications", modifications.isEmpty()); // TODO: more asserts }
delta.setObjectToAdd(shadowToAdd); } else { Collection<? extends ItemDelta> modifications = DeltaConvertor.toModifications(deltaType.getItemDelta(), prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(ShadowType.class)); delta.getModifications().addAll(modifications);
@Test(expectedExceptions = ObjectAlreadyExistsException.class) public void test010ModifyWithExistingName() throws Exception { final String TEST_NAME = "test010ModifyWithExistingName"; TestUtil.displayTestTitle(TEST_NAME); OperationResult result = new OperationResult("MODIFY"); File userFile = new File(TEST_DIR, "modify-user.xml"); //add first user PrismObject<UserType> user = prismContext.parseObject(userFile); user.setOid(null); user.asObjectable().setName(PolyStringType.fromOrig("existingName")); repositoryService.addObject(user, null, result); //add second user user = prismContext.parseObject(userFile); user.setOid(null); user.asObjectable().setName(PolyStringType.fromOrig("otherName")); String oid = repositoryService.addObject(user, null, result); //modify second user name to "existingName" ObjectModificationType modification = PrismTestUtil.parseAtomicValue( new File(TEST_DIR, "change-name.xml"), ObjectModificationType.COMPLEX_TYPE); modification.setOid(oid); Collection<? extends ItemDelta> deltas = DeltaConvertor.toModifications(modification, UserType.class, prismContext); repositoryService.modifyObject(UserType.class, oid, deltas, result); }
@Test public void test030ModifyUserOnNonExistingAccountTest() throws Exception { final String TEST_NAME = "test030ModifyUserOnNonExistingAccountTest"; TestUtil.displayTestTitle(TEST_NAME); OperationResult result = new OperationResult("MODIFY"); //add user File userFile = new File(TEST_DIR, "modify-user.xml"); PrismObject<UserType> user = prismContext.parseObject(userFile); user.setOid(null); user.asObjectable().setName(new PolyStringType("non-existing-account-user")); String oid = repositoryService.addObject(user, null, result); PrismObject<UserType> userOld = repositoryService.getObject(UserType.class, oid, null, result); ObjectModificationType modification = PrismTestUtil.parseAtomicValue( new File(TEST_DIR, "change-add-non-existing.xml"), ObjectModificationType.COMPLEX_TYPE); Collection<? extends ItemDelta> deltas = DeltaConvertor.toModifications(modification, UserType.class, prismContext); repositoryService.modifyObject(UserType.class, oid, deltas, getModifyOptions(), result); ItemDeltaCollectionsUtil.applyTo(deltas, userOld); PrismObject<UserType> userNew = repositoryService.getObject(UserType.class, oid, null, result); ObjectDelta<UserType> delta = userOld.diff(userNew); LOGGER.debug("Modify diff \n{}", delta.debugDump(3)); AssertJUnit.assertTrue("Modify was unsuccessful, diff size: " + delta.getModifications().size(), delta.isEmpty()); AssertJUnit.assertTrue("User is not equivalent.", userOld.equivalent(userNew)); }
@Test public void test031ModifyUserOnExistingAccountTest() throws Exception { final String TEST_NAME = "test031ModifyUserOnExistingAccountTest"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN OperationResult result = new OperationResult(TEST_NAME); //add account PrismObject<ShadowType> account = prismContext.parseObject(ACCOUNT_FILE); repositoryService.addObject(account, null, result); //add user File userFile = new File(TEST_DIR, "modify-user.xml"); PrismObject<UserType> user = prismContext.parseObject(userFile); String userOid = user.getOid(); String oid = repositoryService.addObject(user, null, result); assertEquals(userOid, oid); PrismObject<UserType> userOld = repositoryService.getObject(UserType.class, oid, null, result); ObjectModificationType modification = PrismTestUtil.parseAtomicValue( MODIFY_USER_ADD_LINK, ObjectModificationType.COMPLEX_TYPE); Collection<? extends ItemDelta> deltas = DeltaConvertor.toModifications(modification, UserType.class, prismContext); // WHEN repositoryService.modifyObject(UserType.class, oid, deltas, getModifyOptions(), result); ItemDeltaCollectionsUtil.applyTo(deltas, userOld); PrismObject<UserType> userNew = repositoryService.getObject(UserType.class, oid, null, result); ObjectDelta<UserType> delta = userOld.diff(userNew); LOGGER.debug("Modify diff \n{}", delta.debugDump(3)); AssertJUnit.assertTrue("Modify was unsuccessful, diff size: " + delta.getModifications().size(), delta.isEmpty()); AssertJUnit.assertTrue("User is not equivalent.", userOld.equivalent(userNew)); }
ObjectModificationType.COMPLEX_TYPE); modification.setOid(oid); Collection<? extends ItemDelta> deltas = DeltaConvertor.toModifications(modification, RoleType.class, prismContext);
Collection<? extends ItemDelta> modifications = DeltaConvertor.toModifications(changeAddRoleCaptain.getItemDelta(), getUserDefinition()); repositoryService.modifyObject(UserType.class, changeAddRoleCaptain.getOid(), modifications, result);