This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 3_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/3_0_X by this push:
     new 45a0b59fa5 Ensure to set the update request on PropagationTaskInfo 
whenever possible
45a0b59fa5 is described below

commit 45a0b59fa550c22ecef6f419f3a6430a9ab90a32
Author: Francesco Chicchiriccò <ilgro...@apache.org>
AuthorDate: Wed Jul 17 13:03:50 2024 +0200

    Ensure to set the update request on PropagationTaskInfo whenever possible
---
 .../org/apache/syncope/core/logic/RealmLogic.java  |  3 +-
 .../api/propagation/PropagationManager.java        | 34 +++++++++++-----------
 .../java/DefaultAnyObjectProvisioningManager.java  |  5 ++--
 .../java/DefaultGroupProvisioningManager.java      |  5 ++--
 .../java/DefaultUserProvisioningManager.java       |  7 ++---
 .../propagation/DefaultPropagationManager.java     | 13 ++++++---
 .../java/pushpull/AbstractPushResultHandler.java   |  1 +
 .../pushpull/DefaultRealmPullResultHandler.java    |  3 +-
 .../pushpull/DefaultRealmPushResultHandler.java    |  3 +-
 .../pushpull/DefaultUserPushResultHandler.java     |  1 +
 10 files changed, 40 insertions(+), 35 deletions(-)

diff --git 
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java 
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index 24118f9d67..72917f9ee2 100644
--- 
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ 
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -175,8 +175,7 @@ public class RealmLogic extends 
AbstractTransactionalLogic<RealmTO> {
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.setAttributeDeltas(
                 propagationManager.createTasks(realm, propByRes, null),
-                beforeAttrs,
-                null);
+                beforeAttrs);
         PropagationReporter propagationReporter =
                 taskExecutor.execute(taskInfos, false, 
AuthContextUtils.getUsername());
 
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
index cfc868c4a2..c0e2b99860 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/propagation/PropagationManager.java
@@ -55,11 +55,11 @@ public interface PropagationManager {
     String MANDATORY_NULL_OR_EMPTY_ATTR_NAME = "__MANDATORY_NULL_OR_EMPTY__";
 
     /**
-     * Create the any object tasks for every associated resource, unless in 
{@code excludedResources}.
+     * Create the tasks for every associated resource, unless in {@code 
excludedResources}.
      *
-     * @param kind any object type kind
-     * @param key any object key
-     * @param enable whether any object should be enabled or not
+     * @param kind any type kind
+     * @param key any key
+     * @param enable whether any should be enabled or not
      * @param propByRes operation to be performed per resource
      * @param vAttrs virtual attributes to be set
      * @param excludedResources external resources performing not to be 
considered for propagation
@@ -95,12 +95,13 @@ public interface PropagationManager {
             Collection<String> excludedResources);
 
     /**
-     * Create the update tasks for the any object on each resource associated, 
unless in {@code excludedResources}.
+     * Create the update tasks on each resource associated, unless in {@code 
excludedResources}.
      *
-     * @param kind any object type kind
-     * @param key any object key
+     * @param anyUR update request
+     * @param kind any type kind
+     * @param key any key
      * @param changePwd whether password should be included for propagation 
attributes or not
-     * @param enable whether any object should be enabled or not, may be null 
to leave unchanged
+     * @param enable whether any should be enabled or not, may be null to 
leave unchanged
      * @param propByRes operation to be performed per resource
      * @param propByLinkedAccount operation to be performed for linked accounts
      * @param vAttrs virtual attributes to be set
@@ -108,6 +109,7 @@ public interface PropagationManager {
      * @return list of propagation tasks
      */
     List<PropagationTaskInfo> getUpdateTasks(
+            AnyUR anyUR,
             AnyTypeKind kind,
             String key,
             boolean changePwd,
@@ -140,10 +142,10 @@ public interface PropagationManager {
     List<PropagationTaskInfo> 
getUserUpdateTasks(UserWorkflowResult<Pair<UserUR, Boolean>> wfResult);
 
     /**
-     * Create the delete tasks for the any object from each resource 
associated, unless in {@code excludedResources}.
+     * Create the delete tasks from each resource associated, unless in {@code 
excludedResources}.
      *
-     * @param kind any object type kind
-     * @param key any object key
+     * @param kind any type kind
+     * @param key any key
      * @param propByRes operation to be performed per resource
      * @param propByLinkedAccount operation to be performed for linked accounts
      * @param excludedResources external resource keys not to be considered 
for propagation
@@ -181,11 +183,11 @@ public interface PropagationManager {
     /**
      * Prepare attributes for propagation.
      *
-     * @param kind any object type kind
-     * @param key any object key
+     * @param kind any type kind
+     * @param key any key
      * @param password to be set (for users)
      * @param changePwd whether password should be included for propagation 
attributes or not (for users)
-     * @param enable whether any object should be enabled or not, may be null 
to leave unchanged
+     * @param enable whether any should be enabled or not, may be null to 
leave unchanged
      * @param excludedResources external resource keys not to be considered 
for propagation
      * @return map with prepared attributes per External Resource
      */
@@ -210,11 +212,9 @@ public interface PropagationManager {
      *
      * @param tasks propagation tasks
      * @param beforeAttrs attribute values before update
-     * @param updateRequest effective any update request
      * @return enriched propagation tasks
      */
     List<PropagationTaskInfo> setAttributeDeltas(
             List<PropagationTaskInfo> tasks,
-            Map<Pair<String, String>, Set<Attribute>> beforeAttrs,
-            AnyUR updateRequest);
+            Map<Pair<String, String>, Set<Attribute>> beforeAttrs);
 }
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 673086c25f..2d6f8e011a 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
@@ -123,6 +123,7 @@ public class DefaultAnyObjectProvisioningManager implements 
AnyObjectProvisionin
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.setAttributeDeltas(
                 propagationManager.getUpdateTasks(
+                        updated.getResult(),
                         AnyTypeKind.ANY_OBJECT,
                         updated.getResult().getKey(),
                         false,
@@ -131,8 +132,7 @@ public class DefaultAnyObjectProvisioningManager implements 
AnyObjectProvisionin
                         null,
                         anyObjectUR.getVirAttrs(),
                         excludedResources),
-                beforeAttrs,
-                updated.getResult());
+                beforeAttrs);
         PropagationReporter propagationReporter = 
taskExecutor.execute(taskInfos, nullPriorityAsync, updater);
 
         return Pair.of(updated.getResult(), propagationReporter.getStatuses());
@@ -196,6 +196,7 @@ public class DefaultAnyObjectProvisioningManager implements 
AnyObjectProvisionin
         propByRes.addAll(ResourceOperation.UPDATE, resources);
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.getUpdateTasks(
+                null,
                 AnyTypeKind.ANY_OBJECT,
                 key,
                 false,
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 a43f5e7c74..7f45eba1be 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
@@ -143,6 +143,7 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
 
         List<PropagationTaskInfo> tasks = 
propagationManager.setAttributeDeltas(
                 propagationManager.getUpdateTasks(
+                        updated.getResult(),
                         AnyTypeKind.GROUP,
                         updated.getResult().getKey(),
                         false,
@@ -151,8 +152,7 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
                         null,
                         groupUR.getVirAttrs(),
                         excludedResources),
-                beforeAttrs,
-                updated.getResult());
+                beforeAttrs);
         PropagationReporter propagationReporter = taskExecutor.execute(tasks, 
nullPriorityAsync, updater);
 
         return Pair.of(updated.getResult(), propagationReporter.getStatuses());
@@ -231,6 +231,7 @@ public class DefaultGroupProvisioningManager implements 
GroupProvisioningManager
         propByRes.addAll(ResourceOperation.UPDATE, resources);
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.getUpdateTasks(
+                null,
                 AnyTypeKind.GROUP,
                 key,
                 false,
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 5b0e260549..ab3f613a32 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
@@ -131,8 +131,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.setAttributeDeltas(
                 propagationManager.getUserUpdateTasks(updated),
-                beforeAttrs,
-                updated.getResult().getLeft());
+                beforeAttrs);
         PropagationReporter propagationReporter = 
taskExecutor.execute(taskInfos, nullPriorityAsync, updater);
 
         return Pair.of(updated.getResult().getLeft(), 
propagationReporter.getStatuses());
@@ -190,8 +189,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
                         updated,
                         updated.getResult().getLeft().getPassword() != null,
                         excludedResources),
-                beforeAttrs,
-                updated.getResult().getLeft());
+                beforeAttrs);
         PropagationReporter propagationReporter = 
taskExecutor.execute(taskInfos, nullPriorityAsync, updater);
 
         return Pair.of(updated.getResult().getLeft(), 
propagationReporter.getStatuses());
@@ -289,6 +287,7 @@ public class DefaultUserProvisioningManager implements 
UserProvisioningManager {
         PropagationByResource<String> propByRes = new 
PropagationByResource<>();
         propByRes.addAll(ResourceOperation.UPDATE, statusR.getResources());
         List<PropagationTaskInfo> taskInfos = 
propagationManager.getUpdateTasks(
+                null,
                 AnyTypeKind.USER,
                 statusR.getKey(),
                 false,
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java
index 51ef57a25c..9a7dfc46ae 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/DefaultPropagationManager.java
@@ -184,6 +184,7 @@ public class DefaultPropagationManager implements 
PropagationManager {
 
     @Override
     public List<PropagationTaskInfo> getUpdateTasks(
+            final AnyUR anyUR,
             final AnyTypeKind kind,
             final String key,
             final boolean changePwd,
@@ -194,6 +195,7 @@ public class DefaultPropagationManager implements 
PropagationManager {
             final Collection<String> excludedResources) {
 
         return getUpdateTasks(
+                anyUR,
                 anyUtilsFactory.getInstance(kind).dao().authFind(key),
                 null,
                 changePwd,
@@ -211,6 +213,7 @@ public class DefaultPropagationManager implements 
PropagationManager {
             final Collection<String> excludedResources) {
 
         return getUpdateTasks(
+                wfResult.getResult().getLeft(),
                 
anyUtilsFactory.getInstance(AnyTypeKind.USER).dao().authFind(wfResult.getResult().getLeft().getKey()),
                 
Optional.ofNullable(wfResult.getResult().getLeft().getPassword()).
                         map(PasswordPatch::getValue).orElse(null),
@@ -277,12 +280,14 @@ public class DefaultPropagationManager implements 
PropagationManager {
             }
 
             tasks = tasks.stream().distinct().collect(Collectors.toList());
+            tasks.forEach(task -> 
task.setUpdateRequest(wfResult.getResult().getLeft()));
         }
 
         return tasks;
     }
 
     protected List<PropagationTaskInfo> getUpdateTasks(
+            final AnyUR anyUR,
             final Any<?> any,
             final String password,
             final boolean changePwd,
@@ -307,7 +312,7 @@ public class DefaultPropagationManager implements 
PropagationManager {
             }
         }
 
-        return createTasks(
+        List<PropagationTaskInfo> tasks = createTasks(
                 any,
                 password,
                 changePwd,
@@ -315,6 +320,8 @@ public class DefaultPropagationManager implements 
PropagationManager {
                 
Optional.ofNullable(propByRes).orElseGet(PropagationByResource::new),
                 propByLinkedAccount,
                 vAttrs);
+        tasks.forEach(task -> task.setUpdateRequest(anyUR));
+        return tasks;
     }
 
     @Override
@@ -699,8 +706,7 @@ public class DefaultPropagationManager implements 
PropagationManager {
     @Override
     public List<PropagationTaskInfo> setAttributeDeltas(
             final List<PropagationTaskInfo> tasks,
-            final Map<Pair<String, String>, Set<Attribute>> beforeAttrs,
-            final AnyUR updateRequest) {
+            final Map<Pair<String, String>, Set<Attribute>> beforeAttrs) {
 
         if (beforeAttrs.isEmpty()) {
             return tasks;
@@ -789,7 +795,6 @@ public class DefaultPropagationManager implements 
PropagationManager {
 
             if (!attributeDeltas.isEmpty()) {
                 propagationData.setAttributeDeltas(attributeDeltas);
-                task.setUpdateRequest(updateRequest);
             }
         }
 
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
index 8069984a92..dda4dfad11 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPushResultHandler.java
@@ -108,6 +108,7 @@ public abstract class AbstractPushResultHandler extends 
AbstractSyncopeResultHan
         
propByRes.addOldConnObjectKey(profile.getTask().getResource().getKey(), 
beforeObj.getUid().getUidValue());
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.getUpdateTasks(
+                null,
                 any.getType().getKind(),
                 any.getKey(),
                 changepwd,
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 77f9f94ee1..577c6d8e01 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -322,8 +322,7 @@ public class DefaultRealmPullResultHandler
 
                     List<PropagationTaskInfo> taskInfos = 
propagationManager.setAttributeDeltas(
                             propagationManager.createTasks(realm, propByRes, 
null),
-                            beforeAttrs,
-                            null);
+                            beforeAttrs);
                     taskExecutor.execute(taskInfos, false, 
securityProperties.getAdminUser());
 
                     for (PullActions action : profile.getActions()) {
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
index f1f4a2a1b5..17050efa84 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
@@ -114,8 +114,7 @@ public class DefaultRealmPushResultHandler
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.setAttributeDeltas(
                 propagationManager.createTasks(realm, propByRes, null),
-                beforeAttrs,
-                null);
+                beforeAttrs);
         if (!taskInfos.isEmpty()) {
             taskInfos.get(0).setBeforeObj(Optional.ofNullable(beforeObj));
             PropagationReporter reporter = new DefaultPropagationReporter();
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
index d19f74580f..12e4dde3f4 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultUserPushResultHandler.java
@@ -125,6 +125,7 @@ public class DefaultUserPushResultHandler extends 
AbstractPushResultHandler impl
                 Pair.of(account.getResource().getKey(), 
account.getConnObjectKeyValue())));
 
         List<PropagationTaskInfo> taskInfos = 
propagationManager.getUpdateTasks(
+                null,
                 any.getType().getKind(),
                 any.getKey(),
                 true,

Reply via email to