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