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/09/15 14:31:21 UTC

[1/4] syncope git commit: Fixing propagation tasks pagination

Repository: syncope
Updated Branches:
  refs/heads/2_0_X e06b0f251 -> 4866d9219
  refs/heads/master 6da490da5 -> 2cb546fe0


Fixing propagation tasks pagination


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

Branch: refs/heads/2_0_X
Commit: eac8414e23a6adc38c4f21dd466e6dc54eb9b427
Parents: e06b0f2
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Sep 15 16:22:34 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Sep 15 16:22:34 2017 +0200

----------------------------------------------------------------------
 .../syncope/client/console/commons/TaskDataProvider.java | 11 +----------
 .../console/tasks/NotificationTaskDirectoryPanel.java    |  7 ++++++-
 .../console/tasks/PropagationTaskDirectoryPanel.java     |  7 ++++++-
 .../client/console/tasks/SchedTaskDirectoryPanel.java    |  9 +++++++--
 4 files changed, 20 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/eac8414e/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
index 5e917d1..46312cb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.commons;
 
-import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.common.lib.to.AbstractTaskTO;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
@@ -33,12 +32,9 @@ public abstract class TaskDataProvider<T extends AbstractTaskTO> extends Directo
 
     protected final TaskType taskType;
 
-    private final TaskRestClient taskRestClient;
-
-    public TaskDataProvider(final int paginatorRows, final TaskType taskType, final TaskRestClient taskRestClient) {
+    public TaskDataProvider(final int paginatorRows, final TaskType taskType) {
         super(paginatorRows);
 
-        this.taskRestClient = taskRestClient;
         setSort("start", SortOrder.ASCENDING);
         comparator = new SortableDataProviderComparator<>(this);
         this.taskType = taskType;
@@ -49,11 +45,6 @@ public abstract class TaskDataProvider<T extends AbstractTaskTO> extends Directo
     }
 
     @Override
-    public long size() {
-        return taskRestClient.count(taskType);
-    }
-
-    @Override
     public IModel<T> model(final T object) {
         return new CompoundPropertyModel<>(object);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/eac8414e/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index eb859a6..d8ffb71 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -210,13 +210,18 @@ public abstract class NotificationTaskDirectoryPanel
                 final String entityKey,
                 final int paginatorRows) {
 
-            super(paginatorRows, TaskType.NOTIFICATION, restClient);
+            super(paginatorRows, TaskType.NOTIFICATION);
             this.notification = notification;
             this.anyTypeKind = anyTypeKind;
             this.entityKey = entityKey;
         }
 
         @Override
+        public long size() {
+            return restClient.count(TaskType.NOTIFICATION);
+        }
+
+        @Override
         public Iterator<NotificationTaskTO> iterator(final long first, final long count) {
             final int page = ((int) first / paginatorRows);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/eac8414e/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index 0db71d5..1c63efd 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -206,7 +206,12 @@ public abstract class PropagationTaskDirectoryPanel
         private static final long serialVersionUID = 4725679400450513556L;
 
         public PropagationTasksProvider(final int paginatorRows) {
-            super(paginatorRows, TaskType.PROPAGATION, restClient);
+            super(paginatorRows, TaskType.PROPAGATION);
+        }
+
+        @Override
+        public long size() {
+            return restClient.count(resource, TaskType.PROPAGATION);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/eac8414e/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index 7663235..c19940e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -309,13 +309,18 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
 
         private final Class<T> reference;
 
-        public SchedTasksProvider(final Class<T> reference, final TaskType id, final int paginatorRows) {
-            super(paginatorRows, id, restClient);
+        public SchedTasksProvider(final Class<T> reference, final TaskType taskType, final int paginatorRows) {
+            super(paginatorRows, taskType);
             setSort("name", SortOrder.ASCENDING);
             this.reference = reference;
         }
 
         @Override
+        public long size() {
+            return restClient.count(taskType);
+        }
+
+        @Override
         public Iterator<T> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
 


[2/4] syncope git commit: Fixing ConnObjects' paginated list

Posted by il...@apache.org.
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ò <il...@apache.org>
Authored: Fri Sep 15 16:30:55 2017 +0200
Committer: Francesco Chicchiriccò <il...@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


[3/4] syncope git commit: Fixing propagation tasks pagination

Posted by il...@apache.org.
Fixing propagation tasks pagination


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

Branch: refs/heads/master
Commit: 1fb88619787848f144b42d16d56228c2c3b2c339
Parents: 6da490d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Sep 15 16:22:34 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Sep 15 16:31:05 2017 +0200

----------------------------------------------------------------------
 .../syncope/client/console/commons/TaskDataProvider.java | 11 +----------
 .../console/tasks/NotificationTaskDirectoryPanel.java    |  7 ++++++-
 .../console/tasks/PropagationTaskDirectoryPanel.java     |  7 ++++++-
 .../client/console/tasks/SchedTaskDirectoryPanel.java    |  9 +++++++--
 4 files changed, 20 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/1fb88619/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
index 5e917d1..46312cb 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/TaskDataProvider.java
@@ -18,7 +18,6 @@
  */
 package org.apache.syncope.client.console.commons;
 
-import org.apache.syncope.client.console.rest.TaskRestClient;
 import org.apache.syncope.common.lib.to.AbstractTaskTO;
 import org.apache.syncope.common.lib.types.TaskType;
 import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
@@ -33,12 +32,9 @@ public abstract class TaskDataProvider<T extends AbstractTaskTO> extends Directo
 
     protected final TaskType taskType;
 
-    private final TaskRestClient taskRestClient;
-
-    public TaskDataProvider(final int paginatorRows, final TaskType taskType, final TaskRestClient taskRestClient) {
+    public TaskDataProvider(final int paginatorRows, final TaskType taskType) {
         super(paginatorRows);
 
-        this.taskRestClient = taskRestClient;
         setSort("start", SortOrder.ASCENDING);
         comparator = new SortableDataProviderComparator<>(this);
         this.taskType = taskType;
@@ -49,11 +45,6 @@ public abstract class TaskDataProvider<T extends AbstractTaskTO> extends Directo
     }
 
     @Override
-    public long size() {
-        return taskRestClient.count(taskType);
-    }
-
-    @Override
     public IModel<T> model(final T object) {
         return new CompoundPropertyModel<>(object);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/1fb88619/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
index fd73ab0..70dae9b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/NotificationTaskDirectoryPanel.java
@@ -210,13 +210,18 @@ public abstract class NotificationTaskDirectoryPanel
                 final String entityKey,
                 final int paginatorRows) {
 
-            super(paginatorRows, TaskType.NOTIFICATION, restClient);
+            super(paginatorRows, TaskType.NOTIFICATION);
             this.notification = notification;
             this.anyTypeKind = anyTypeKind;
             this.entityKey = entityKey;
         }
 
         @Override
+        public long size() {
+            return restClient.count(TaskType.NOTIFICATION);
+        }
+
+        @Override
         public Iterator<NotificationTaskTO> iterator(final long first, final long count) {
             final int page = ((int) first / paginatorRows);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1fb88619/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index 5d37b79..ba3b122 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -206,7 +206,12 @@ public abstract class PropagationTaskDirectoryPanel
         private static final long serialVersionUID = 4725679400450513556L;
 
         public PropagationTasksProvider(final int paginatorRows) {
-            super(paginatorRows, TaskType.PROPAGATION, restClient);
+            super(paginatorRows, TaskType.PROPAGATION);
+        }
+
+        @Override
+        public long size() {
+            return restClient.count(resource, TaskType.PROPAGATION);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/1fb88619/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
index ca540b6..069e34b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/SchedTaskDirectoryPanel.java
@@ -309,13 +309,18 @@ public abstract class SchedTaskDirectoryPanel<T extends SchedTaskTO>
 
         private final Class<T> reference;
 
-        public SchedTasksProvider(final Class<T> reference, final TaskType id, final int paginatorRows) {
-            super(paginatorRows, id, restClient);
+        public SchedTasksProvider(final Class<T> reference, final TaskType taskType, final int paginatorRows) {
+            super(paginatorRows, taskType);
             setSort("name", SortOrder.ASCENDING);
             this.reference = reference;
         }
 
         @Override
+        public long size() {
+            return restClient.count(taskType);
+        }
+
+        @Override
         public Iterator<T> iterator(final long first, final long count) {
             int page = ((int) first / paginatorRows);
 


[4/4] syncope git commit: Fixing ConnObjects' paginated list

Posted by il...@apache.org.
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/2cb546fe
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/2cb546fe
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/2cb546fe

Branch: refs/heads/master
Commit: 2cb546fe0ea641a484c2dc1b561a7e63ed8b361e
Parents: 1fb8861
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Sep 15 16:30:55 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Sep 15 16:31:09 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/2cb546fe/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 16d2882..87a0c43 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
@@ -72,9 +72,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;
@@ -390,19 +390,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
@@ -411,7 +405,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/2cb546fe/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/2cb546fe/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 10f2e03..b122c9e 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
@@ -412,15 +412,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 {
@@ -428,7 +431,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) {
@@ -445,16 +448,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,
@@ -463,7 +468,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);
         }
@@ -473,7 +478,7 @@ public class ConnectorFacadeProxy implements Connector {
 
         builder.setAttributesToGet(options.getAttributesToGet());
 
-        search(objectClass, filter, handler, builder.build());
+        return search(objectClass, filter, handler, builder.build());
     }
 
     @Override