public <O extends ObjectType> Collection<ObjectDeltaOperation<? extends ObjectType>> mergeObjects(Class<O> type,
String leftOid, String rightOid, String mergeConfigurationName, Task task, OperationResult result)
throws ObjectNotFoundException, SchemaException, ConfigurationException,
ObjectAlreadyExistsException, ExpressionEvaluationException, CommunicationException,
PolicyViolationException, SecurityViolationException {
MergeDeltas<O> deltas = computeMergeDeltas(type, leftOid, rightOid, mergeConfigurationName, task, result);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Merge {} + {} = (computed deltas)\n{}", leftOid, rightOid, deltas.debugDump(1));
}
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas = new ArrayList<>();
LOGGER.trace("Executing right link delta (raw): {}", deltas.getRightLinkDelta());
executeDelta(deltas.getRightLinkDelta(), ModelExecuteOptions.createRaw(), executedDeltas, task, result);
LOGGER.trace("Executing left link delta (raw): {}", deltas.getLeftLinkDelta());
executeDelta(deltas.getLeftLinkDelta(), ModelExecuteOptions.createRaw(), executedDeltas, task, result);
LOGGER.trace("Executing left object delta: {}", deltas.getLeftObjectDelta());
executeDelta(deltas.getLeftObjectDelta(), null, executedDeltas, task, result);
result.computeStatus();
if (result.isSuccess()) {
ObjectDelta<O> deleteDelta = prismContext.deltaFactory().object().createDeleteDelta(type, rightOid
);
Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeleteDeltas = modelController.executeChanges(MiscSchemaUtil.createCollection(deleteDelta), null, task, result);
executedDeltas.addAll(executedDeleteDeltas);
}
return executedDeltas;
}