Fixing ConnObjects' paginated list

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

Branch: refs/heads/2_0_X
Commit: 4866d9219eeda81f1fe8d77da651afcf860991aa
Parents: eac8414
Author: Francesco Chicchiriccò <ilgro...@apache.org>
Authored: Fri Sep 15 16:30:55 2017 +0200
Committer: Francesco Chicchiriccò <ilgro...@apache.org>
Committed: Fri Sep 15 16:30:55 2017 +0200

----------------------------------------------------------------------
 .../apache/syncope/core/logic/ResourceLogic.java | 12 +++---------
 .../syncope/core/provisioning/api/Connector.java |  7 +++++--
 .../provisioning/java/ConnectorFacadeProxy.java  | 19 ++++++++++++-------
 3 files changed, 20 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/4866d921/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
----------------------------------------------------------------------
diff --git 
a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java 
b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index 24136aa..e3777cb 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -75,9 +75,9 @@ import 
org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.identityconnectors.framework.common.objects.Name;
 import org.identityconnectors.framework.common.objects.ObjectClass;
 import org.identityconnectors.framework.common.objects.OperationOptions;
+import org.identityconnectors.framework.common.objects.ResultsHandler;
 import org.identityconnectors.framework.common.objects.SearchResult;
 import org.identityconnectors.framework.common.objects.Uid;
-import org.identityconnectors.framework.spi.SearchResultsHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Component;
@@ -403,19 +403,13 @@ public class ResourceLogic extends 
AbstractTransactionalLogic<ResourceTO> {
             options = MappingUtils.buildOperationOptions(mapItems);
         }
 
-        final SearchResult[] searchResult = new SearchResult[1];
         final List<ConnObjectTO> connObjects = new ArrayList<>();
 
-        connFactory.getConnector(resource).search(objectClass, null, new 
SearchResultsHandler() {
+        SearchResult searchResult = 
connFactory.getConnector(resource).search(objectClass, null, new 
ResultsHandler() {
 
             private int count;
 
             @Override
-            public void handleResult(final SearchResult result) {
-                searchResult[0] = result;
-            }
-
-            @Override
             public boolean handle(final ConnectorObject connectorObject) {
                 
connObjects.add(connObjectUtils.getConnObjectTO(connectorObject));
                 // safety protection against uncontrolled result size
@@ -424,7 +418,7 @@ public class ResourceLogic extends 
AbstractTransactionalLogic<ResourceTO> {
             }
         }, size, pagedResultsCookie, orderBy, options);
 
-        return ImmutablePair.of(searchResult[0], connObjects);
+        return ImmutablePair.of(searchResult, connObjects);
     }
 
     @PreAuthorize("hasRole('" + StandardEntitlement.CONNECTOR_READ + "')")

http://git-wip-us.apache.org/repos/asf/syncope/blob/4866d921/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
index 324c1d9..901cdc7 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
@@ -33,6 +33,7 @@ import 
org.identityconnectors.framework.common.objects.SyncToken;
 import org.identityconnectors.framework.common.objects.Uid;
 import org.identityconnectors.framework.common.objects.filter.Filter;
 import 
org.apache.syncope.core.provisioning.api.pushpull.ReconciliationFilterBuilder;
+import org.identityconnectors.framework.common.objects.SearchResult;
 
 /**
  * Entry point for making requests on underlying connector bundles.
@@ -153,8 +154,9 @@ public interface Connector {
      * @param filter search filter
      * @param handler class responsible for working with the objects returned 
from the search; may be null.
      * @param options ConnId's OperationOptions
+     * @return search result
      */
-    void search(
+    SearchResult search(
             ObjectClass objectClass,
             Filter filter,
             ResultsHandler handler,
@@ -172,8 +174,9 @@ public interface Connector {
      * @param orderBy the sort keys which should be used for ordering the 
{@link ConnectorObject} returned by
      * search request
      * @param options ConnId's OperationOptions
+     * @return search result
      */
-    void search(
+    SearchResult search(
             ObjectClass objectClass,
             Filter filter,
             ResultsHandler handler,

http://git-wip-us.apache.org/repos/asf/syncope/blob/4866d921/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
----------------------------------------------------------------------
diff --git 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
index 2b42e91..de4aeba 100644
--- 
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
+++ 
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
@@ -421,15 +421,18 @@ public class ConnectorFacadeProxy implements Connector {
     }
 
     @Override
-    public void search(
+    public SearchResult search(
             final ObjectClass objectClass,
             final Filter filter,
             final ResultsHandler handler,
             final OperationOptions options) {
 
+        SearchResult result = null;
+
         if 
(connInstance.getCapabilities().contains(ConnectorCapability.SEARCH)) {
             if (options.getPageSize() == null && 
options.getPagedResultsCookie() == null) {
-                OperationOptionsBuilder builder = new 
OperationOptionsBuilder(options).setPageSize(DEFAULT_PAGE_SIZE);
+                OperationOptionsBuilder builder = new 
OperationOptionsBuilder(options).
+                        
setPageSize(DEFAULT_PAGE_SIZE).setPagedResultsOffset(-1);
 
                 final String[] cookies = new String[] { null };
                 do {
@@ -437,7 +440,7 @@ public class ConnectorFacadeProxy implements Connector {
                         builder.setPagedResultsCookie(cookies[0]);
                     }
 
-                    connector.search(objectClass, filter, new 
SearchResultsHandler() {
+                    result = connector.search(objectClass, filter, new 
SearchResultsHandler() {
 
                         @Override
                         public void handleResult(final SearchResult result) {
@@ -454,16 +457,18 @@ public class ConnectorFacadeProxy implements Connector {
                     }, builder.build());
                 } while (cookies[0] != null);
             } else {
-                connector.search(objectClass, filter, handler, options);
+                result = connector.search(objectClass, filter, handler, 
options);
             }
         } else {
             LOG.info("Search was attempted, although the connector only has 
these capabilities: {}. No action.",
                     connInstance.getCapabilities());
         }
+
+        return result;
     }
 
     @Override
-    public void search(
+    public SearchResult search(
             final ObjectClass objectClass,
             final Filter filter,
             final ResultsHandler handler,
@@ -472,7 +477,7 @@ public class ConnectorFacadeProxy implements Connector {
             final List<OrderByClause> orderBy,
             final OperationOptions options) {
 
-        OperationOptionsBuilder builder = new 
OperationOptionsBuilder().setPageSize(pageSize);
+        OperationOptionsBuilder builder = new 
OperationOptionsBuilder().setPageSize(pageSize).setPagedResultsOffset(-1);
         if (pagedResultsCookie != null) {
             builder.setPagedResultsCookie(pagedResultsCookie);
         }
@@ -486,7 +491,7 @@ public class ConnectorFacadeProxy implements Connector {
 
         builder.setAttributesToGet(options.getAttributesToGet());
 
-        search(objectClass, filter, handler, builder.build());
+        return search(objectClass, filter, handler, builder.build());
     }
 
     @Override

Reply via email to