/** * Breaks user assignment delta in the context by inserting some empty value. This may interfere with comparing the values to * existing user values. */ protected <F extends FocusType> void breakAssignmentDelta(ObjectDelta<F> userDelta) throws SchemaException { ContainerDelta<?> assignmentDelta = userDelta.findContainerDelta(UserType.F_ASSIGNMENT); PrismContainerValue<?> assignmentDeltaValue = null; if (assignmentDelta.getValuesToAdd() != null) { assignmentDeltaValue = assignmentDelta.getValuesToAdd().iterator().next(); } if (assignmentDelta.getValuesToDelete() != null) { assignmentDeltaValue = assignmentDelta.getValuesToDelete().iterator().next(); } PrismContainer<ActivationType> activationContainer = assignmentDeltaValue.findOrCreateContainer(AssignmentType.F_ACTIVATION); PrismContainerValue<ActivationType> emptyValue = prismContext.itemFactory().createContainerValue(); activationContainer.add(emptyValue); }
private void addToData(@NotNull Object outObject, @NotNull OperationResult result, PipelineData output) throws SchemaException { if (outObject instanceof Collection) { for (Object o : (Collection) outObject) { addToData(o, result, output); } } else { PrismValue value; if (outObject instanceof PrismValue) { value = (PrismValue) outObject; } else if (outObject instanceof Objectable) { value = prismContext.itemFactory().createObjectValue((Objectable) outObject); } else if (outObject instanceof Containerable) { value = prismContext.itemFactory().createContainerValue((Containerable) outObject); } else { value = prismContext.itemFactory().createPropertyValue(outObject); } output.add(new PipelineItem(value, result)); } }
protected ContainerDelta<AssignmentType> createAssignmentModification(long id, boolean add) throws SchemaException { ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container().createDelta(UserType.F_ASSIGNMENT, getUserDefinition()); PrismContainerValue<AssignmentType> cval = prismContext.itemFactory().createContainerValue(); cval.setId(id); if (add) { assignmentDelta.addValueToAdd(cval); } else { assignmentDelta.addValueToDelete(cval); } return assignmentDelta; }
protected PrismContainerValue<AssignmentType> createAssignmentValue(Long id, String description) throws SchemaException { PrismContainerDefinition<AssignmentType> assignmentDef = getUserTypeDefinition().findContainerDefinition(UserType.F_ASSIGNMENT); PrismContainerValue<AssignmentType> assignmentValue = getPrismContext().itemFactory().createContainerValue(); populateAssignmentValue(assignmentValue, id, description); return assignmentValue; }
protected <F extends AssignmentHolderType> ContainerDelta<AssignmentType> createAssignmentModification(Class<F> type, QName elementName, String roleOid, QName refType, QName relation, Consumer<AssignmentType> modificationBlock, boolean add) throws SchemaException { ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container().createDelta(ItemName.fromQName(elementName), getObjectDefinition(type)); PrismContainerValue<AssignmentType> cval = prismContext.itemFactory().createContainerValue(); if (add) { assignmentDelta.addValueToAdd(cval); } else { assignmentDelta.addValueToDelete(cval); } PrismReference targetRef = cval.findOrCreateReference(AssignmentType.F_TARGET_REF); targetRef.getValue().setOid(roleOid); targetRef.getValue().setTargetType(refType); targetRef.getValue().setRelation(relation); if (modificationBlock != null) { modificationBlock.accept(cval.asContainerable()); } return assignmentDelta; }
protected ObjectDelta<UserType> createParametricAssignmentDelta(String userOid, String roleOid, String orgOid, String tenantOid, boolean adding) throws SchemaException { Collection<ItemDelta<?,?>> modifications = new ArrayList<>(); ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container().createDelta(UserType.F_ASSIGNMENT, getUserDefinition()); PrismContainerValue<AssignmentType> cval = prismContext.itemFactory().createContainerValue(); if (adding) { assignmentDelta.addValueToAdd(cval); } else { assignmentDelta.addValueToDelete(cval); } PrismReference targetRef = cval.findOrCreateReference(AssignmentType.F_TARGET_REF); targetRef.getValue().setOid(roleOid); targetRef.getValue().setTargetType(RoleType.COMPLEX_TYPE); if (orgOid != null) { PrismReference orgRef = cval.findOrCreateReference(AssignmentType.F_ORG_REF); orgRef.getValue().setOid(orgOid); } if (tenantOid != null) { PrismReference tenantRef = cval.findOrCreateReference(AssignmentType.F_TENANT_REF); tenantRef.getValue().setOid(tenantOid); } modifications.add(assignmentDelta); return prismContext.deltaFactory().object().createModifyDelta(userOid, modifications, UserType.class ); }
PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue(); assignmentValue2.setId(USER_ASSIGNMENT_2_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext());
PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue();
PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue();
@Test(enabled = false) // normalization no longer removes empty values public void testEqualsBrokenAssignmentActivation() throws Exception { final String TEST_NAME="testEqualsBrokenAssignmentActivation"; displayTestTitle(TEST_NAME); // GIVEN PrismObjectDefinition<UserType> userDef = PrismInternalTestUtil.getUserTypeDefinition(); PrismContainerDefinition<AssignmentType> assignmentDef = userDef.findContainerDefinition(UserType.F_ASSIGNMENT); PrismContainer<AssignmentType> goodAssignment = assignmentDef.instantiate(UserType.F_ASSIGNMENT); PrismContainer<AssignmentType> brokenAssignment = goodAssignment.clone(); assertEquals("Not equals after clone", goodAssignment, brokenAssignment); // lets break one of these ... PrismContainerValue<AssignmentType> emptyValue = getPrismContext().itemFactory().createContainerValue(); brokenAssignment.add(emptyValue); // WHEN assertFalse("Unexpected equals", goodAssignment.equals(brokenAssignment)); brokenAssignment.normalize(); assertEquals("Not equals after normalize(bad)", goodAssignment, brokenAssignment); goodAssignment.normalize(); assertEquals("Not equals after normalize(good)", goodAssignment, brokenAssignment); } }
@Test public void testAddDeltaNoAssignmentAddAssignmentDifferentNoIdSwallow() throws Exception { final String TEST_NAME="testAddDeltaNoAssignmentAddAssignmentDifferentNoIdSwallow"; displayTestTitle(TEST_NAME); // GIVEN //Delta 1 PrismObject<UserType> user = createUserFoo(); ObjectDelta<UserType> userDelta1 = DeltaFactory.Object.createAddDelta(user); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue(); // null container ID assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.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 { final String TEST_NAME="testAddDeltaNoAssignmentAddAssignmentDifferentIdSwallow"; displayTestTitle(TEST_NAME); // GIVEN //Delta 1 PrismObject<UserType> user = createUserFoo(); ObjectDelta<UserType> userDelta1 = DeltaFactory.Object.createAddDelta(user); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue(); assignmentValue2.setId(USER_ASSIGNMENT_2_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.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)); }
PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue();
PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue(); assignmentValue2.setId(USER_ASSIGNMENT_1_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext());
@Test(enabled=false) public void testAddAssignmentDifferentIdConflictSwallow() throws Exception { final String TEST_NAME="testAddAssignmentDifferentIdConflictSwallow"; displayTestTitle(TEST_NAME); // GIVEN //Delta 1 PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); assignmentValue1.setId(USER_ASSIGNMENT_1_ID); assignmentValue1.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta1 = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, assignmentValue1); //Delta 2 PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue(); assignmentValue2.setId(USER_ASSIGNMENT_1_ID); assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.createDelta(UserType.F_ASSIGNMENT, getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2); // WHEN userDelta1.swallow(containerDelta2); AssertJUnit.fail("Unexpected success"); }
PrismContainerValue<AssignmentType> assignmentValue1 = getPrismContext().itemFactory().createContainerValue(); PrismContainerValue<AssignmentType> assignmentValue2 = getPrismContext().itemFactory().createContainerValue();
@Test public void testAddAssignmentSameNullIdApplyToObject() throws Exception { final String TEST_NAME="testAddAssignmentSameNullIdApplyToObject"; displayTestTitle(TEST_NAME); // GIVEN // User PrismObject<UserType> user = createUserFooPatlama(); //Delta PrismContainerValue<AssignmentType> assignmentValue = getPrismContext().itemFactory().createContainerValue(); // The value id is null assignmentValue.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddContainer(UserType.class, USER_FOO_OID, UserType.F_ASSIGNMENT, 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 testAddAssignmentActivationDifferentNullIdApplyToObject() throws Exception { final String TEST_NAME="testAddAssignmentActivationDifferentNullIdApplyToObject"; displayTestTitle(TEST_NAME); // GIVEN // User PrismObject<UserType> user = createUserFooPatlama(); //Delta PrismContainerValue<ActivationType> activationValue = getPrismContext().itemFactory().createContainerValue(); // The value id is null activationValue.setPropertyRealValue(ActivationType.F_ENABLED, true, PrismTestUtil.getPrismContext()); ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddContainer(UserType.class, USER_FOO_OID, ItemPath.create(UserType.F_ASSIGNMENT, // We really need ID here. Otherwise it would not be clear to which assignment to add 123L, AssignmentType.F_ACTIVATION), 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 }
private ObjectDelta<UserType> createDeltaForFindItem(boolean containerReplace) throws SchemaException { ObjectDelta<UserType> userDelta = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddProperty(UserType.class, USER_FOO_OID, UserType.F_LOCALITY, "Caribbean"); userDelta.addModificationReplaceProperty(UserType.F_GIVEN_NAME, "Guybrush"); ContainerDelta<ActivationType> activationDelta = userDelta.createContainerModification(UserType.F_ACTIVATION); PrismContainerValue<ActivationType> activationCVal = getPrismContext().itemFactory().createContainerValue(); if (containerReplace) { activationDelta.addValueToReplace(activationCVal); } else { 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; }
/** * MID-4863 */ @Test public void test520DeleteUserAssignment() throws Exception { final String TEST_NAME = "test520DeleteUserAssignment"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); PrismObject<UserType> jim = findUserByUsername(USER_JIM_NAME); // WHEN displayWhen(TEST_NAME); AssignmentType orgAssignment = findAssignment(jim, ORG_SAVE_ELAINE_OID, SchemaConstants.ORG_DEFAULT); assertNotNull("org assignment not found", orgAssignment); PrismContainerValue<Containerable> orgAssignmentPcv = prismContext.itemFactory().createContainerValue(); orgAssignmentPcv.setId(orgAssignment.getId()); ObjectDelta<UserType> delta = prismContext.deltaFor(UserType.class) .item(UserType.F_ASSIGNMENT).delete(orgAssignmentPcv) .asObjectDeltaCast(jim.getOid()); executeChanges(delta, null, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); PrismObject<UserType> userAfter = getUser(jim.getOid()); display("User after", userAfter); assertAssignments(userAfter, 1); }