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

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

commit 62d1b00618d252c7a073daef2613e6b30a23a0af
Author: Francesco Chicchiriccò <ilgro...@apache.org>
AuthorDate: Mon Mar 23 12:03:27 2020 +0100

    [SYNCOPE-1535] Extending to Push
---
 .../java/pushpull/PullJobDelegate.java             |  5 +-
 .../java/pushpull/PushJobDelegate.java             | 82 +++++++++++++---------
 2 files changed, 50 insertions(+), 37 deletions(-)

diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
index ded6b13..7fce45f 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
@@ -273,6 +273,7 @@ public class PullJobDelegate extends 
AbstractProvisioningJobDelegate<PullTask> i
             }
         }
 
+        // ...then provisions for any types
         ProvisionSorter provisionSorter = new DefaultProvisionSorter();
         if (pullTask.getResource().getProvisionSorter() != null) {
             try {
@@ -281,8 +282,7 @@ public class PullJobDelegate extends 
AbstractProvisioningJobDelegate<PullTask> i
                 LOG.error("While building {}", 
pullTask.getResource().getProvisionSorter(), e);
             }
         }
-        // ...then provisions for any types
-        SyncopePullResultHandler handler;
+
         GroupPullResultHandler ghandler = buildGroupHandler();
         for (Provision provision : 
pullTask.getResource().getProvisions().stream().
                 filter(provision -> provision.getMapping() != 
null).sorted(provisionSorter).
@@ -290,6 +290,7 @@ public class PullJobDelegate extends 
AbstractProvisioningJobDelegate<PullTask> i
 
             status.set("Pulling " + 
provision.getObjectClass().getObjectClassValue());
 
+            SyncopePullResultHandler handler;
             switch (provision.getAnyType().getKind()) {
                 case USER:
                     handler = buildUserHandler();
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
index 726323c..d890765 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
@@ -24,7 +24,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
-
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.MutablePair;
 import org.apache.syncope.common.lib.SyncopeConstants;
@@ -47,6 +47,7 @@ import 
org.apache.syncope.core.persistence.api.entity.task.PushTaskAnyFilter;
 import org.apache.syncope.core.persistence.api.entity.user.User;
 import org.apache.syncope.core.persistence.api.search.SearchCondVisitor;
 import org.apache.syncope.core.provisioning.api.Connector;
+import org.apache.syncope.core.provisioning.api.ProvisionSorter;
 import 
org.apache.syncope.core.provisioning.api.pushpull.AnyObjectPushResultHandler;
 import 
org.apache.syncope.core.provisioning.api.pushpull.GroupPushResultHandler;
 import org.apache.syncope.core.provisioning.api.pushpull.ProvisioningProfile;
@@ -54,6 +55,7 @@ import 
org.apache.syncope.core.provisioning.api.pushpull.PushActions;
 import 
org.apache.syncope.core.provisioning.api.pushpull.RealmPushResultHandler;
 import 
org.apache.syncope.core.provisioning.api.pushpull.SyncopePushResultHandler;
 import org.apache.syncope.core.provisioning.api.pushpull.UserPushResultHandler;
+import org.apache.syncope.core.provisioning.java.DefaultProvisionSorter;
 import org.apache.syncope.core.spring.ImplementationManager;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -202,47 +204,57 @@ public class PushJobDelegate extends 
AbstractProvisioningJobDelegate<PushTask> {
         }
 
         // ...then provisions for any types
-        for (Provision provision : pushTask.getResource().getProvisions()) {
-            if (provision.getMapping() != null) {
-                status.set("Pushing " + provision.getAnyType().getKey());
+        ProvisionSorter provisionSorter = new DefaultProvisionSorter();
+        if (pushTask.getResource().getProvisionSorter() != null) {
+            try {
+                provisionSorter = 
ImplementationManager.build(pushTask.getResource().getProvisionSorter());
+            } catch (Exception e) {
+                LOG.error("While building {}", 
pushTask.getResource().getProvisionSorter(), e);
+            }
+        }
 
-                AnyDAO<?> anyDAO = 
anyUtilsFactory.getInstance(provision.getAnyType().getKind()).dao();
+        for (Provision provision : 
pushTask.getResource().getProvisions().stream().
+                filter(provision -> provision.getMapping() != 
null).sorted(provisionSorter).
+                collect(Collectors.toList())) {
 
-                SyncopePushResultHandler handler;
-                switch (provision.getAnyType().getKind()) {
-                    case USER:
-                        handler = buildUserHandler();
-                        break;
+            status.set("Pushing " + provision.getAnyType().getKey());
 
-                    case GROUP:
-                        handler = buildGroupHandler();
-                        break;
+            AnyDAO<?> anyDAO = 
anyUtilsFactory.getInstance(provision.getAnyType().getKind()).dao();
 
-                    case ANY_OBJECT:
-                    default:
-                        handler = buildAnyObjectHandler();
-                }
-                handler.setProfile(profile);
-
-                Optional<? extends PushTaskAnyFilter> anyFilter = 
pushTask.getFilter(provision.getAnyType());
-                String filter = 
anyFilter.map(PushTaskAnyFilter::getFIQLCond).orElse(null);
-                SearchCond cond = StringUtils.isBlank(filter)
-                        ? anyDAO.getAllMatchingCond()
-                        : SearchCondConverter.convert(searchCondVisitor, 
filter);
-                int count = searchDAO.count(
+            SyncopePushResultHandler handler;
+            switch (provision.getAnyType().getKind()) {
+                case USER:
+                    handler = buildUserHandler();
+                    break;
+
+                case GROUP:
+                    handler = buildGroupHandler();
+                    break;
+
+                case ANY_OBJECT:
+                default:
+                    handler = buildAnyObjectHandler();
+            }
+            handler.setProfile(profile);
+
+            Optional<? extends PushTaskAnyFilter> anyFilter = 
pushTask.getFilter(provision.getAnyType());
+            String filter = 
anyFilter.map(PushTaskAnyFilter::getFIQLCond).orElse(null);
+            SearchCond cond = StringUtils.isBlank(filter)
+                    ? anyDAO.getAllMatchingCond()
+                    : SearchCondConverter.convert(searchCondVisitor, filter);
+            int count = searchDAO.count(
+                    Set.of(profile.getTask().getSourceRealm().getFullPath()),
+                    cond,
+                    provision.getAnyType().getKind());
+            for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) + 1 
&& !interrupt; page++) {
+                List<? extends Any<?>> anys = searchDAO.search(
                         
Set.of(profile.getTask().getSourceRealm().getFullPath()),
                         cond,
+                        page,
+                        AnyDAO.DEFAULT_PAGE_SIZE,
+                        List.of(),
                         provision.getAnyType().getKind());
-                for (int page = 1; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE) 
+ 1 && !interrupt; page++) {
-                    List<? extends Any<?>> anys = searchDAO.search(
-                            
Set.of(profile.getTask().getSourceRealm().getFullPath()),
-                            cond,
-                            page,
-                            AnyDAO.DEFAULT_PAGE_SIZE,
-                            List.of(),
-                            provision.getAnyType().getKind());
-                    doHandle(anys, handler, pushTask.getResource());
-                }
+                doHandle(anys, handler, pushTask.getResource());
             }
         }
 

Reply via email to