You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/10/16 08:40:34 UTC

[1/2] syncope git commit: [SYNCOPE-1224] Properly using pagination for bulk delete

Repository: syncope
Updated Branches:
  refs/heads/2_0_X 4525e3c9b -> e3a209352
  refs/heads/master d641ee222 -> a799dbc0b


[SYNCOPE-1224] Properly using pagination for bulk delete


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

Branch: refs/heads/2_0_X
Commit: e3a20935270457f85da4822e7b02eb837e25a8be
Parents: 4525e3c
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Oct 16 10:38:19 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Oct 16 10:38:19 2017 +0200

----------------------------------------------------------------------
 .../commands/user/UserSyncopeOperations.java    | 34 +++++++++++++-------
 1 file changed, 23 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/e3a20935/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
index cc9101b..4cd5227 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
@@ -31,6 +31,8 @@ import org.apache.syncope.common.rest.api.service.UserService;
 
 public class UserSyncopeOperations {
 
+    private static final int PAGE_SIZE = 100;
+
     private final UserService userService = SyncopeServices.get(UserService.class);
 
     public boolean auth(final String username, final String password) {
@@ -72,23 +74,33 @@ public class UserSyncopeOperations {
 
     public Map<String, BulkActionResult.Status> deleteByAttribute(
             final String realm, final String attributeName, final String attributeValue) {
-        final List<UserTO> users = userService.search(new AnyQuery.Builder().realm(realm).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().is(attributeName).equalTo(attributeValue)
-                        .query()).build()).getResult();
-        return deleteBulk(users);
+
+        return bulkDelete(new AnyQuery.Builder().realm(realm).fiql(
+                SyncopeClient.getUserSearchConditionBuilder().is(attributeName).equalTo(attributeValue).query()).
+                build());
     }
 
     public Map<String, BulkActionResult.Status> deleteAll(final String realm) {
-        return deleteBulk(userService.search(new AnyQuery.Builder().realm(realm).details(false).build()).getResult());
+        return bulkDelete(new AnyQuery.Builder().realm(realm).details(false).build());
     }
 
-    private Map<String, BulkActionResult.Status> deleteBulk(final List<UserTO> users) {
-        final BulkAction bulkAction = new BulkAction();
+    private Map<String, BulkActionResult.Status> bulkDelete(final AnyQuery query) {
+        query.setPage(0);
+        query.setSize(0);
+        int count = userService.search(query).getTotalCount();
+
+        BulkAction bulkAction = new BulkAction();
         bulkAction.setType(BulkAction.Type.DELETE);
-        for (UserTO user : users) {
-            bulkAction.getTargets().add(String.valueOf(user.getKey()));
+
+        query.setSize(PAGE_SIZE);
+        for (int page = 1; page <= (count / PAGE_SIZE) + 1; page++) {
+            query.setPage(page);
+
+            for (UserTO user : userService.search(query).getResult()) {
+                bulkAction.getTargets().add(user.getKey());
+            }
         }
-        final BulkActionResult bulkResult = userService.bulk(bulkAction).readEntity(BulkActionResult.class);
-        return bulkResult.getResults();
+
+        return userService.bulk(bulkAction).readEntity(BulkActionResult.class).getResults();
     }
 }


[2/2] syncope git commit: [SYNCOPE-1224] Properly using pagination for bulk delete

Posted by il...@apache.org.
[SYNCOPE-1224] Properly using pagination for bulk delete


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

Branch: refs/heads/master
Commit: a799dbc0bbcce4635ab41cd8e6867431aa434702
Parents: d641ee2
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Oct 16 10:38:19 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Oct 16 10:40:21 2017 +0200

----------------------------------------------------------------------
 .../commands/user/UserSyncopeOperations.java    | 37 +++++++++++++-------
 1 file changed, 25 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/a799dbc0/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
index cbd0eb5..6efa544 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserSyncopeOperations.java
@@ -20,10 +20,12 @@ package org.apache.syncope.client.cli.commands.user;
 
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 import org.apache.syncope.client.cli.SyncopeServices;
 import org.apache.syncope.client.lib.SyncopeClient;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
+import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.rest.api.beans.AnyQuery;
@@ -31,6 +33,8 @@ import org.apache.syncope.common.rest.api.service.UserService;
 
 public class UserSyncopeOperations {
 
+    private static final int PAGE_SIZE = 100;
+
     private final UserService userService = SyncopeServices.get(UserService.class);
 
     public boolean auth(final String username, final String password) {
@@ -72,23 +76,32 @@ public class UserSyncopeOperations {
 
     public Map<String, BulkActionResult.Status> deleteByAttribute(
             final String realm, final String attributeName, final String attributeValue) {
-        final List<UserTO> users = userService.search(new AnyQuery.Builder().realm(realm).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().is(attributeName).equalTo(attributeValue)
-                        .query()).build()).getResult();
-        return deleteBulk(users);
+
+        return bulkDelete(new AnyQuery.Builder().realm(realm).fiql(
+                SyncopeClient.getUserSearchConditionBuilder().is(attributeName).equalTo(attributeValue).query()).
+                build());
     }
 
     public Map<String, BulkActionResult.Status> deleteAll(final String realm) {
-        return deleteBulk(userService.search(new AnyQuery.Builder().realm(realm).details(false).build()).getResult());
+        return bulkDelete(new AnyQuery.Builder().realm(realm).details(false).build());
     }
 
-    private Map<String, BulkActionResult.Status> deleteBulk(final List<UserTO> users) {
-        final BulkAction bulkAction = new BulkAction();
+    private Map<String, BulkActionResult.Status> bulkDelete(final AnyQuery query) {
+        query.setPage(0);
+        query.setSize(0);
+        int count = userService.search(query).getTotalCount();
+
+        BulkAction bulkAction = new BulkAction();
         bulkAction.setType(BulkAction.Type.DELETE);
-        users.forEach(user -> {
-            bulkAction.getTargets().add(user.getKey());
-        });
-        final BulkActionResult bulkResult = userService.bulk(bulkAction).readEntity(BulkActionResult.class);
-        return bulkResult.getResults();
+
+        query.setSize(PAGE_SIZE);
+        for (int page = 1; page <= (count / PAGE_SIZE) + 1; page++) {
+            query.setPage(page);
+
+            bulkAction.getTargets().addAll(userService.search(query).getResult().stream().
+                    map(EntityTO::getKey).collect(Collectors.toList()));
+        }
+
+        return userService.bulk(bulkAction).readEntity(BulkActionResult.class).getResults();
     }
 }