private Collection<PropertyDelta<PrismPropertyValue>> convertToPropertyDelta( Collection<PropertyModificationOperation> sideEffectOperations) { Collection<PropertyDelta<PrismPropertyValue>> sideEffectDeltas = new ArrayList<>(); if (sideEffectOperations != null) { for (PropertyModificationOperation mod : sideEffectOperations){ sideEffectDeltas.add(mod.getPropertyDelta()); } } return sideEffectDeltas; }
private boolean isRename(ProvisioningContext ctx, Collection<Operation> modifications) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, ExpressionEvaluationException { for (Operation op : modifications){ if (!(op instanceof PropertyModificationOperation)) { continue; } if (isIdentifierDelta(ctx, ((PropertyModificationOperation)op).getPropertyDelta())) { return true; } } return false; }
private PropertyDelta<QName> determineAuxilaryObjectClassDelta(Collection<Operation> changes) { PropertyDelta<QName> auxiliaryObjectClassDelta = null; for (Operation operation : changes) { if (operation == null) { IllegalArgumentException e = new IllegalArgumentException("Null operation in modifyObject"); throw e; } if (operation instanceof PropertyModificationOperation) { PropertyDelta<?> delta = ((PropertyModificationOperation)operation).getPropertyDelta(); if (delta.getPath().equivalent(ShadowType.F_AUXILIARY_OBJECT_CLASS)) { auxiliaryObjectClassDelta = (PropertyDelta<QName>) delta; } } } return auxiliaryObjectClassDelta; }
private Collection<RefinedAttributeDefinition> determineReadReplace(ProvisioningContext ctx, Collection<Operation> operations, RefinedObjectClassDefinition objectClassDefinition) throws ObjectNotFoundException, SchemaException, CommunicationException, ConfigurationException, ExpressionEvaluationException { Collection<RefinedAttributeDefinition> retval = new ArrayList<>(); for (Operation operation : operations) { RefinedAttributeDefinition rad = getRefinedAttributeDefinitionIfApplicable(operation, objectClassDefinition); if (rad != null && isReadReplaceMode(ctx, rad, objectClassDefinition) && operation instanceof PropertyModificationOperation) { // third condition is just to be sure PropertyDelta propertyDelta = ((PropertyModificationOperation) operation).getPropertyDelta(); if (propertyDelta.isAdd() || propertyDelta.isDelete()) { retval.add(rad); // REPLACE operations are not needed to be converted to READ+REPLACE } } } return retval; }
public void processEntitlementsAdd(ProvisioningContext ctx, PrismObject<ShadowType> shadow) throws SchemaException, ConfigurationException, ObjectNotFoundException, CommunicationException, ExpressionEvaluationException { PrismContainer<ShadowAssociationType> associationContainer = shadow.findContainer(ShadowType.F_ASSOCIATION); if (associationContainer == null || associationContainer.isEmpty()) { return; } Map<QName, PropertyModificationOperation> operationMap = new HashMap<>(); collectEntitlementToAttrsDelta(ctx, operationMap, associationContainer.getValues(), ModificationType.ADD); for (PropertyModificationOperation operation : operationMap.values()) { operation.getPropertyDelta().applyTo(shadow); } }
private RefinedAttributeDefinition getRefinedAttributeDefinitionIfApplicable(Operation operation, RefinedObjectClassDefinition objectClassDefinition) { if (operation instanceof PropertyModificationOperation) { PropertyDelta propertyDelta = ((PropertyModificationOperation) operation).getPropertyDelta(); if (isAttributeDelta(propertyDelta)) { QName attributeName = propertyDelta.getElementName(); return objectClassDefinition.findAttributeDefinition(attributeName); } } return null; }
/** * 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; }
private OperationOptions createConnIdOptions(ConnectorOperationOptions options, Collection<Operation> changes) throws SchemaException { OperationOptionsBuilder connIdOptionsBuilder = new OperationOptionsBuilder(); if (options != null) { ResourceObjectIdentification runAsIdentification = options.getRunAsIdentification(); if (runAsIdentification != null) { connIdOptionsBuilder.setRunAsUser(getNameValue(runAsIdentification)); // We are going to figure out what the runAsPassword may be. // If there is a password change then there should be old value in the delta. // This is quite a black magic. But we do not have a better way now. for (Operation change : changes) { if (change instanceof PropertyModificationOperation) { PropertyDelta propertyDelta = ((PropertyModificationOperation)change).getPropertyDelta(); if (!propertyDelta.getPath().equivalent(SchemaConstants.PATH_PASSWORD_VALUE)) { continue; } Collection<PrismPropertyValue<ProtectedStringType>> oldValues = propertyDelta.getEstimatedOldValues(); if (oldValues == null || oldValues.isEmpty()) { continue; } ProtectedStringType oldPassword = oldValues.iterator().next().getValue(); if (oldPassword != null) { GuardedString oldPasswordGs = ConnIdUtil.toGuardedString(oldPassword, "runAs password", protector); connIdOptionsBuilder.setRunWithPassword(oldPasswordGs); } } } } } return connIdOptionsBuilder.build(); }
@Override protected String createTicketModify(ObjectClassComplexTypeDefinition objectClass, PrismObject<ShadowType> shadow, Collection<? extends ResourceAttribute<?>> identifiers, String resourceOid, Collection<Operation> changes, OperationResult result) throws ObjectNotFoundException, CommunicationException, GenericFrameworkException, SchemaException, ObjectAlreadyExistsException, ConfigurationException { LOGGER.debug("Creating case to modify account {}:\n{}", identifiers, DebugUtil.debugDump(changes, 1)); if (InternalsConfig.isSanityChecks()) { if (MiscUtil.hasDuplicates(changes)) { throw new SchemaException("Duplicated changes: "+changes); } } Collection<ItemDelta> changeDeltas = changes.stream() .filter(change -> change != null) .map(change -> ((PropertyModificationOperation)change).getPropertyDelta()) .collect(Collectors.toList()); ObjectDelta<? extends ShadowType> objectDelta = getPrismContext().deltaFactory().object() .createModifyDelta("", changeDeltas, ShadowType.class); ObjectDeltaType objectDeltaType = DeltaConvertor.toObjectDeltaType(objectDelta); objectDeltaType.setOid(shadow.getOid()); String shadowName = shadow.getName().toString(); String description = "Please modify resource account: "+shadowName; PrismObject<CaseType> acase = addCase(description, resourceOid, shadow.getOid(), objectDeltaType, result); return acase.getOid(); }
if (operation instanceof PropertyModificationOperation) { PropertyModificationOperation propOp = (PropertyModificationOperation)operation; if (propOp.getPropertyDelta().getElementName().equals(assocAttrName)) { attributeDelta = propOp.getPropertyDelta();
attributeOperation.getPropertyDelta().addValuesToAdd(valueAttr.getClonedValues()); } else if (modificationType == ModificationType.DELETE) { attributeOperation.getPropertyDelta().addValuesToDelete(valueAttr.getClonedValues()); } else if (modificationType == ModificationType.REPLACE) { attributeOperation.getPropertyDelta().setValuesToReplace(valueAttr.getClonedValues());
if (operation instanceof PropertyModificationOperation) { PropertyModificationOperation change = (PropertyModificationOperation) operation; PropertyDelta<?> delta = change.getPropertyDelta();
if (origOperation instanceof PropertyModificationOperation) { PropertyModificationOperation modificationOperation = (PropertyModificationOperation)origOperation; PropertyDelta<?> propertyDelta = modificationOperation.getPropertyDelta(); PropertyDelta<?> filteredDelta = ProvisioningUtil.narrowPropertyDelta(propertyDelta, currentShadow, modificationOperation.getMatchingRuleQName(), matchingRuleRegistry);
if (operation instanceof PropertyModificationOperation) { PropertyModificationOperation propOp = (PropertyModificationOperation)operation; if (propOp.getPropertyDelta().getElementName().equals(assocAttrName)) { attributeDelta = propOp.getPropertyDelta();