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 09:15:52 UTC

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

[SYNCOPE-1224] Properly using pagination for search


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

Branch: refs/heads/master
Commit: fdc991aa67cb9d3093948d7bb87f6b70317aa825
Parents: a799dbc
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Mon Oct 16 11:12:02 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Mon Oct 16 11:14:32 2017 +0200

----------------------------------------------------------------------
 .../client/cli/commands/user/UserDetails.java   |  6 ++--
 .../client/cli/commands/user/UserList.java      |  5 +--
 .../commands/user/UserSyncopeOperations.java    | 35 +++++++++++++++-----
 3 files changed, 30 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/fdc991aa/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDetails.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDetails.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDetails.java
index 59bbf3a..ade6cb3 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDetails.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserDetails.java
@@ -43,12 +43,12 @@ public class UserDetails extends AbstractUserCommand {
         if (input.parameterNumber() == 0) {
             try {
                 final Map<String, String> details = new LinkedHashMap<>();
-                final List<UserTO> usersTOs = userSyncopeOperations.list().getResult();
+                final List<UserTO> users = userSyncopeOperations.list();
                 int withoutResource = 0;
                 int withoutRole = 0;
                 int activeStatus = 0;
                 int suspendedStatus = 0;
-                for (final UserTO userTO : usersTOs) {
+                for (final UserTO userTO : users) {
                     if (userTO.getResources().isEmpty()) {
                         withoutResource++;
                     }
@@ -61,7 +61,7 @@ public class UserDetails extends AbstractUserCommand {
                         suspendedStatus++;
                     }
                 }
-                details.put("Total number", String.valueOf(usersTOs.size()));
+                details.put("Total number", String.valueOf(users.size()));
                 details.put("Active", String.valueOf(activeStatus));
                 details.put("Suspended", String.valueOf(suspendedStatus));
                 details.put("Without resources", String.valueOf(withoutResource));

http://git-wip-us.apache.org/repos/asf/syncope/blob/fdc991aa/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserList.java
----------------------------------------------------------------------
diff --git a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserList.java b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserList.java
index 48be66c..d83b734 100644
--- a/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserList.java
+++ b/client/cli/src/main/java/org/apache/syncope/client/cli/commands/user/UserList.java
@@ -21,8 +21,6 @@ package org.apache.syncope.client.cli.commands.user;
 import java.util.Scanner;
 import org.apache.syncope.client.cli.Input;
 import org.apache.syncope.common.lib.SyncopeClientException;
-import org.apache.syncope.common.lib.to.PagedResult;
-import org.apache.syncope.common.lib.to.UserTO;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -46,8 +44,7 @@ public class UserList extends AbstractUserCommand {
                         "\nThis operation might produce very large output. Do you want to continue? [yes/no]");
                 final String answer = scanIn.nextLine();
                 if ("yes".equalsIgnoreCase(answer)) {
-                    final PagedResult<UserTO> uResult = userSyncopeOperations.list();
-                    userResultManager.printUsers(uResult.getResult());
+                    userResultManager.printUsers(userSyncopeOperations.list());
                 } else if ("no".equalsIgnoreCase(answer)) {
                     userResultManager.genericError("List operation skipped");
                 } else {

http://git-wip-us.apache.org/repos/asf/syncope/blob/fdc991aa/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 6efa544..42fb5a3 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
@@ -18,6 +18,7 @@
  */
 package org.apache.syncope.client.cli.commands.user;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -26,7 +27,6 @@ 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;
 import org.apache.syncope.common.rest.api.service.UserService;
@@ -47,23 +47,40 @@ public class UserSyncopeOperations {
     }
 
     public List<UserTO> searchByRole(final String realm, final String role) {
-        return userService.search(new AnyQuery.Builder().realm(realm).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().inRoles(role).query()).build()).getResult();
+        return search(new AnyQuery.Builder().realm(realm).
+                fiql(SyncopeClient.getUserSearchConditionBuilder().inRoles(role).query()).build());
     }
 
     public List<UserTO> searchByResource(final String realm, final String resource) {
-        return userService.search(new AnyQuery.Builder().realm(realm).
-                fiql(SyncopeClient.getUserSearchConditionBuilder().hasResources(resource).query()).build()).getResult();
+        return search(new AnyQuery.Builder().realm(realm).
+                fiql(SyncopeClient.getUserSearchConditionBuilder().hasResources(resource).query()).build());
     }
 
     public List<UserTO> searchByAttribute(final String realm, final String attributeName, final String attributeValue) {
-        return userService.search(new AnyQuery.Builder().realm(realm).
+        return search(new AnyQuery.Builder().realm(realm).
                 fiql(SyncopeClient.getUserSearchConditionBuilder().is(attributeName).equalTo(attributeValue).query()).
-                build()).getResult();
+                build());
+    }
+
+    public List<UserTO> list() {
+        return search(new AnyQuery());
     }
 
-    public PagedResult<UserTO> list() {
-        return userService.search(new AnyQuery());
+    private List<UserTO> search(final AnyQuery query) {
+        query.setPage(0);
+        query.setSize(0);
+        int count = userService.search(query).getTotalCount();
+
+        List<UserTO> result = new ArrayList<>();
+
+        query.setSize(PAGE_SIZE);
+        for (int page = 1; page <= (count / PAGE_SIZE) + 1; page++) {
+            query.setPage(page);
+
+            result.addAll(userService.search(query).getResult());
+        }
+
+        return result;
     }
 
     public UserTO read(final String userKey) {