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