/* * Copyright (c) 2010-2016 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.prism; import static org.testng.AssertJUnit.assertTrue; import static com.evolveum.midpoint.prism.PrismInternalTestUtil.*; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import java.io.IOException; import java.util.Collection; import javax.xml.datatype.XMLGregorianCalendar; import com.evolveum.midpoint.prism.delta.*; import org.testng.AssertJUnit; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; import org.xml.sax.SAXException; import com.evolveum.midpoint.prism.foo.ActivationType; import com.evolveum.midpoint.prism.foo.AssignmentType; import com.evolveum.midpoint.prism.foo.UserType; import com.evolveum.midpoint.prism.path.IdItemPathSegment; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.path.NameItemPathSegment; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.prism.util.PrismAsserts; import com.evolveum.midpoint.prism.util.PrismTestUtil; import com.evolveum.midpoint.prism.xml.XmlTypeConverter; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.util.PrettyPrinter; import com.evolveum.midpoint.util.exception.SchemaException; /** * @author semancik * */ public class TestDelta { private static final String USER_FOO_OID = "01234567"; @BeforeSuite public void setupDebug() throws SchemaException, SAXException, IOException { PrettyPrinter.setDefaultNamespacePrefix(DEFAULT_NAMESPACE_PREFIX); PrismTestUtil.resetPrismContext(new PrismInternalTestUtil()); } @Test public void testDeltaPaths() throws Exception { System.out.println("\n\n===[ testDeltaPaths ]===\n"); PrismPropertyDefinition<String> descDefinition = new PrismPropertyDefinitionImpl<>(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(descDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); assertPath(delta1, new ItemPath(UserType.F_DESCRIPTION)); PrismReferenceDefinitionImpl referenceDefinition = new PrismReferenceDefinitionImpl(UserType.F_PARENT_ORG_REF, OBJECT_REFERENCE_TYPE_QNAME, PrismTestUtil.getPrismContext()); ReferenceDelta delta2 = new ReferenceDelta(referenceDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismReferenceValue("oid1")); assertPath(delta2, new ItemPath(UserType.F_PARENT_ORG_REF)); PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> assObjDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); ItemDelta<?,?> assDelta1 = assObjDelta1.getModifications().iterator().next(); assertPath(assDelta1, new ItemPath(UserType.F_ASSIGNMENT)); PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> assObjDelta2 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue2); ItemDelta<?,?> assDelta2 = assObjDelta2.getModifications().iterator().next(); assertPath(assDelta2, new ItemPath(UserType.F_ASSIGNMENT)); PrismPropertyDefinition<String> assDescDefinition = new PrismPropertyDefinitionImpl<>(AssignmentType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); ItemPath itemPathAssDescNoId = new ItemPath(UserType.F_ASSIGNMENT, AssignmentType.F_DESCRIPTION); PropertyDelta<String> propDelta2 = new PropertyDelta<String>(itemPathAssDescNoId, descDefinition, PrismTestUtil.getPrismContext()); assertPath(propDelta2, itemPathAssDescNoId); ItemPath itemPathAssDesc1Id = new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), new IdItemPathSegment(USER_ASSIGNMENT_1_ID), new NameItemPathSegment(AssignmentType.F_DESCRIPTION)); PropertyDelta<String> propDelta3 = new PropertyDelta<String>(itemPathAssDesc1Id, descDefinition, PrismTestUtil.getPrismContext()); assertPath(propDelta3, itemPathAssDesc1Id); } private void assertPath(ItemDelta<?,?> delta, ItemPath expectedPath) { assertEquals("Wrong path in "+delta, expectedPath, delta.getPath()); } @Test public void testPropertyDeltaMerge01() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge01 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertNoReplace(delta1); PrismAsserts.assertAdd(delta1, "add1", "add2"); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge02() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge02 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToDelete(new PrismPropertyValue<String>("del1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToDelete(new PrismPropertyValue<String>("del2")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertNoReplace(delta1); PrismAsserts.assertNoAdd(delta1); PrismAsserts.assertDelete(delta1, "del1", "del2"); } @Test public void testPropertyDeltaMerge03() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge03 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); delta1.addValueToDelete(new PrismPropertyValue<String>("del1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); delta2.addValueToDelete(new PrismPropertyValue<String>("del2")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertNoReplace(delta1); PrismAsserts.assertAdd(delta1, "add1", "add2"); PrismAsserts.assertDelete(delta1, "del1", "del2"); } @Test public void testPropertyDeltaMerge04() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge04 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); delta1.addValueToDelete(new PrismPropertyValue<String>("del1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); delta2.addValueToDelete(new PrismPropertyValue<String>("add1")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertNoReplace(delta1); PrismAsserts.assertAdd(delta1, "add2"); PrismAsserts.assertDelete(delta1, "del1"); } @Test public void testPropertyDeltaMerge05() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge05 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); delta2.addValueToDelete(new PrismPropertyValue<String>("add1")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertNoReplace(delta1); PrismAsserts.assertAdd(delta1, "add2"); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge06() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge06 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); delta1.addValueToDelete(new PrismPropertyValue<String>("del1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("del1")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertNoReplace(delta1); PrismAsserts.assertAdd(delta1, "add1"); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge10() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge10 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.setValuesToReplace(new PrismPropertyValue<String>("r1x"), new PrismPropertyValue<String>("r1y")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertReplace(delta1, "r1x", "r1y", "add2"); PrismAsserts.assertNoAdd(delta1); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge11() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge11 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.setValuesToReplace(new PrismPropertyValue<String>("r1x"), new PrismPropertyValue<String>("r1y")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); delta2.addValueToDelete(new PrismPropertyValue<String>("r1y")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertReplace(delta1, "r1x", "add2"); PrismAsserts.assertNoAdd(delta1); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge12() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge12 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.setValuesToReplace(new PrismPropertyValue<String>("r1x"), new PrismPropertyValue<String>("r1y")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); delta2.addValueToDelete(new PrismPropertyValue<String>("del2")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertReplace(delta1, "r1x", "r1y", "add2"); PrismAsserts.assertNoAdd(delta1); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge13() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge13 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.setValuesToReplace(new PrismPropertyValue<String>("r1x")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToDelete(new PrismPropertyValue<String>("r1x")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertReplace(delta1); PrismAsserts.assertNoAdd(delta1); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaMerge20() throws Exception { System.out.println("\n\n===[ testPropertyDeltaMerge20 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); delta1.addValueToDelete(new PrismPropertyValue<String>("del1")); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.setValuesToReplace(new PrismPropertyValue<String>("r2x"), new PrismPropertyValue<String>("r2y")); // WHEN delta1.merge(delta2); // THEN System.out.println("Merged delta:"); System.out.println(delta1.debugDump()); PrismAsserts.assertReplace(delta1, "r2x", "r2y"); PrismAsserts.assertNoAdd(delta1); PrismAsserts.assertNoDelete(delta1); } @Test public void testPropertyDeltaSwallow01() throws Exception { System.out.println("\n\n===[ testPropertyDeltaSwallow01 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); ObjectDelta<UserType> objectDelta = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta.addModification(delta1); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); // WHEN objectDelta.swallow(delta2); // THEN System.out.println("Swallowed delta:"); System.out.println(objectDelta.debugDump()); PrismAsserts.assertModifications(objectDelta, 1); PropertyDelta<String> modification = (PropertyDelta<String>) objectDelta.getModifications().iterator().next(); PrismAsserts.assertNoReplace(modification); PrismAsserts.assertAdd(modification, "add1", "add2"); PrismAsserts.assertNoDelete(modification); } @Test public void testSummarize01() throws Exception { System.out.println("\n\n===[ testSummarize01 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismPropertyValue<String>("add1")); ObjectDelta<UserType> objectDelta1 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta1.addModification(delta1); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); ObjectDelta<UserType> objectDelta2 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta2.addModification(delta2); // WHEN ObjectDelta<UserType> sumDelta = ObjectDelta.summarize(objectDelta1, objectDelta2); // THEN System.out.println("Summarized delta:"); System.out.println(sumDelta.debugDump()); PrismAsserts.assertModifications(sumDelta, 1); PropertyDelta<String> modification = (PropertyDelta<String>) sumDelta.getModifications().iterator().next(); PrismAsserts.assertNoReplace(modification); PrismAsserts.assertAdd(modification, "add1", "add2"); PrismAsserts.assertNoDelete(modification); } @Test public void testSummarize02() throws Exception { System.out.println("\n\n===[ testSummarize02 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToDelete(new PrismPropertyValue<String>("del1")); ObjectDelta<UserType> objectDelta1 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta1.addModification(delta1); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToDelete(new PrismPropertyValue<String>("del2")); ObjectDelta<UserType> objectDelta2 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta2.addModification(delta2); // WHEN ObjectDelta<UserType> sumDelta = ObjectDelta.summarize(objectDelta1, objectDelta2); // THEN System.out.println("Summarized delta:"); System.out.println(sumDelta.debugDump()); PrismAsserts.assertModifications(sumDelta, 1); PropertyDelta<String> modification = (PropertyDelta<String>) sumDelta.getModifications().iterator().next(); PrismAsserts.assertNoReplace(modification); PrismAsserts.assertNoAdd(modification); PrismAsserts.assertDelete(modification, "del1", "del2"); } @Test public void testSummarize05() throws Exception { System.out.println("\n\n===[ testSummarize05 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta1 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); // Let's complicate the things a bit with origin. This should work even though origins do not match. delta1.addValueToAdd(new PrismPropertyValue<String>("add1", OriginType.OUTBOUND, null)); ObjectDelta<UserType> objectDelta1 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta1.addModification(delta1); PropertyDelta<String> delta2 = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismPropertyValue<String>("add2")); delta2.addValueToDelete(new PrismPropertyValue<String>("add1")); ObjectDelta<UserType> objectDelta2 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta2.addModification(delta2); // WHEN ObjectDelta<UserType> sumDelta = ObjectDelta.summarize(objectDelta1, objectDelta2); // THEN System.out.println("Summarized delta:"); System.out.println(sumDelta.debugDump()); PrismAsserts.assertModifications(sumDelta, 1); PropertyDelta<String> modification = (PropertyDelta<String>) sumDelta.getModifications().iterator().next(); PrismAsserts.assertNoReplace(modification); PrismAsserts.assertAdd(modification, "add2"); PrismAsserts.assertNoDelete(modification); } @Test public void testSummarize06() throws Exception { System.out.println("\n\n===[ testSummarize06 ]===\n"); // GIVEN PrismReferenceDefinition referenceDefinition = new PrismReferenceDefinitionImpl(UserType.F_PARENT_ORG_REF, OBJECT_REFERENCE_TYPE_QNAME, PrismTestUtil.getPrismContext()); ReferenceDelta delta1 = new ReferenceDelta(referenceDefinition, PrismTestUtil.getPrismContext()); delta1.addValueToAdd(new PrismReferenceValue("oid1")); ObjectDelta<UserType> objectDelta1 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta1.addModification(delta1); ReferenceDelta delta2 = new ReferenceDelta(referenceDefinition, PrismTestUtil.getPrismContext()); delta2.addValueToAdd(new PrismReferenceValue("oid1")); // here we add the same value ObjectDelta<UserType> objectDelta2 = new ObjectDelta<UserType>(UserType.class, ChangeType.MODIFY, PrismTestUtil.getPrismContext()); objectDelta2.addModification(delta2); // WHEN ObjectDelta<UserType> sumDelta = ObjectDelta.summarize(objectDelta1, objectDelta2); // THEN System.out.println("Summarized delta:"); System.out.println(sumDelta.debugDump()); PrismAsserts.assertModifications(sumDelta, 1); ReferenceDelta modification = (ReferenceDelta) sumDelta.getModifications().iterator().next(); PrismAsserts.assertNoReplace(modification); assertEquals("Invalid number of values to add", 1, modification.getValuesToAdd().size()); PrismAsserts.assertNoDelete(modification); } @Test public void testAddPropertyMulti() throws Exception { System.out.println("\n\n===[ testAddPropertyMulti ]===\n"); // GIVEN // User PrismObject<UserType> user = createUser(); //Delta ObjectDelta<UserType> userDelta = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); // WHEN userDelta.applyTo(user); // THEN assertEquals("Wrong OID", USER_FOO_OID, user.getOid()); PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("baz"), PrismTestUtil.createPolyString("foobar")); PrismContainer<AssignmentType> assignment = user.findContainer(UserType.F_ASSIGNMENT); assertNotNull("No assignment", assignment); assertEquals("Unexpected number of assignment values", 1, assignment.size()); } @Test public void testAddAssignmentSameNullIdApplyToObject() throws Exception { System.out.println("\n\n===[ testAddAssignmentSameNullIdApplyToObject ]===\n"); // GIVEN // User PrismObject<UserType> user = createUser(); //Delta PrismContainerValue<AssignmentType> assignmentValue = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue); // WHEN userDelta.applyTo(user); // THEN System.out.println("User after delta application:"); System.out.println(user.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, user.getOid()); PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("foobar")); PrismContainer<AssignmentType> assignment = user.findContainer(UserType.F_ASSIGNMENT); assertNotNull("No assignment", assignment); assertEquals("Unexpected number of assignment values", 1, assignment.size()); } @Test public void testAddAssignmentSameNullIdSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentSameNullIdSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 1, valuesToAdd.size()); assertEquals("Wrong value to add", assignmentValue1, valuesToAdd.iterator().next()); } @Test public void testAddAssignmentDifferentNullIdSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentDifferentNullIdSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 2, valuesToAdd.size()); assertTrue("Value "+assignmentValue1+" missing ", valuesToAdd.contains(assignmentValue1)); assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddAssignmentDifferentFirstIdSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentDifferentFirstIdSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT, getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 2, valuesToAdd.size()); assertTrue("Value "+assignmentValue1+" missing ", valuesToAdd.contains(assignmentValue1)); assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddAssignmentDifferentSecondIdSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentDifferentSecondIdSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // The value id is null assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue2.setId(USER_ASSIGNMENT_2_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 2, valuesToAdd.size()); assertTrue("Value "+assignmentValue1+" missing ", valuesToAdd.contains(assignmentValue1)); assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddAssignmentDifferentTwoIdsSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentDifferentTwoIdsSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue2.setId(USER_ASSIGNMENT_2_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 2, valuesToAdd.size()); assertTrue("Value "+assignmentValue1+" missing ", valuesToAdd.contains(assignmentValue1)); assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddAssignmentDifferentIdSameSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentDifferentIdConflictSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue2.setId(USER_ASSIGNMENT_1_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 1, valuesToAdd.size()); assertTrue("Value "+assignmentValue1+" missing ", valuesToAdd.contains(assignmentValue1)); } // MID-1296 @Test(enabled=false) public void testAddAssignmentDifferentIdConflictSwallow() throws Exception { System.out.println("\n\n===[ testAddAssignmentDifferentIdConflictSwallow ]===\n"); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, PrismTestUtil.getPrismContext(), assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue2.setId(USER_ASSIGNMENT_1_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT, getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); AssertJUnit.fail("Unexpected success"); } @Test public void testAddDeltaAddAssignmentDifferentNoIdSwallow() throws Exception { System.out.println("\n\n===[ testAddDeltaAddAssignmentDifferentNoIdSwallow ]===\n"); // GIVEN //Delta 1 PrismObject<UserType> user = createUser(); ObjectDelta<UserType> userDelta1 = ObjectDelta.createAddDelta(user); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // null container ID assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 2, valuesToAdd.size()); PrismContainer<AssignmentType> user1AssignmentCont = user.findContainer(UserType.F_ASSIGNMENT); for (PrismContainerValue<AssignmentType> cval: user1AssignmentCont.getValues()) { assertTrue("Value "+cval+" missing ", valuesToAdd.contains(cval)); } assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddDeltaNoAssignmentAddAssignmentDifferentNoIdSwallow() throws Exception { System.out.println("\n\n===[ testAddDeltaNoAssignmentAddAssignmentDifferentNoIdSwallow ]===\n"); // GIVEN //Delta 1 PrismObject<UserType> user = createUserNoAssignment(); ObjectDelta<UserType> userDelta1 = ObjectDelta.createAddDelta(user); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); // null container ID assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 1, valuesToAdd.size()); assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddDeltaNoAssignmentAddAssignmentDifferentIdSwallow() throws Exception { System.out.println("\n\n===[ testAddDeltaNoAssignmentAddAssignmentDifferentIdSwallow ]===\n"); // GIVEN //Delta 1 PrismObject<UserType> user = createUserNoAssignment(); ObjectDelta<UserType> userDelta1 = ObjectDelta.createAddDelta(user); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assignmentValue2.setId(USER_ASSIGNMENT_2_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "abra kadabra", PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDelta.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); // THEN System.out.println("Delta after swallow:"); System.out.println(userDelta1.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, userDelta1.getOid()); ContainerDelta<AssignmentType> containerDeltaAfter = userDelta1.findContainerDelta(UserType.F_ASSIGNMENT); assertNotNull("No assignment delta", containerDeltaAfter); PrismAsserts.assertNoDelete(containerDeltaAfter); PrismAsserts.assertNoReplace(containerDeltaAfter); Collection<PrismContainerValue<AssignmentType>> valuesToAdd = containerDeltaAfter.getValuesToAdd(); assertEquals("Unexpected number of values to add", 1, valuesToAdd.size()); assertTrue("Value "+assignmentValue2+" missing ", valuesToAdd.contains(assignmentValue2)); } @Test public void testAddAssignmentActivationDifferentNullIdApplyToObject() throws Exception { System.out.println("\n\n===[ testAddAssignmentActivationDifferentNullIdApplyToObject ]===\n"); // GIVEN // User PrismObject<UserType> user = createUser(); //Delta PrismContainerValue<ActivationType> activationValue = new PrismContainerValue<ActivationType>(PrismTestUtil.getPrismContext()); // The value id is null activationValue.setPropertyRealValue(ActivationType.F_ENABLED, true, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta = ObjectDelta.createModificationAddContainer(UserType.class, USER_FOO_OID, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), // We really need ID here. Otherwise it would not be clear to which assignment to add new IdItemPathSegment(123L), new NameItemPathSegment(AssignmentType.F_ACTIVATION)), PrismTestUtil.getPrismContext(), activationValue); // WHEN userDelta.applyTo(user); // THEN System.out.println("User after delta application:"); System.out.println(user.debugDump()); assertEquals("Wrong OID", USER_FOO_OID, user.getOid()); PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("foobar")); PrismContainer<AssignmentType> assignment = user.findContainer(UserType.F_ASSIGNMENT); assertNotNull("No assignment", assignment); assertEquals("Unexpected number of assignment values", 1, assignment.size()); // TODO } @Test public void testObjectDeltaApplyToAdd() throws Exception { System.out.println("\n\n===[ testObjectDeltaApplyToAdd ]===\n"); // GIVEN PrismObject<UserType> user = PrismTestUtil.parseObject(USER_JACK_FILE_XML); //Delta ObjectDelta<UserType> userDelta = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_LOCALITY, PrismTestUtil.getPrismContext(), "Caribbean"); // WHEN userDelta.applyTo(user); // THEN PrismAsserts.assertPropertyValue(user, UserType.F_LOCALITY, "Caribbean"); user.checkConsistence(); } @Test public void testObjectDeltaApplyToDelete() throws Exception { System.out.println("\n\n===[ testObjectDeltaApplyToDelete ]===\n"); // GIVEN PrismObject<UserType> user = PrismTestUtil.parseObject(USER_JACK_FILE_XML); //Delta ObjectDelta<UserType> userDelta = ObjectDelta.createModificationDeleteProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), "Jackie"); // WHEN userDelta.applyTo(user); // THEN PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, "Captain"); user.checkConsistence(); } @Test public void testObjectDeltaApplyToReplace() throws Exception { System.out.println("\n\n===[ testObjectDeltaApplyToReplace ]===\n"); // GIVEN PrismObject<UserType> user = PrismTestUtil.parseObject(USER_JACK_FILE_XML); //Delta ObjectDelta<UserType> userDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), "Cpt"); // WHEN userDelta.applyTo(user); // THEN PrismAsserts.assertPropertyValue(user, UserType.F_ADDITIONAL_NAMES, "Cpt"); user.checkConsistence(); } @Test public void testObjectDeltaApplyToReplaceEmpty() throws Exception { System.out.println("\n\n===[ testObjectDeltaApplyToReplaceEmpty ]===\n"); // GIVEN PrismObject<UserType> user = PrismTestUtil.parseObject(USER_JACK_FILE_XML); //Delta ObjectDelta<UserType> userDelta = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext()); // WHEN userDelta.applyTo(user); // THEN PrismAsserts.assertNoItem(user, UserType.F_ADDITIONAL_NAMES); user.checkConsistence(); } @Test public void testObjectDeltaFindItemDeltaModifyProperty() throws Exception { System.out.println("\n\n===[ testObjectDeltaFindItemDeltaModifyProperty ]===\n"); // GIVEN ObjectDelta<UserType> userDelta = createDeltaForFindItem(); ItemPath itemDeltaPath = new ItemPath(UserType.F_GIVEN_NAME); // WHEN ItemDelta<PrismValue, ItemDefinition> itemDelta = userDelta.findItemDelta(itemDeltaPath); // THEN PrismAsserts.assertInstanceOf(PropertyDelta.class, itemDelta); assertEquals(itemDeltaPath, itemDelta.getPath()); PrismAsserts.assertPropertyValues("Wrong replace values in "+itemDelta, ((PropertyDelta)itemDelta).getValuesToReplace(), "Guybrush"); } @Test public void testObjectDeltaFindItemDeltaModifyPropertyInContainer() throws Exception { System.out.println("\n\n===[ testObjectDeltaFindItemDeltaModifyPropertyInContainer ]===\n"); // GIVEN ObjectDelta<UserType> userDelta = createDeltaForFindItem(); System.out.println("Object delta:\n"+userDelta.debugDump()); ItemPath itemDeltaPath = new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ENABLED); // WHEN ItemDelta<PrismValue, ItemDefinition> itemDelta = userDelta.findItemDelta(itemDeltaPath); // THEN System.out.println("Item delta:\n"+(itemDelta==null?"null":itemDelta.debugDump())); PrismAsserts.assertInstanceOf(PropertyDelta.class, itemDelta); assertEquals(itemDeltaPath, itemDelta.getPath()); PrismAsserts.assertPropertyValues("Wrong add values in "+itemDelta, ((PropertyDelta)itemDelta).getValuesToAdd(), Boolean.TRUE); } private ObjectDelta<UserType> createDeltaForFindItem() throws SchemaException { ObjectDelta<UserType> userDelta = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_LOCALITY, PrismTestUtil.getPrismContext(), "Caribbean"); userDelta.addModificationReplaceProperty(UserType.F_GIVEN_NAME, "Guybrush"); ContainerDelta<ActivationType> activationDelta = userDelta.createContainerModification(new ItemPath(UserType.F_ACTIVATION)); PrismContainerValue<ActivationType> activationCVal = new PrismContainerValue(); activationDelta.addValueToAdd(activationCVal); PrismProperty<Boolean> enabledProperty = activationCVal.createProperty(ActivationType.F_ENABLED); enabledProperty.setRealValue(Boolean.TRUE); PrismProperty<XMLGregorianCalendar> validFromProperty = activationCVal.createProperty(ActivationType.F_VALID_FROM); validFromProperty.setRealValue(XmlTypeConverter.createXMLGregorianCalendar(20016, 5, 16, 19, 8, 33)); userDelta.addModification(activationDelta); return userDelta; } /** * MODIFY/add + MODIFY/add */ @Test public void testObjectDeltaUnion01Simple() throws Exception { System.out.println("\n\n===[ testObjectDeltaUnion01Simple ]===\n"); // GIVEN //Delta ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); // WHEN ObjectDelta<UserType> userDeltaUnion = ObjectDelta.union(userDelta1, userDelta2); // THEN assertUnion01Delta(userDeltaUnion); } /** * MODIFY/add + MODIFY/add */ @Test public void testObjectDeltaUnion01Metadata() throws Exception { System.out.println("\n\n===[ testObjectDeltaUnion01Metadata ]===\n"); // GIVEN ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); PropertyDelta<PolyString> fullNameDelta2 = PropertyDelta.createDelta(UserType.F_FULL_NAME, UserType.class, PrismTestUtil.getPrismContext()); PrismPropertyValue<PolyString> fullNameValue2 = new PrismPropertyValue<PolyString>(PrismTestUtil.createPolyString("baz")); // Set some metadata to spoil usual equals fullNameValue2.setOriginType(OriginType.OUTBOUND); fullNameDelta2.addValueToAdd(fullNameValue2); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModifyDelta(USER_FOO_OID, fullNameDelta2, UserType.class, PrismTestUtil.getPrismContext()); // WHEN ObjectDelta<UserType> userDeltaUnion = ObjectDelta.union(userDelta1, userDelta2); // THEN assertUnion01Delta(userDeltaUnion); } private void assertUnion01Delta(ObjectDelta<UserType> userDeltaUnion) { PropertyDelta<PolyString> fullNameDeltaUnion = getCheckedPropertyDeltaFromUnion(userDeltaUnion); Collection<PrismPropertyValue<PolyString>> valuesToAdd = fullNameDeltaUnion.getValuesToAdd(); assertNotNull("No valuesToAdd in fullName delta after union", valuesToAdd); assertEquals("Unexpected size of valuesToAdd in fullName delta after union", 1, valuesToAdd.size()); PrismPropertyValue<PolyString> valueToAdd = valuesToAdd.iterator().next(); assertEquals("Unexcted value in valuesToAdd in fullName delta after union", PrismTestUtil.createPolyString("baz"), valueToAdd.getValue()); } /** * MODIFY/replace + MODIFY/replace */ @Test public void testObjectDeltaUnion02() throws Exception { System.out.println("\n\n===[ testObjectDeltaUnion02 ]===\n"); // GIVEN //Delta ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); // WHEN ObjectDelta<UserType> userDeltaUnion = ObjectDelta.union(userDelta1, userDelta2); // THEN PropertyDelta<PolyString> fullNameDeltaUnion = getCheckedPropertyDeltaFromUnion(userDeltaUnion); Collection<PrismPropertyValue<PolyString>> valuesToReplace = fullNameDeltaUnion.getValuesToReplace(); assertNotNull("No valuesToReplace in fullName delta after union", valuesToReplace); assertEquals("Unexpected size of valuesToReplace in fullName delta after union", 1, valuesToReplace.size()); PrismPropertyValue<PolyString> valueToReplace = valuesToReplace.iterator().next(); assertEquals("Unexcted value in valueToReplace in fullName delta after union", PrismTestUtil.createPolyString("baz"), valueToReplace.getValue()); } /** * MODIFY/replace + MODIFY/add */ @Test public void testObjectDeltaUnion03() throws Exception { System.out.println("\n\n===[ testObjectDeltaUnion03 ]===\n"); // GIVEN //Delta ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); // WHEN ObjectDelta<UserType> userDeltaUnion = ObjectDelta.union(userDelta1, userDelta2); // THEN PropertyDelta<PolyString> fullNameDeltaUnion = getCheckedPropertyDeltaFromUnion(userDeltaUnion); Collection<PrismPropertyValue<PolyString>> valuesToReplace = fullNameDeltaUnion.getValuesToReplace(); assertNotNull("No valuesToReplace in fullName delta after union", valuesToReplace); assertEquals("Unexpected size of valuesToReplace in fullName delta after union", 1, valuesToReplace.size()); PrismPropertyValue<PolyString> valueToReplace = valuesToReplace.iterator().next(); assertEquals("Unexcted value in valueToReplace in fullName delta after union", PrismTestUtil.createPolyString("baz"), valueToReplace.getValue()); } private PropertyDelta<PolyString> getCheckedPropertyDeltaFromUnion(ObjectDelta<UserType> userDeltaUnion) { userDeltaUnion.checkConsistence(); assertEquals("Wrong OID", USER_FOO_OID, userDeltaUnion.getOid()); PrismAsserts.assertIsModify(userDeltaUnion); PrismAsserts.assertModifications(userDeltaUnion, 1); PropertyDelta<PolyString> fullNameDeltaUnion = userDeltaUnion.findPropertyDelta(UserType.F_FULL_NAME); assertNotNull("No fullName delta after union", fullNameDeltaUnion); return fullNameDeltaUnion; } @Test public void testObjectDeltaSummarizeModifyAdd() throws Exception { System.out.println("\n\n===[ testObjectDeltaSummarizeModifyAdd ]===\n"); // GIVEN ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("foo")); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("bar")); // WHEN ObjectDelta<UserType> userDeltaSum = ObjectDelta.summarize(userDelta1, userDelta2); // THEN assertEquals("Wrong OID", USER_FOO_OID, userDeltaSum.getOid()); PrismAsserts.assertIsModify(userDeltaSum); PrismAsserts.assertModifications(userDeltaSum, 1); PropertyDelta<PolyString> namesDeltaUnion = userDeltaSum.findPropertyDelta(UserType.F_ADDITIONAL_NAMES); assertNotNull("No additionalNames delta after summarize", namesDeltaUnion); PrismAsserts.assertAdd(namesDeltaUnion, PrismTestUtil.createPolyString("foo"), PrismTestUtil.createPolyString("bar")); } @Test public void testObjectDeltaSummarizeModifyReplace() throws Exception { System.out.println("\n\n===[ testObjectDeltaSummarizeModifyReplace ]===\n"); // GIVEN ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("foo")); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("bar")); // WHEN ObjectDelta<UserType> userDeltaSum = ObjectDelta.summarize(userDelta1, userDelta2); // THEN assertEquals("Wrong OID", USER_FOO_OID, userDeltaSum.getOid()); PrismAsserts.assertIsModify(userDeltaSum); PrismAsserts.assertModifications(userDeltaSum, 1); PropertyDelta<PolyString> fullNameDeltaUnion = userDeltaSum.findPropertyDelta(UserType.F_FULL_NAME); assertNotNull("No fullName delta after summarize", fullNameDeltaUnion); PrismAsserts.assertReplace(fullNameDeltaUnion, PrismTestUtil.createPolyString("bar")); } @Test public void testObjectDeltaSummarizeModifyMix() throws Exception { System.out.println("\n\n===[ testObjectDeltaSummarizeModifyMix ]===\n"); // GIVEN ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("foo")); ObjectDelta<UserType> userDelta3 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("bar")); // WHEN ObjectDelta<UserType> userDeltaSum = ObjectDelta.summarize(userDelta1, userDelta2, userDelta3); // THEN assertEquals("Wrong OID", USER_FOO_OID, userDeltaSum.getOid()); PrismAsserts.assertIsModify(userDeltaSum); PrismAsserts.assertModifications(userDeltaSum, 1); PropertyDelta<PolyString> namesDeltaUnion = userDeltaSum.findPropertyDelta(UserType.F_ADDITIONAL_NAMES); assertNotNull("No additionalNames delta after summarize", namesDeltaUnion); PrismAsserts.assertReplace(namesDeltaUnion, PrismTestUtil.createPolyString("foo"), PrismTestUtil.createPolyString("bar")); } @Test public void testObjectDeltaSummarizeAddModifyMix() throws Exception { System.out.println("\n\n===[ testObjectDeltaSummarizeAddModifyMix ]===\n"); // GIVEN PrismObject<UserType> user = createUser(); ObjectDelta<UserType> userDelta0 = ObjectDelta.createAddDelta(user); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("baz")); ObjectDelta<UserType> userDelta2 = ObjectDelta.createModificationReplaceProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("foo")); ObjectDelta<UserType> userDelta3 = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("bar")); // WHEN ObjectDelta<UserType> userDeltaSum = ObjectDelta.summarize(userDelta0, userDelta1, userDelta2, userDelta3); // THEN assertEquals("Wrong OID", USER_FOO_OID, userDeltaSum.getOid()); PrismAsserts.assertIsAdd(userDeltaSum); PrismObject<UserType> userSum = userDeltaSum.getObjectToAdd(); assert user != userSum : "User was not clonned"; PrismAsserts.assertPropertyValue(userSum, UserType.F_ADDITIONAL_NAMES, PrismTestUtil.createPolyString("foo"), PrismTestUtil.createPolyString("bar")); // TODO } @Test public void testObjectDeltaSummarizeAddModifySameRefValues() throws Exception { System.out.println("\n\n===[ testObjectDeltaSummarizeAddModifySameRefValues ]===\n"); // GIVEN PrismObjectDefinition<UserType> userDef = getUserTypeDefinition(); PrismObject<UserType> user = userDef.instantiate(); user.setOid(USER_FOO_OID); user.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("foo")); PrismReference parentOrgRef = user.findOrCreateReference(UserType.F_PARENT_ORG_REF); parentOrgRef.add(new PrismReferenceValue("oid1")); ObjectDelta<UserType> userDelta0 = ObjectDelta.createAddDelta(user); ObjectDelta<UserType> userDelta1 = ObjectDelta.createModificationAddReference(UserType.class, USER_FOO_OID, UserType.F_PARENT_ORG_REF, PrismTestUtil.getPrismContext(), "oid1"); System.out.println("userDelta0 = " + userDelta0.debugDump()); System.out.println("userDelta1 = " + userDelta1.debugDump()); // WHEN ObjectDelta<UserType> userDeltaSum = ObjectDelta.summarize(userDelta0, userDelta1); System.out.println("userDeltaSum = " + userDeltaSum.debugDump()); // THEN assertEquals("Wrong OID", USER_FOO_OID, userDeltaSum.getOid()); PrismAsserts.assertIsAdd(userDeltaSum); PrismObject<UserType> userSum = userDeltaSum.getObjectToAdd(); assert user != userSum : "User was not cloned"; PrismAsserts.assertReferenceValues(userSum.findOrCreateReference(UserType.F_PARENT_ORG_REF), "oid1"); } @Test public void testDeltaComplex() throws Exception { System.out.println("\n\n===[ testDeltaComplex ]===\n"); // GIVEN ObjectDelta<UserType> delta = ObjectDelta.createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_FULL_NAME, PrismTestUtil.getPrismContext(), PrismTestUtil.createPolyString("Foo Bar")); PrismObjectDefinition<UserType> userTypeDefinition = getUserTypeDefinition(); PrismContainerDefinition<ActivationType> activationDefinition = userTypeDefinition.findContainerDefinition(UserType.F_ACTIVATION); PrismContainer<ActivationType> activationContainer = activationDefinition.instantiate(); PrismPropertyDefinition enabledDef = activationDefinition.findPropertyDefinition(ActivationType.F_ENABLED); PrismProperty<Boolean> enabledProperty = enabledDef.instantiate(); enabledProperty.setRealValue(true); activationContainer.add(enabledProperty); delta.addModificationDeleteContainer(UserType.F_ACTIVATION, activationContainer.getValue().clone()); PrismContainerDefinition<AssignmentType> assDef = userTypeDefinition.findContainerDefinition(UserType.F_ASSIGNMENT); PrismPropertyDefinition descDef = assDef.findPropertyDefinition(AssignmentType.F_DESCRIPTION); PrismContainerValue<AssignmentType> assVal1 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assVal1.setId(111L); PrismProperty<String> descProp1 = descDef.instantiate(); descProp1.setRealValue("desc 1"); assVal1.add(descProp1); PrismContainerValue<AssignmentType> assVal2 = new PrismContainerValue<AssignmentType>(PrismTestUtil.getPrismContext()); assVal2.setId(222L); PrismProperty<String> descProp2 = descDef.instantiate(); descProp2.setRealValue("desc 2"); assVal2.add(descProp2); delta.addModificationAddContainer(UserType.F_ASSIGNMENT, assVal1, assVal2); System.out.println("Delta:"); System.out.println(delta.debugDump()); // WHEN, THEN PrismInternalTestUtil.assertVisitor(delta, 14); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_FULL_NAME), true, 2); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_ACTIVATION), true, 4); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ENABLED), true, 2); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_ASSIGNMENT), true, 7); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), IdItemPathSegment.WILDCARD), true, 6); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_FULL_NAME), false, 1); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_ACTIVATION), false, 1); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_ACTIVATION, ActivationType.F_ENABLED), false, 1); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath(UserType.F_ASSIGNMENT), false, 1); PrismInternalTestUtil.assertPathVisitor(delta, new ItemPath( new NameItemPathSegment(UserType.F_ASSIGNMENT), IdItemPathSegment.WILDCARD), false, 2); } @Test public void testPropertyDeltaNarrow01() throws Exception { System.out.println("\n\n===[ testPropertyDeltaNarrow01 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta.addValueToAdd(new PrismPropertyValue<String>("blabla")); delta.addValueToAdd(new PrismPropertyValue<String>("bubu")); PrismObject<UserType> user = createUserNoAssignment(); // WHEN PropertyDelta<String> narrowedDelta = delta.narrow(user); // THEN System.out.println("Narrowed delta:"); System.out.println(narrowedDelta.debugDump()); PrismAsserts.assertNoReplace(narrowedDelta); PrismAsserts.assertAdd(narrowedDelta, "blabla", "bubu"); PrismAsserts.assertNoDelete(narrowedDelta); } @Test public void testPropertyDeltaNarrow02() throws Exception { System.out.println("\n\n===[ testPropertyDeltaNarrow02 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta.addValueToAdd(new PrismPropertyValue<String>("blabla")); delta.addValueToAdd(new PrismPropertyValue<String>("bubu")); PrismObject<UserType> user = createUserNoAssignment(); user.setPropertyRealValue(UserType.F_DESCRIPTION, "bubu"); // WHEN PropertyDelta<String> narrowedDelta = delta.narrow(user); // THEN System.out.println("Narrowed delta:"); System.out.println(narrowedDelta.debugDump()); PrismAsserts.assertNoReplace(narrowedDelta); PrismAsserts.assertAdd(narrowedDelta, "blabla"); PrismAsserts.assertNoDelete(narrowedDelta); } @Test public void testPropertyDeltaNarrow03() throws Exception { System.out.println("\n\n===[ testPropertyDeltaNarrow03 ]===\n"); // GIVEN PrismPropertyDefinition propertyDefinition = new PrismPropertyDefinitionImpl(UserType.F_DESCRIPTION, DOMUtil.XSD_STRING, PrismTestUtil.getPrismContext()); PropertyDelta<String> delta = new PropertyDelta<String>(propertyDefinition, PrismTestUtil.getPrismContext()); delta.addValueToAdd(new PrismPropertyValue<String>("bubu")); PrismObject<UserType> user = createUserNoAssignment(); user.setPropertyRealValue(UserType.F_DESCRIPTION, "bubu"); // WHEN PropertyDelta<String> narrowedDelta = delta.narrow(user); // THEN System.out.println("Narrowed delta:"); System.out.println(narrowedDelta.debugDump()); PrismAsserts.assertNoReplace(narrowedDelta); PrismAsserts.assertNoAdd(narrowedDelta); PrismAsserts.assertNoDelete(narrowedDelta); assertTrue("Delta not empty", narrowedDelta.isEmpty()); } private PrismObject<UserType> createUser() throws SchemaException { PrismObject<UserType> user = createUserNoAssignment(); PrismContainer<AssignmentType> assignment = user.findOrCreateContainer(UserType.F_ASSIGNMENT); PrismContainerValue<AssignmentType> assignmentValue = assignment.createNewValue(); assignmentValue.setId(123L); assignmentValue.setPropertyRealValue(AssignmentType.F_DESCRIPTION, "jamalalicha patlama paprtala", PrismTestUtil.getPrismContext()); return user; } private PrismObject<UserType> createUserNoAssignment() throws SchemaException { PrismObjectDefinition<UserType> userDef = getUserTypeDefinition(); PrismObject<UserType> user = userDef.instantiate(); user.setOid(USER_FOO_OID); user.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("foo")); PrismProperty<PolyString> anamesProp = user.findOrCreateProperty(UserType.F_ADDITIONAL_NAMES); anamesProp.addRealValue(PrismTestUtil.createPolyString("foobar")); return user; } }