[SYNCOPE-1207] Reorganizing event management and ProvisioningManager output in 
case of update in order to generate correct audit messages


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/928b90c9
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/928b90c9
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/928b90c9

Branch: refs/heads/master
Commit: 928b90c934a11329e741306b50e83520290b9c80
Parents: 2143809
Author: Francesco Chicchiriccò <ilgro...@apache.org>
Authored: Thu Sep 14 18:06:19 2017 +0200
Committer: Francesco Chicchiriccò <ilgro...@apache.org>
Committed: Thu Sep 14 18:22:46 2017 +0200

----------------------------------------------------------------------
 .../apache/syncope/client/lib/SyncopeClient.java  |  3 +--
 .../apache/syncope/common/lib/AnyOperations.java  | 18 +++++++++++++++++-
 .../syncope/common/lib/types/AuditLoggerName.java |  3 +--
 .../apache/syncope/core/logic/AnyObjectLogic.java |  5 +++--
 .../org/apache/syncope/core/logic/GroupLogic.java |  5 +++--
 .../apache/syncope/core/logic/LoggerLogic.java    | 15 +++++++--------
 .../org/apache/syncope/core/logic/UserLogic.java  |  5 +++--
 .../syncope/core/logic/UserWorkflowLogic.java     |  6 +++---
 .../provisioning/api/ProvisioningManager.java     |  4 ++--
 .../provisioning/api/UserProvisioningManager.java |  2 +-
 .../java/DefaultAnyObjectProvisioningManager.java |  6 +++---
 .../java/DefaultGroupProvisioningManager.java     |  8 +++++---
 .../java/DefaultUserProvisioningManager.java      | 10 +++++-----
 .../java/pushpull/AbstractPullResultHandler.java  | 18 ++++++++++--------
 .../pushpull/AnyObjectPullResultHandlerImpl.java  | 14 +++++---------
 .../java/pushpull/GroupPullResultHandlerImpl.java | 18 ++++++------------
 .../java/pushpull/UserPullResultHandlerImpl.java  | 11 ++++-------
 .../flowable/FlowableUserWorkflowAdapter.java     |  9 ++++-----
 .../workflow/java/DefaultUserWorkflowAdapter.java |  5 ++---
 .../camel/CamelAnyObjectProvisioningManager.java  |  4 ++--
 .../camel/CamelGroupProvisioningManager.java      |  6 ++++--
 .../camel/CamelUserProvisioningManager.java       |  9 ++++-----
 .../camel/producer/CreateProducer.java            |  8 +++-----
 .../camel/producer/StatusProducer.java            |  4 ++--
 .../camel/producer/SuspendProducer.java           |  3 +--
 .../camel/producer/UpdateProducer.java            |  7 +++----
 .../core/logic/saml2/SAML2UserManager.java        |  4 ++--
 .../org/apache/syncope/fit/core/LoggerITCase.java |  4 ++--
 .../apache/syncope/fit/core/PullTaskITCase.java   |  7 +++++--
 29 files changed, 113 insertions(+), 108 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
----------------------------------------------------------------------
diff --git 
a/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java 
b/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
index a3f959d..2a66f14 100644
--- a/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
+++ b/client/lib/src/main/java/org/apache/syncope/client/lib/SyncopeClient.java
@@ -30,7 +30,6 @@ import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.HttpHeaders;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.cxf.jaxrs.client.Client;
 import org.apache.cxf.jaxrs.client.ClientConfiguration;
@@ -260,7 +259,7 @@ public class SyncopeClient {
         }
 
         try {
-            return new ImmutablePair<>(
+            return Pair.of(
                     (Map<String, Set<String>>) new ObjectMapper().readValue(
                             
response.getHeaderString(RESTHeaders.OWNED_ENTITLEMENTS),
                             new TypeReference<HashMap<String, Set<String>>>() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
----------------------------------------------------------------------
diff --git 
a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java 
b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
index f180ed0..7340d69 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java
@@ -413,7 +413,10 @@ public final class AnyOperations {
             if (patch.getAttrTO() == null) {
                 LOG.warn("Invalid {} specified: {}", 
AttrPatch.class.getName(), patch);
             } else {
-                rwattrs.remove(patch.getAttrTO().getSchema());
+                AttrTO removed = rwattrs.remove(patch.getAttrTO().getSchema());
+                if (removed != null && removed.getSchemaInfo() != null) {
+                    patch.getAttrTO().setSchemaInfo(removed.getSchemaInfo());
+                }
                 if (patch.getOperation() == PatchOperation.ADD_REPLACE) {
                     rwattrs.put(patch.getAttrTO().getSchema(), 
patch.getAttrTO());
                 }
@@ -471,6 +474,19 @@ public final class AnyOperations {
         }
     }
 
+    public static AnyTO patch(final AnyTO anyTO, final AnyPatch anyPatch) {
+        if (anyTO instanceof UserTO) {
+            return patch((UserTO) anyTO, (UserPatch) anyPatch);
+        }
+        if (anyTO instanceof GroupTO) {
+            return patch((GroupTO) anyTO, (GroupPatch) anyPatch);
+        }
+        if (anyTO instanceof AnyObjectTO) {
+            return patch((AnyObjectTO) anyTO, (AnyObjectPatch) anyPatch);
+        }
+        return null;
+    }
+
     public static GroupTO patch(final GroupTO groupTO, final GroupPatch 
groupPatch) {
         GroupTO result = SerializationUtils.clone(groupTO);
         patch(groupTO, groupPatch, result);

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
----------------------------------------------------------------------
diff --git 
a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
 
b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
index 6fc1ab0..a595e9b 100644
--- 
a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
+++ 
b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AuditLoggerName.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import java.text.ParseException;
 import java.util.Map;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.AbstractBaseBean;
 import org.apache.syncope.common.lib.log.EventCategoryTO;
@@ -162,7 +161,7 @@ public class AuditLoggerName extends AbstractBaseBean {
             }
         }
 
-        return new ImmutablePair<>(eventCategoryTO, condition);
+        return Pair.of(eventCategoryTO, condition);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
index a067ab7..5857513 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java
@@ -137,10 +137,11 @@ public class AnyObjectLogic extends 
AbstractAnyLogic<AnyObjectTO, AnyObjectPatch
                 realm);
         boolean authDynRealms = securityChecks(effectiveRealms, realm, 
before.getLeft().getKey());
 
-        Pair<String, List<PropagationStatus>> updated = 
provisioningManager.update(anyObjectPatch, nullPriorityAsync);
+        Pair<AnyObjectPatch, List<PropagationStatus>> updated =
+                provisioningManager.update(anyObjectPatch, nullPriorityAsync);
 
         return afterUpdate(
-                binder.getAnyObjectTO(updated.getKey()),
+                binder.getAnyObjectTO(updated.getLeft().getKey()),
                 updated.getRight(),
                 before.getRight(),
                 authDynRealms,

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index c4ccc53..ace95de 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -201,10 +201,11 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, 
GroupPatch> {
                 realm);
         boolean authDynRealms = securityChecks(effectiveRealms, realm, 
before.getLeft().getKey());
 
-        Pair<String, List<PropagationStatus>> updated = 
provisioningManager.update(groupPatch, nullPriorityAsync);
+        Pair<GroupPatch, List<PropagationStatus>> updated =
+                provisioningManager.update(groupPatch, nullPriorityAsync);
 
         return afterUpdate(
-                binder.getGroupTO(updated.getKey()),
+                binder.getGroupTO(updated.getLeft().getKey()),
                 updated.getRight(),
                 before.getRight(),
                 authDynRealms,

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
index 9c8a8b3..a3f3a3a 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/LoggerLogic.java
@@ -351,37 +351,36 @@ public class LoggerLogic extends 
AbstractTransactionalLogic<LoggerTO> {
             for (AnyTypeKind anyTypeKind : AnyTypeKind.values()) {
                 resourceDAO.findAll().forEach(resource -> {
                     EventCategoryTO propEventCategoryTO = new 
EventCategoryTO(EventCategoryType.PROPAGATION);
-                    EventCategoryTO syncEventCategoryTO = new 
EventCategoryTO(EventCategoryType.PULL);
+                    EventCategoryTO pullEventCategoryTO = new 
EventCategoryTO(EventCategoryType.PULL);
                     EventCategoryTO pushEventCategoryTO = new 
EventCategoryTO(EventCategoryType.PUSH);
 
                     
propEventCategoryTO.setCategory(anyTypeKind.name().toLowerCase());
                     propEventCategoryTO.setSubcategory(resource.getKey());
 
-                    
syncEventCategoryTO.setCategory(anyTypeKind.name().toLowerCase());
+                    
pullEventCategoryTO.setCategory(anyTypeKind.name().toLowerCase());
                     
pushEventCategoryTO.setCategory(anyTypeKind.name().toLowerCase());
-                    syncEventCategoryTO.setSubcategory(resource.getKey());
+                    pullEventCategoryTO.setSubcategory(resource.getKey());
                     pushEventCategoryTO.setSubcategory(resource.getKey());
 
                     for (ResourceOperation resourceOperation : 
ResourceOperation.values()) {
                         
propEventCategoryTO.getEvents().add(resourceOperation.name().toLowerCase());
-                        
syncEventCategoryTO.getEvents().add(resourceOperation.name().toLowerCase());
-                        
pushEventCategoryTO.getEvents().add(resourceOperation.name().toLowerCase());
                     }
+                    
pullEventCategoryTO.getEvents().add(ResourceOperation.DELETE.name().toLowerCase());
 
                     for (UnmatchingRule unmatching : UnmatchingRule.values()) {
                         String event = UnmatchingRule.toEventName(unmatching);
-                        syncEventCategoryTO.getEvents().add(event);
+                        pullEventCategoryTO.getEvents().add(event);
                         pushEventCategoryTO.getEvents().add(event);
                     }
 
                     for (MatchingRule matching : MatchingRule.values()) {
                         String event = MatchingRule.toEventName(matching);
-                        syncEventCategoryTO.getEvents().add(event);
+                        pullEventCategoryTO.getEvents().add(event);
                         pushEventCategoryTO.getEvents().add(event);
                     }
 
                     events.add(propEventCategoryTO);
-                    events.add(syncEventCategoryTO);
+                    events.add(pullEventCategoryTO);
                     events.add(pushEventCategoryTO);
                 });
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
index 5f99944..a225bba 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java
@@ -195,10 +195,11 @@ public class UserLogic extends AbstractAnyLogic<UserTO, 
UserPatch> {
                     securityChecks(effectiveRealms, 
before.getLeft().getRealm().getValue(), before.getLeft().getKey());
         }
 
-        Pair<String, List<PropagationStatus>> updated = 
provisioningManager.update(before.getLeft(), nullPriorityAsync);
+        Pair<UserPatch, List<PropagationStatus>> updated =
+                provisioningManager.update(before.getLeft(), 
nullPriorityAsync);
 
         return afterUpdate(
-                binder.returnUserTO(binder.getUserTO(updated.getKey())),
+                
binder.returnUserTO(binder.getUserTO(updated.getLeft().getKey())),
                 updated.getRight(),
                 before.getRight(),
                 authDynRealms,

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
index a9100cc..6f080e1 100644
--- 
a/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
+++ 
b/core/logic/src/main/java/org/apache/syncope/core/logic/UserWorkflowLogic.java
@@ -20,7 +20,7 @@ package org.apache.syncope.core.logic;
 
 import java.lang.reflect.Method;
 import java.util.List;
-import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.AnyPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.UserTO;
@@ -72,7 +72,7 @@ public class UserWorkflowLogic extends 
AbstractTransactionalLogic<WorkflowFormTO
 
         List<PropagationTask> tasks = propagationManager.getUserUpdateTasks(
                 new WorkflowResult<>(
-                        new ImmutablePair<>(userPatch, null),
+                        Pair.<UserPatch, Boolean>of(userPatch, null),
                         updated.getPropByRes(), updated.getPerformedTasks()));
 
         taskExecutor.execute(tasks, false);
@@ -106,7 +106,7 @@ public class UserWorkflowLogic extends 
AbstractTransactionalLogic<WorkflowFormTO
 
             List<PropagationTask> tasks = 
propagationManager.getUserUpdateTasks(
                     new WorkflowResult<>(
-                            new ImmutablePair<>((UserPatch) 
updated.getResult(), Boolean.TRUE),
+                            Pair.of((UserPatch) updated.getResult(), 
Boolean.TRUE),
                             updated.getPropByRes(),
                             updated.getPerformedTasks()));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
index 0fabe15..32ece41 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/ProvisioningManager.java
@@ -30,9 +30,9 @@ public interface ProvisioningManager<T extends AnyTO, P 
extends AnyPatch> {
 
     Pair<String, List<PropagationStatus>> create(T anyTO, boolean 
nullPriorityAsync);
 
-    Pair<String, List<PropagationStatus>> update(P patch, boolean 
nullPriorityAsync);
+    Pair<P, List<PropagationStatus>> update(P patch, boolean 
nullPriorityAsync);
 
-    Pair<String, List<PropagationStatus>> update(P patch, Set<String> 
excludedResources, boolean nullPriorityAsync);
+    Pair<P, List<PropagationStatus>> update(P patch, Set<String> 
excludedResources, boolean nullPriorityAsync);
 
     List<PropagationStatus> delete(String anyKey, boolean nullPriorityAsync);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
index d1160a2..c9aa60c 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/UserProvisioningManager.java
@@ -48,7 +48,7 @@ public interface UserProvisioningManager extends 
ProvisioningManager<UserTO, Use
             Set<String> excludedResources,
             boolean nullPriorityAsync);
 
-    Pair<String, List<PropagationStatus>> update(
+    Pair<UserPatch, List<PropagationStatus>> update(
             UserPatch userPatch,
             ProvisioningReport result,
             Boolean enabled,

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
index 0113ebf..ed4fc0a 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAnyObjectProvisioningManager.java
@@ -87,7 +87,7 @@ public class DefaultAnyObjectProvisioningManager implements 
AnyObjectProvisionin
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<AnyObjectPatch, List<PropagationStatus>> update(
             final AnyObjectPatch anyObjectPatch, final boolean 
nullPriorityAsync) {
 
         return update(anyObjectPatch, Collections.<String>emptySet(), 
nullPriorityAsync);
@@ -95,7 +95,7 @@ public class DefaultAnyObjectProvisioningManager implements 
AnyObjectProvisionin
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<AnyObjectPatch, List<PropagationStatus>> update(
             final AnyObjectPatch anyObjectPatch, final Set<String> 
excludedResources, final boolean nullPriorityAsync) {
 
         WorkflowResult<String> updated = awfAdapter.update(anyObjectPatch);
@@ -110,7 +110,7 @@ public class DefaultAnyObjectProvisioningManager implements 
AnyObjectProvisionin
                 excludedResources);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, 
nullPriorityAsync);
 
-        return Pair.of(updated.getResult(), propagationReporter.getStatuses());
+        return Pair.of(anyObjectPatch, propagationReporter.getStatuses());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
index 141561b..208cb00 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultGroupProvisioningManager.java
@@ -112,13 +112,15 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(final GroupPatch 
groupPatch, final boolean nullPriorityAsync) {
+    public Pair<GroupPatch, List<PropagationStatus>> update(
+            final GroupPatch groupPatch, final boolean nullPriorityAsync) {
+
         return update(groupPatch, Collections.<String>emptySet(), 
nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<GroupPatch, List<PropagationStatus>> update(
             final GroupPatch groupPatch, final Set<String> excludedResources, 
final boolean nullPriorityAsync) {
 
         WorkflowResult<String> updated = gwfAdapter.update(groupPatch);
@@ -133,7 +135,7 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
                 excludedResources);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, 
nullPriorityAsync);
 
-        return Pair.of(updated.getResult(), propagationReporter.getStatuses());
+        return Pair.of(groupPatch, propagationReporter.getStatuses());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
index 468f88e..a123683 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java
@@ -112,17 +112,17 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(final UserPatch 
userPatch, final boolean nullPriorityAsync) {
+    public Pair<UserPatch, List<PropagationStatus>> update(final UserPatch 
userPatch, final boolean nullPriorityAsync) {
         WorkflowResult<Pair<UserPatch, Boolean>> updated = 
uwfAdapter.update(userPatch);
 
         List<PropagationTask> tasks = 
propagationManager.getUserUpdateTasks(updated);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, 
nullPriorityAsync);
 
-        return Pair.of(updated.getResult().getLeft().getKey(), 
propagationReporter.getStatuses());
+        return Pair.of(updated.getResult().getLeft(), 
propagationReporter.getStatuses());
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<UserPatch, List<PropagationStatus>> update(
             final UserPatch userPatch, final Set<String> excludedResources, 
final boolean nullPriorityAsync) {
 
         return update(userPatch, new ProvisioningReport(), null, 
excludedResources, nullPriorityAsync);
@@ -130,7 +130,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<UserPatch, List<PropagationStatus>> update(
             final UserPatch userPatch,
             final ProvisioningReport result,
             final Boolean enabled,
@@ -177,7 +177,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
                 updated, updated.getResult().getLeft().getPassword() != null, 
excludedResources);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, 
nullPriorityAsync);
 
-        return Pair.of(updated.getResult().getLeft().getKey(), 
propagationReporter.getStatuses());
+        return Pair.of(updated.getResult().getLeft(), 
propagationReporter.getStatuses());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
index 74928d9..c31f094 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullResultHandler.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.syncope.common.lib.AnyOperations;
 import org.apache.syncope.common.lib.patch.AnyPatch;
 import org.apache.syncope.common.lib.patch.StringPatchItem;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -90,9 +91,9 @@ public abstract class AbstractPullResultHandler extends 
AbstractSyncopeResultHan
 
     protected abstract ProvisioningManager<?, ?> getProvisioningManager();
 
-    protected abstract AnyTO doCreate(AnyTO anyTO, SyncDelta delta, 
ProvisioningReport result);
+    protected abstract AnyTO doCreate(AnyTO anyTO, SyncDelta delta);
 
-    protected abstract AnyTO doUpdate(AnyTO before, AnyPatch anyPatch, 
SyncDelta delta, ProvisioningReport result);
+    protected abstract AnyPatch doUpdate(AnyTO before, AnyPatch anyPatch, 
SyncDelta delta, ProvisioningReport result);
 
     protected void doDelete(final AnyTypeKind kind, final String key) {
         PropagationByResource propByRes = new PropagationByResource();
@@ -263,16 +264,17 @@ public abstract class AbstractPullResultHandler extends 
AbstractSyncopeResultHan
         Result resultStatus;
 
         try {
-            AnyTO actual = doCreate(anyTO, delta, result);
-            result.setName(getName(actual));
-            output = actual;
+            AnyTO created = doCreate(anyTO, delta);
+            output = created;
+            result.setKey(created.getKey());
+            result.setName(getName(created));
             resultStatus = Result.SUCCESS;
 
             for (PullActions action : profile.getActions()) {
-                action.after(profile, delta, actual, result);
+                action.after(profile, delta, created, result);
             }
 
-            LOG.debug("{} {} successfully created", actual.getType(), 
actual.getKey());
+            LOG.debug("{} {} successfully created", created.getType(), 
created.getKey());
         } catch (PropagationException e) {
             // A propagation failure doesn't imply a pull failure.
             // The propagation exception status will be reported into the 
propagation task execution.
@@ -344,7 +346,7 @@ public abstract class AbstractPullResultHandler extends 
AbstractSyncopeResultHan
                             workingDelta = action.beforeUpdate(profile, 
workingDelta, before, anyPatch);
                         }
 
-                        AnyTO updated = doUpdate(before, anyPatch, 
workingDelta, result);
+                        AnyTO updated = AnyOperations.patch(before, 
doUpdate(before, anyPatch, workingDelta, result));
 
                         for (PullActions action : profile.getActions()) {
                             action.after(profile, workingDelta, updated, 
result);

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
index a328e56..6a6c93d 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AnyObjectPullResultHandlerImpl.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.provisioning.java.pushpull;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.AnyObjectPatch;
 import org.apache.syncope.common.lib.patch.AnyPatch;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -85,20 +86,17 @@ public class AnyObjectPullResultHandlerImpl extends 
AbstractPullResultHandler im
     }
 
     @Override
-    protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta, final 
ProvisioningReport result) {
+    protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta) {
         AnyObjectTO anyObjectTO = AnyObjectTO.class.cast(anyTO);
 
         Map.Entry<String, List<PropagationStatus>> created = 
anyObjectProvisioningManager.create(
                 anyObjectTO, 
Collections.singleton(profile.getTask().getResource().getKey()), true);
 
-        result.setKey(created.getKey());
-        result.setName(getName(anyTO));
-
         return getAnyTO(created.getKey());
     }
 
     @Override
-    protected AnyTO doUpdate(
+    protected AnyPatch doUpdate(
             final AnyTO before,
             final AnyPatch anyPatch,
             final SyncDelta delta,
@@ -106,11 +104,9 @@ public class AnyObjectPullResultHandlerImpl extends 
AbstractPullResultHandler im
 
         AnyObjectPatch anyObjectPatch = AnyObjectPatch.class.cast(anyPatch);
 
-        Map.Entry<String, List<PropagationStatus>> updated = 
anyObjectProvisioningManager.update(
+        Pair<AnyObjectPatch, List<PropagationStatus>> updated = 
anyObjectProvisioningManager.update(
                 anyObjectPatch, 
Collections.singleton(profile.getTask().getResource().getKey()), true);
 
-        AnyObjectTO after = 
anyObjectDataBinder.getAnyObjectTO(updated.getKey());
-        result.setName(getName(after));
-        return after;
+        return anyPatch;
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
index 01af49f..b008efa 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/GroupPullResultHandlerImpl.java
@@ -22,6 +22,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.AnyPatch;
 import org.apache.syncope.common.lib.patch.AttrPatch;
 import org.apache.syncope.common.lib.patch.GroupPatch;
@@ -95,7 +96,7 @@ public class GroupPullResultHandlerImpl extends 
AbstractPullResultHandler implem
     }
 
     @Override
-    protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta, final 
ProvisioningReport result) {
+    protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta) {
         GroupTO groupTO = GroupTO.class.cast(anyTO);
 
         Map.Entry<String, List<PropagationStatus>> created = 
groupProvisioningManager.create(
@@ -104,14 +105,11 @@ public class GroupPullResultHandlerImpl extends 
AbstractPullResultHandler implem
                 
Collections.singleton(profile.getTask().getResource().getKey()),
                 true);
 
-        result.setKey(created.getKey());
-        result.setName(getName(anyTO));
-
         return getAnyTO(created.getKey());
     }
 
     @Override
-    protected AnyTO doUpdate(
+    protected AnyPatch doUpdate(
             final AnyTO before,
             final AnyPatch anyPatch,
             final SyncDelta delta,
@@ -119,7 +117,7 @@ public class GroupPullResultHandlerImpl extends 
AbstractPullResultHandler implem
 
         GroupPatch groupPatch = GroupPatch.class.cast(anyPatch);
 
-        Map.Entry<String, List<PropagationStatus>> updated = 
groupProvisioningManager.update(
+        Pair<GroupPatch, List<PropagationStatus>> updated = 
groupProvisioningManager.update(
                 groupPatch, 
Collections.singleton(profile.getTask().getResource().getKey()), true);
 
         String groupOwner = null;
@@ -131,14 +129,10 @@ public class GroupPullResultHandlerImpl extends 
AbstractPullResultHandler implem
             }
         }
         if (groupOwner != null) {
-            groupOwnerMap.put(updated.getKey(), groupOwner);
+            groupOwnerMap.put(updated.getLeft().getKey(), groupOwner);
         }
 
-        GroupTO after = groupDataBinder.getGroupTO(updated.getKey());
-
-        result.setName(getName(after));
-
-        return after;
+        return anyPatch;
     }
 
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
index 91575e2..349f863 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/UserPullResultHandlerImpl.java
@@ -88,7 +88,7 @@ public class UserPullResultHandlerImpl extends 
AbstractPullResultHandler impleme
     }
 
     @Override
-    protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta, final 
ProvisioningReport result) {
+    protected AnyTO doCreate(final AnyTO anyTO, final SyncDelta delta) {
         UserTO userTO = UserTO.class.cast(anyTO);
 
         Boolean enabled = pullUtils.readEnabled(delta.getObject(), 
profile.getTask());
@@ -96,14 +96,11 @@ public class UserPullResultHandlerImpl extends 
AbstractPullResultHandler impleme
                 userProvisioningManager.create(userTO, true, true, enabled,
                         
Collections.singleton(profile.getTask().getResource().getKey()), true);
 
-        result.setKey(created.getKey());
-        result.setName(getName(anyTO));
-
         return getAnyTO(created.getKey());
     }
 
     @Override
-    protected AnyTO doUpdate(
+    protected AnyPatch doUpdate(
             final AnyTO before,
             final AnyPatch anyPatch,
             final SyncDelta delta,
@@ -112,14 +109,14 @@ public class UserPullResultHandlerImpl extends 
AbstractPullResultHandler impleme
         UserPatch userPatch = UserPatch.class.cast(anyPatch);
         Boolean enabled = pullUtils.readEnabled(delta.getObject(), 
profile.getTask());
 
-        Map.Entry<String, List<PropagationStatus>> updated = 
userProvisioningManager.update(
+        Pair<UserPatch, List<PropagationStatus>> updated = 
userProvisioningManager.update(
                 userPatch,
                 result,
                 enabled,
                 
Collections.singleton(profile.getTask().getResource().getKey()),
                 true);
 
-        return getAnyTO(updated.getKey());
+        return updated.getLeft();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/FlowableUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git 
a/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/FlowableUserWorkflowAdapter.java
 
b/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/FlowableUserWorkflowAdapter.java
index 4cc0139..44cd847 100644
--- 
a/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/FlowableUserWorkflowAdapter.java
+++ 
b/core/workflow-flowable/src/main/java/org/apache/syncope/core/workflow/flowable/FlowableUserWorkflowAdapter.java
@@ -35,7 +35,6 @@ import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.patch.PasswordPatch;
@@ -280,7 +279,7 @@ public class FlowableUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
         Set<String> tasks = getPerformedTasks(user);
 
         return new WorkflowResult<>(
-                new ImmutablePair<>(user.getKey(), propagateEnable), 
propByRes, tasks);
+                Pair.of(user.getKey(), propagateEnable), propByRes, tasks);
     }
 
     protected Set<String> doExecuteTask(final User user, final String task, 
final Map<String, Object> moreVariables) {
@@ -350,7 +349,7 @@ public class FlowableUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
                 user.getWorkflowId(), PROPAGATE_ENABLE, Boolean.class);
 
         return new WorkflowResult<>(
-                new ImmutablePair<>(updatedPatch, propagateEnable), propByRes, 
tasks);
+                Pair.of(updatedPatch, propagateEnable), propByRes, tasks);
     }
 
     @Override
@@ -420,7 +419,7 @@ public class FlowableUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
                 user.getWorkflowId(), PROPAGATE_ENABLE, Boolean.class);
 
         return new WorkflowResult<>(
-                new ImmutablePair<>(updatedPatch, propagateEnable), propByRes, 
tasks);
+                Pair.of(updatedPatch, propagateEnable), propByRes, tasks);
     }
 
     @Override
@@ -702,7 +701,7 @@ public class FlowableUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
             }
         }
 
-        return new ImmutablePair<>(task, formData);
+        return Pair.of(task, formData);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
----------------------------------------------------------------------
diff --git 
a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
 
b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
index c027431..97c338a 100644
--- 
a/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
+++ 
b/core/workflow-java/src/main/java/org/apache/syncope/core/workflow/java/DefaultUserWorkflowAdapter.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.workflow.java;
 import java.io.OutputStream;
 import java.util.Collections;
 import java.util.List;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.PasswordPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
@@ -79,7 +78,7 @@ public class DefaultUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
         PropagationByResource propByRes = new PropagationByResource();
         propByRes.set(ResourceOperation.CREATE, 
userDAO.findAllResourceKeys(user.getKey()));
 
-        return new WorkflowResult<>(new ImmutablePair<>(user.getKey(), 
propagateEnable), propByRes, "create");
+        return new WorkflowResult<>(Pair.of(user.getKey(), propagateEnable), 
propByRes, "create");
     }
 
     @Override
@@ -101,7 +100,7 @@ public class DefaultUserWorkflowAdapter extends 
AbstractUserWorkflowAdapter {
 
         userDAO.save(user);
 
-        return new WorkflowResult<>(new ImmutablePair<>(userPatch, 
!user.isSuspended()), propByRes, "update");
+        return new WorkflowResult<>(Pair.of(userPatch, !user.isSuspended()), 
propByRes, "update");
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
index 56783f7..d89e4d2 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelAnyObjectProvisioningManager.java
@@ -66,7 +66,7 @@ public class CamelAnyObjectProvisioningManager
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<AnyObjectPatch, List<PropagationStatus>> update(
             final AnyObjectPatch anyPatch, final boolean nullPriorityAsync) {
 
         return update(anyPatch, Collections.<String>emptySet(), 
nullPriorityAsync);
@@ -75,7 +75,7 @@ public class CamelAnyObjectProvisioningManager
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<AnyObjectPatch, List<PropagationStatus>> update(
             final AnyObjectPatch anyPatch, final Set<String> 
excludedResources, final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = 
getConsumer("direct:updateAnyObjectPort");

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
index c6feb91..4f6620e 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelGroupProvisioningManager.java
@@ -85,14 +85,16 @@ public class CamelGroupProvisioningManager
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(final GroupPatch 
anyPatch, final boolean nullPriorityAsync) {
+    public Pair<GroupPatch, List<PropagationStatus>> update(
+            final GroupPatch anyPatch, final boolean nullPriorityAsync) {
+
         return update(anyPatch, Collections.<String>emptySet(), 
nullPriorityAsync);
     }
 
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<GroupPatch, List<PropagationStatus>> update(
             final GroupPatch anyPatch, final Set<String> excludedResources, 
final boolean nullPriorityAsync) {
 
         PollingConsumer pollingConsumer = 
getConsumer("direct:updateGroupPort");

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
index 781362a..7f721a5 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/CamelUserProvisioningManager.java
@@ -27,7 +27,6 @@ import java.util.Map;
 import java.util.Set;
 import org.apache.camel.Exchange;
 import org.apache.camel.PollingConsumer;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.StatusPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
@@ -91,7 +90,7 @@ public class CamelUserProvisioningManager extends 
AbstractCamelProvisioningManag
 
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<String, List<PropagationStatus>> update(final UserPatch 
userPatch, final boolean nullPriorityAsync) {
+    public Pair<UserPatch, List<PropagationStatus>> update(final UserPatch 
userPatch, final boolean nullPriorityAsync) {
         PollingConsumer pollingConsumer = getConsumer("direct:updatePort");
 
         Map<String, Object> props = new HashMap<>();
@@ -109,7 +108,7 @@ public class CamelUserProvisioningManager extends 
AbstractCamelProvisioningManag
     }
 
     @Override
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<UserPatch, List<PropagationStatus>> update(
             final UserPatch anyPatch, final Set<String> excludedResources, 
final boolean nullPriorityAsync) {
 
         return update(anyPatch, new ProvisioningReport(), null, 
excludedResources, nullPriorityAsync);
@@ -317,7 +316,7 @@ public class CamelUserProvisioningManager extends 
AbstractCamelProvisioningManag
     @Transactional(propagation = Propagation.REQUIRES_NEW)
     @Override
     @SuppressWarnings("unchecked")
-    public Pair<String, List<PropagationStatus>> update(
+    public Pair<UserPatch, List<PropagationStatus>> update(
             final UserPatch userPatch,
             final ProvisioningReport result,
             final Boolean enabled,
@@ -346,7 +345,7 @@ public class CamelUserProvisioningManager extends 
AbstractCamelProvisioningManag
             result.setMessage("Update failed, trying to pull status anyway (if 
configured)\n" + ex.getMessage());
 
             WorkflowResult<Pair<UserPatch, Boolean>> updated = new 
WorkflowResult<>(
-                    new ImmutablePair<>(userPatch, false), new 
PropagationByResource(),
+                    Pair.of(userPatch, false), new PropagationByResource(),
                     new HashSet<>());
             sendMessage("direct:userInPull", updated, props);
             exchange = pollingConsumer.receive();

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
index 6782330..40a6f33 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/CreateProducer.java
@@ -26,7 +26,6 @@ import java.util.Set;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -67,7 +66,7 @@ public class CreateProducer extends AbstractProducer {
                         getPropagationTaskExecutor().execute(tasks, 
nullPriorityAsync);
 
                 exchange.getOut().setBody(
-                        new ImmutablePair<>(created.getResult().getKey(), 
propagationReporter.getStatuses()));
+                        Pair.of(created.getResult().getKey(), 
propagationReporter.getStatuses()));
             } else if (actual instanceof AnyTO) {
                 WorkflowResult<String> created = (WorkflowResult<String>) 
exchange.getIn().getBody();
 
@@ -86,7 +85,7 @@ public class CreateProducer extends AbstractProducer {
                             excludedResources);
                     getPropagationTaskExecutor().execute(tasks, 
nullPriorityAsync);
 
-                    exchange.getOut().setBody(new 
ImmutablePair<>(created.getResult(), null));
+                    exchange.getOut().setBody(Pair.of(created.getResult(), 
null));
                 } else {
                     List<PropagationTask> tasks = 
getPropagationManager().getCreateTasks(
                             actual instanceof AnyObjectTO ? 
AnyTypeKind.ANY_OBJECT : AnyTypeKind.GROUP,
@@ -97,8 +96,7 @@ public class CreateProducer extends AbstractProducer {
                     PropagationReporter propagationReporter =
                             getPropagationTaskExecutor().execute(tasks, 
nullPriorityAsync);
 
-                    exchange.getOut().setBody(new 
ImmutablePair<>(created.getResult(),
-                            propagationReporter.getStatuses()));
+                    exchange.getOut().setBody(Pair.of(created.getResult(), 
propagationReporter.getStatuses()));
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
index 45f62e6..8fa02ad 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/StatusProducer.java
@@ -24,7 +24,7 @@ import java.util.Map.Entry;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.StatusPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -102,7 +102,7 @@ public class StatusProducer extends AbstractProducer {
                     null);
             PropagationReporter propagationReporter = 
getPropagationTaskExecutor().execute(tasks, nullPriorityAsync);
 
-            exchange.getOut().setBody(new ImmutablePair<>(updated.getResult(), 
propagationReporter.getStatuses()));
+            exchange.getOut().setBody(Pair.of(updated.getResult(), 
propagationReporter.getStatuses()));
         }
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
index 1f541df..ac43c7f 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/SuspendProducer.java
@@ -22,7 +22,6 @@ import java.util.List;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -49,7 +48,7 @@ public class SuspendProducer extends AbstractProducer {
 
                 List<PropagationTask> tasks = 
getPropagationManager().getUserUpdateTasks(
                         new WorkflowResult<>(
-                                new ImmutablePair<>(userPatch, Boolean.FALSE),
+                                Pair.of(userPatch, Boolean.FALSE),
                                 updated.getKey().getPropByRes(), 
updated.getKey().getPerformedTasks()));
                 getPropagationTaskExecutor().execute(tasks, false);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
----------------------------------------------------------------------
diff --git 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
index 68fbd0e..90fcb29 100644
--- 
a/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
+++ 
b/ext/camel/provisioning-camel/src/main/java/org/apache/syncope/core/provisioning/camel/producer/UpdateProducer.java
@@ -23,7 +23,6 @@ import java.util.Set;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.syncope.common.lib.patch.AnyObjectPatch;
 import org.apache.syncope.common.lib.patch.AnyPatch;
@@ -61,8 +60,8 @@ public class UpdateProducer extends AbstractProducer {
                 PropagationReporter propagationReporter =
                         getPropagationTaskExecutor().execute(tasks, 
nullPriorityAsync);
 
-                exchange.getOut().setBody(new ImmutablePair<>(
-                        updated.getResult().getKey().getKey(), 
propagationReporter.getStatuses()));
+                exchange.getOut().setBody(Pair.of(
+                        updated.getResult().getLeft(), 
propagationReporter.getStatuses()));
             } else if (actual instanceof AnyPatch) {
                 WorkflowResult<String> updated = (WorkflowResult<String>) 
exchange.getIn().getBody();
 
@@ -77,7 +76,7 @@ public class UpdateProducer extends AbstractProducer {
                 PropagationReporter propagationReporter =
                         getPropagationTaskExecutor().execute(tasks, 
nullPriorityAsync);
 
-                exchange.getOut().setBody(new 
ImmutablePair<>(updated.getResult(), propagationReporter.getStatuses()));
+                exchange.getOut().setBody(Pair.of(actual, 
propagationReporter.getStatuses()));
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
----------------------------------------------------------------------
diff --git 
a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
 
b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
index 8792a26..2245fc7 100644
--- 
a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
+++ 
b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2UserManager.java
@@ -267,8 +267,8 @@ public class SAML2UserManager {
             userPatch = action.beforeUpdate(userPatch, responseTO);
         }
 
-        Pair<String, List<PropagationStatus>> updated = 
provisioningManager.update(userPatch, false);
-        userTO = binder.getUserTO(updated.getKey());
+        Pair<UserPatch, List<PropagationStatus>> updated = 
provisioningManager.update(userPatch, false);
+        userTO = binder.getUserTO(updated.getLeft().getKey());
 
         for (SAML2IdPActions action : actions) {
             userTO = action.afterUpdate(userTO, responseTO);

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
index e90e9d2..5ba1c9e 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LoggerITCase.java
@@ -211,8 +211,7 @@ public class LoggerITCase extends AbstractITCase {
             if 
(AnyTypeKind.USER.name().toLowerCase().equals(eventCategoryTO.getCategory())) {
                 if (RESOURCE_NAME_LDAP.equals(eventCategoryTO.getSubcategory())
                         && EventCategoryType.PULL == 
eventCategoryTO.getType()) {
-                    
assertTrue(eventCategoryTO.getEvents().contains(ResourceOperation.CREATE.name().toLowerCase()));
-                    
assertTrue(eventCategoryTO.getEvents().contains(ResourceOperation.UPDATE.name().toLowerCase()));
+
                     
assertTrue(eventCategoryTO.getEvents().contains(ResourceOperation.DELETE.name().toLowerCase()));
                     found = true;
                 }
@@ -225,6 +224,7 @@ public class LoggerITCase extends AbstractITCase {
             if 
(AnyTypeKind.USER.name().toLowerCase().equals(eventCategoryTO.getCategory())) {
                 if (RESOURCE_NAME_CSV.equals(eventCategoryTO.getSubcategory())
                         && EventCategoryType.PROPAGATION == 
eventCategoryTO.getType()) {
+
                     
assertTrue(eventCategoryTO.getEvents().contains(ResourceOperation.CREATE.name().toLowerCase()));
                     
assertTrue(eventCategoryTO.getEvents().contains(ResourceOperation.UPDATE.name().toLowerCase()));
                     
assertTrue(eventCategoryTO.getEvents().contains(ResourceOperation.DELETE.name().toLowerCase()));

http://git-wip-us.apache.org/repos/asf/syncope/blob/928b90c9/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
index 9b754df..0919b77 100644
--- 
a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
+++ 
b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/PullTaskITCase.java
@@ -402,6 +402,9 @@ public class PullTaskITCase extends AbstractTaskITCase {
 
     @Test
     public void reconcileFromScriptedSQL() {
+        System.out.println("QUAAAAAAAAAAAAAAAAAAAAA");
+        LOG.info("QUAAAAAAAAAAAAAAAa");
+                
         // 0. reset sync token and set MappingItemTransformer
         ResourceTO resource = resourceService.read(RESOURCE_NAME_DBSCRIPTED);
         ResourceTO originalResource = SerializationUtils.clone(resource);
@@ -463,10 +466,10 @@ public class PullTaskITCase extends AbstractTaskITCase {
             assertFalse(pullTask.isPerformDelete());
 
             // 4. pull
-            execProvisioningTask(taskService, 
"30cfd653-257b-495f-8665-281281dbcb3d", 50, false);
+            execProvisioningTask(taskService, pullTask.getKey(), 50, false);
 
             // 5. verify that printer was re-created in Syncope (implies that 
location does not start with given prefix,
-            // hence PrefixMappingItemTransformer was applied during pull)
+            // hence PrefixItemTransformer was applied during pull)
             matchingPrinters = anyObjectService.search(new 
AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
                     
fiql(SyncopeClient.getAnyObjectSearchConditionBuilder("PRINTER").
                             is("location").equalTo("pull*").query()).build());

Reply via email to