/** * Converts ADD/DELETE VALUE operations into REPLACE VALUE, if needed */ private Collection<Operation> convertToReplace(ProvisioningContext ctx, Collection<Operation> operations, PrismObject<ShadowType> currentShadow) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, ExpressionEvaluationException { List<Operation> retval = new ArrayList<>(operations.size()); for (Operation operation : operations) { if (operation instanceof PropertyModificationOperation) { PropertyDelta propertyDelta = ((PropertyModificationOperation) operation).getPropertyDelta(); if (isAttributeDelta(propertyDelta)) { QName attributeName = propertyDelta.getElementName(); RefinedAttributeDefinition rad = ctx.getObjectClassDefinition().findAttributeDefinition(attributeName); if (isReadReplaceMode(ctx, rad, ctx.getObjectClassDefinition()) && (propertyDelta.isAdd() || propertyDelta.isDelete())) { PropertyModificationOperation newOp = convertToReplace(propertyDelta, currentShadow, rad.getMatchingRuleQName()); newOp.setMatchingRuleQName(((PropertyModificationOperation) operation).getMatchingRuleQName()); retval.add(newOp); continue; } } } retval.add(operation); // for yet-unprocessed operations } return retval; }
RefinedAttributeDefinition<Object> attrDef = objectClassDefinition.findAttributeDefinition(itemDelta.getElementName()); if (attrDef != null) { attributeModification.setMatchingRuleQName(attrDef.getMatchingRuleQName()); if (itemDelta.getDefinition() == null) { itemDelta.setDefinition(attrDef);
attributeDelta = assocAttrDef.createEmptyDelta(ItemPath.create(ShadowType.F_ATTRIBUTES, assocAttrName)); PropertyModificationOperation attributeModification = new PropertyModificationOperation(attributeDelta); attributeModification.setMatchingRuleQName(assocDefType.getMatchingRule()); operations.add(attributeModification);
} else { PropertyModificationOperation newOp = new PropertyModificationOperation<>(filteredDelta); newOp.setMatchingRuleQName(modificationOperation.getMatchingRuleQName()); filteredOperations.add(newOp);
if (attributeOperation == null) { attributeOperation = new PropertyModificationOperation(assocAttrDef.createEmptyDelta(ItemPath.create(ShadowType.F_ATTRIBUTES, assocAttrName))); attributeOperation.setMatchingRuleQName(assocDefType.getMatchingRule()); operationMap.put(assocAttrName, attributeOperation);
attributeModification.setMatchingRuleQName(assocDefType.getMatchingRule()); LOGGER.trace("Collecting entitlement object operations ({}) association {}: {}", modificationType, associationName.getLocalPart(), attributeModification); operations.add(attributeModification);