public static <T extends Objectable> ObjectDelta<T> diff(T oldObjectType, T newObjectType) throws SchemaException { PrismObject<T> oldObject = null; if (oldObjectType != null) { oldObject = oldObjectType.asPrismObject(); } PrismObject<T> newObject = null; if (newObjectType != null) { newObject = newObjectType.asPrismObject(); } return diff(oldObject, newObject); }
public static <T extends Objectable> ObjectDelta<T> diff(String oldXml, String newXml, Class<T> type, PrismContext prismContext) throws SchemaException { PrismObject<T> oldObject = null; if (oldXml != null) { oldObject = prismContext.parseObject(oldXml); } PrismObject<T> newObject = null; if (newXml != null) { newObject = prismContext.parseObject(newXml); } return diff(oldObject, newObject); }
public static <T extends Objectable> ObjectDelta<T> diff(File oldXmlFile, File newXmlFile, Class<T> type, PrismContext prismContext) throws SchemaException, IOException { PrismObject<T> oldObject = null; if (oldXmlFile != null) { oldObject = prismContext.parseObject(oldXmlFile); } PrismObject<T> newObject = null; if (newXmlFile != null) { newObject = prismContext.parseObject(newXmlFile); } return diff(oldObject, newObject); }
@Test public void testAddDelta() throws SchemaException, SAXException, IOException { System.out.println("===[ testAddDelta ]==="); // WHEN ObjectDelta<UserType> userDelta = DiffUtil.diff(null,new File(TEST_DIR, "user-jack-after.xml"), UserType.class, getPrismContext()); //THEN System.out.println("DELTA:"); System.out.println(userDelta.debugDump()); userDelta.checkConsistence(); assertEquals("Wrong delta OID", "deadbeef-c001-f00d-1111-222233330001", userDelta.getOid()); assertEquals("Wrong change type", ChangeType.ADD, userDelta.getChangeType()); // TODO }
@Test public void testUserReal() throws SchemaException, SAXException, IOException, JAXBException { System.out.println("===[ testUserReal ]==="); String userBeforeXml = MiscUtil.readFile(new File(TEST_DIR, "user-real-before.xml")); String userAfterXml = MiscUtil.readFile(new File(TEST_DIR, "user-real-after.xml")); // WHEN ObjectDelta<UserType> userDelta = DiffUtil.diff(userBeforeXml, userAfterXml, UserType.class, getPrismContext()); // THEN System.out.println("DELTA:"); System.out.println(userDelta.debugDump()); userDelta.checkConsistence(); assertEquals("Wrong delta OID", "2f9b9299-6f45-498f-bc8e-8d17c6b93b20", userDelta.getOid()); assertEquals("Wrong change type", ChangeType.MODIFY, userDelta.getChangeType()); Collection<? extends ItemDelta> modifications = userDelta.getModifications(); assertEquals("Unexpected number of modifications", 4, modifications.size()); PrismAsserts.assertPropertyReplace(userDelta, new ItemName(SchemaConstants.NS_C,"emailAddress"), "jack@blackpearl.com"); PrismAsserts.assertPropertyReplace(userDelta, new ItemName(SchemaConstants.NS_C,"locality"), new PolyString("World's End", "worlds end")); PrismAsserts.assertPropertyReplace(userDelta, SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS, ActivationStatusType.DISABLED); PrismAsserts.assertPropertyAdd(userDelta, new ItemName(SchemaConstants.NS_C,"organizationalUnit"), new PolyString("Brethren of the Coast", "brethren of the coast")); }
System.out.println(reparsedResource.debugDump()); ObjectDelta<ResourceType> diff = DiffUtil.diff(resource, reparsedResource); System.out.println("\nDiff:"); System.out.println(diff.debugDump());
private void roundTrip(File file) throws SchemaException, SAXException, IOException { // GIVEN PrismContext prismContext = constructInitializedPrismContext(); PrismObject<UserType> originalUser = prismContext.parseObject(file); System.out.println("Input parsed user:"); System.out.println(originalUser.debugDump()); assertNotNull(originalUser); // precondition assertUserJack(originalUser, true); // WHEN // We need to serialize with composite objects during roundtrip, otherwise the result will not be equal String userXml = prismContext.serializerFor(getOutputFormat()).serialize(originalUser); // THEN System.out.println("Serialized user:"); System.out.println(userXml); assertNotNull(userXml); validateXml(userXml, prismContext); // WHEN PrismObject<UserType> parsedUser = prismContext.parseObject(userXml); System.out.println("Re-parsed user:"); System.out.println(parsedUser.debugDump()); assertNotNull(parsedUser); assertUserJack(parsedUser, true); ObjectDelta<UserType> diff = DiffUtil.diff(originalUser, parsedUser); System.out.println("Diff:"); System.out.println(diff.debugDump()); assertTrue("Diff: "+diff, diff.isEmpty()); assertTrue("Users not equal", originalUser.equals(parsedUser)); }
ObjectDelta<UserType> diff = DiffUtil.diff(user, reparsedUser); System.out.println("\nDiff:"); System.out.println(diff.debugDump()); PrismObject accountRefObjRe = findObjectFromAccountRef(reparsedUser); ObjectDelta<UserType> accountRefObjDiff = DiffUtil.diff(accountRefObjOrig, accountRefObjRe); System.out.println("\naccountRef object diff:"); System.out.println(accountRefObjDiff.debugDump());
ObjectDelta<TaskType> diffDelta = DiffUtil.diff(TASK_BEFORE_FILE, new File(TEST_DIR, "task-after.xml"), TaskType.class, getPrismContext()); taskAfter.checkConsistence(); ObjectDelta<TaskType> roundTripDelta = DiffUtil.diff(taskPatch, taskAfter); System.out.println("roundtrip DELTA:"); System.out.println(roundTripDelta.debugDump());
PrismObject<ShadowType> newObject = getShadowAfter(oldObject); ObjectDelta<ShadowType> diffDelta = DiffUtil.diff(oldObject, newObject); shadowAfter.checkConsistence(); ObjectDelta<ShadowType> roundTripDelta = DiffUtil.diff(shadow, shadowAfter); System.out.println("roundtrip DELTA:"); System.out.println(roundTripDelta.debugDump());
ObjectDelta<UserType> roundTripDelta = DiffUtil.diff(userBefore, userAfter); System.out.println("roundtrip DELTA:"); System.out.println(roundTripDelta.debugDump());
private void assertDowngrade(PrismObject<ResourceType> dummyResourceModelBefore) throws ObjectNotFoundException, SchemaException, SecurityViolationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException { Task task = taskManager.createTaskInstance(TestConnectorDummyFake.class.getName() + ".assertDowngrade"); OperationResult result = task.getResult(); // Check if the changes went well in the repo PrismObject<ResourceType> repoResource = repositoryService.getObject(ResourceType.class, RESOURCE_DUMMY_FAKE_OID, null, result); display("Upgraded fake resource (repo)", repoResource); assertNotNull("Null fake resource after getObject (repo)", repoResource); assertEquals("Oooops. The OID of fake resource mysteriously changed. Call the police! (repo)", RESOURCE_DUMMY_FAKE_OID, repoResource.getOid()); assertEquals("Wrong connectorRef in fake resource (repo)", connectorDummyFakeOid, repoResource.asObjectable().getConnectorRef().getOid()); // Check if resource view of the model has changed as well resourceDummyFake = modelService.getObject(ResourceType.class, RESOURCE_DUMMY_FAKE_OID, null, task, result); display("Upgraded fake resource (model)", resourceDummyFake); assertNotNull("Null fake resource after getObject (model)", resourceDummyFake); assertEquals("Oooops. The OID of fake resource mysteriously changed. Call the police! (model)", RESOURCE_DUMMY_FAKE_OID, resourceDummyFake.getOid()); assertEquals("Wrong connectorRef in fake resource (model)", connectorDummyFakeOid, resourceDummyFake.asObjectable().getConnectorRef().getOid()); // Check if the other resource is still untouched PrismObject<ResourceType> dummyResourceModelAfter = modelService.getObject(ResourceType.class, RESOURCE_DUMMY_OID, null, task, result); dummyResourceModelBefore.asObjectable().setFetchResult(null); dummyResourceModelAfter.asObjectable().setFetchResult(null); ObjectDelta<ResourceType> dummyResourceDiff = DiffUtil.diff(dummyResourceModelBefore, dummyResourceModelAfter); display("Dummy resource diff", dummyResourceDiff); assertTrue("Ha! Someone touched the other resource! Off with his head! diff:"+dummyResourceDiff, dummyResourceDiff.isEmpty()); testResources(3,1); }
private void assertUpgrade(PrismObject<ResourceType> dummyResourceModelBefore) throws ObjectNotFoundException, SchemaException, SecurityViolationException, ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException, ConfigurationException, PolicyViolationException { Task task = taskManager.createTaskInstance(TestConnectorDummyFake.class.getName() + ".assertUpgrade"); OperationResult result = task.getResult(); // Check if the changes went well in the repo PrismObject<ResourceType> repoResource = repositoryService.getObject(ResourceType.class, RESOURCE_DUMMY_FAKE_OID, null, result); display("Upgraded fake resource (repo)", repoResource); assertNotNull("Null fake resource after getObject (repo)", repoResource); assertEquals("Oooops. The OID of fake resource mysteriously changed. Call the police! (repo)", RESOURCE_DUMMY_FAKE_OID, repoResource.getOid()); assertEquals("Wrong connectorRef in fake resource (repo)", connectorDummyOid, repoResource.asObjectable().getConnectorRef().getOid()); // Check if resource view of the model has changed as well resourceDummyFake = modelService.getObject(ResourceType.class, RESOURCE_DUMMY_FAKE_OID, null, task, result); display("Upgraded fake resource (model)", resourceDummyFake); Element resourceDummyFakeSchemaElement = ResourceTypeUtil.getResourceXsdSchema(resourceDummyFake); display("Upgraded fake resource schema (model)", DOMUtil.serializeDOMToString(resourceDummyFakeSchemaElement)); assertNotNull("Null fake resource after getObject (model)", resourceDummyFake); assertEquals("Oooops. The OID of fake resource mysteriously changed. Call the police! (model)", RESOURCE_DUMMY_FAKE_OID, resourceDummyFake.getOid()); assertEquals("Wrong connectorRef in fake resource (model)", connectorDummyOid, resourceDummyFake.asObjectable().getConnectorRef().getOid()); // Check if the other resource is still untouched PrismObject<ResourceType> dummyResourceModelAfter = modelService.getObject(ResourceType.class, RESOURCE_DUMMY_OID, null, task, result); dummyResourceModelBefore.asObjectable().setFetchResult(null); dummyResourceModelAfter.asObjectable().setFetchResult(null); ObjectDelta<ResourceType> dummyResourceDiff = DiffUtil.diff(dummyResourceModelBefore, dummyResourceModelAfter); display("Dummy resource diff", dummyResourceDiff); assertTrue("Ha! Someone touched the other resource! Off with his head! diff:"+dummyResourceDiff, dummyResourceDiff.isEmpty()); testResources(3,3); }
ObjectDelta<ResourceType> dummyResourceDiff = DiffUtil.diff(resource, resourceAgain); display("Dummy resource diff", dummyResourceDiff); assertTrue("The resource read again is not the same as the original. diff:"+dummyResourceDiff, dummyResourceDiff.isEmpty());
ObjectDelta<ResourceType> dummyResourceDiff = DiffUtil.diff(resourceStaticSchema, resourceAgain); display("Dummy resource diff", dummyResourceDiff); assertTrue("The resource read again is not the same as the original. diff:"+dummyResourceDiff, dummyResourceDiff.isEmpty());