@SafeVarargs static <O extends Objectable, C extends Containerable> void fillInModificationAddContainer( ObjectDelta<O> objectDelta, ItemPath propertyPath, PrismContext prismContext, C... containerables) throws SchemaException { ContainerDelta<C> containerDelta = objectDelta.createContainerModification(propertyPath); if (containerables != null) { for (C containerable: containerables) { prismContext.adopt(containerable, objectDelta.getObjectTypeClass(), propertyPath); PrismContainerValue<C> prismContainerValue = containerable.asPrismContainerValue(); containerDelta.addValueToAdd(prismContainerValue); } } }
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 ContainerDelta<AssignmentType> createAssignmentModification(AssignmentType assignmentType, boolean add) throws SchemaException { ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container().createDelta(UserType.F_ASSIGNMENT, getUserDefinition()); if (add) { assignmentDelta.addValueToAdd(assignmentType.asPrismContainerValue()); } else { assignmentDelta.addValueToDelete(assignmentType.asPrismContainerValue()); } PrismContainerDefinition<AssignmentType> assignmentDef = getUserDefinition().findContainerDefinition(UserType.F_ASSIGNMENT); assignmentDelta.applyDefinition(assignmentDef); return assignmentDelta; }
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 ); }
private <F extends AssignmentHolderType> void createAssignmentDelta(LensContext<F> context, LensProjectionContext accountContext) throws SchemaException{ Class<F> focusClass = context.getFocusClass(); ContainerDelta<AssignmentType> assignmentDelta = prismContext.deltaFactory().container() .createDelta(AssignmentHolderType.F_ASSIGNMENT, focusClass); AssignmentType assignment = new AssignmentType(); ConstructionType constructionType = new ConstructionType(); constructionType.setResourceRef(ObjectTypeUtil.createObjectRef(accountContext.getResource(), prismContext)); assignment.setConstruction(constructionType); assignmentDelta.addValueToAdd(assignment.asPrismContainerValue()); PrismContainerDefinition<AssignmentType> containerDefinition = prismContext.getSchemaRegistry().findObjectDefinitionByCompileTimeClass(focusClass).findContainerDefinition(AssignmentHolderType.F_ASSIGNMENT); assignmentDelta.applyDefinition(containerDefinition); context.getFocusContext().swallowToProjectionWaveSecondaryDelta(assignmentDelta); }
assocDelta.addValueToAdd(cValue); } else if (changeType == ModificationType.DELETE) { if (!isToBeDeleted(existingDelta, valueMatcher, value)){
@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)); }
containerDelta2.addValueToAdd(assignmentValue2);
ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl .createDelta(UserType.F_ASSIGNMENT, getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2);
assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2);
containerDelta2.addValueToAdd(assignmentValue2);
assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_ABRAKADABRA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2);
assignmentValue2.setPropertyRealValue(AssignmentType.F_DESCRIPTION, ASSIGNMENT_PATLAMA_DESCRIPTION, PrismTestUtil.getPrismContext()); ContainerDelta<AssignmentType> containerDelta2 = ContainerDeltaImpl.createDelta(UserType.F_ASSIGNMENT,getUserTypeDefinition()); containerDelta2.addValueToAdd(assignmentValue2);
containerDelta2.addValueToAdd(assignmentValue2);
ResourceAttributeDefinitionType attributeDefinitionType = new ResourceAttributeDefinitionType(); if (add) { attributeDelta.addValueToAdd(attributeDefinitionType.asPrismContainerValue()); } else { attributeDelta.addValueToDelete(attributeDefinitionType.asPrismContainerValue());
@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"); }
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; }
ContainerDelta<AssignmentType> assignmentDelta1 = prismContext.deltaFactory().container().createDelta(UserType.F_ASSIGNMENT, getUserDefinition()); PrismContainerValue<AssignmentType> cval = prismContext.itemFactory().createContainerValue(); assignmentDelta1.addValueToAdd(cval); PrismReference targetRef = cval.findOrCreateReference(AssignmentType.F_TARGET_REF); targetRef.getValue().setOid(ROLE_BUSINESS_2_OID);