in scim-server/src/main/java/org/apache/directory/scim/server/rest/BaseResourceTypeResourceImpl.java [204:252]
public Response find(SearchRequest request) throws ScimException, ResourceException {
Repository<T> repository = getRepositoryInternal();
Set<AttributeReference> attributeReferences = Optional.ofNullable(request.getAttributes())
.orElse(Collections.emptySet());
Set<AttributeReference> excludedAttributeReferences = Optional.ofNullable(request.getExcludedAttributes())
.orElse(Collections.emptySet());
validateAttributes(attributeReferences, excludedAttributeReferences);
Filter filter = request.getFilter();
PageRequest pageRequest = request.getPageRequest();
SortRequest sortRequest = request.getSortRequest();
ListResponse<T> listResponse = new ListResponse<>();
FilterResponse<T> filterResp = repository.find(filter, pageRequest, sortRequest);
// If no resources are found, we should still return a ListResponse with
// the totalResults set to 0;
// (https://tools.ietf.org/html/rfc7644#section-3.4.2)
if (filterResp == null || filterResp.getResources() == null || filterResp.getResources()
.isEmpty()) {
listResponse.setTotalResults(0);
} else {
log.debug("Find returned " + filterResp.getResources()
.size());
listResponse.setItemsPerPage(filterResp.getResources()
.size());
int startIndex = Optional.ofNullable(filterResp.getPageRequest().getStartIndex()).orElse(1);
listResponse.setStartIndex(startIndex);
listResponse.setTotalResults(filterResp.getTotalResults());
List<T> results = new ArrayList<>();
for (T resource : filterResp.getResources()) {
// Process Attributes
resource = processFilterAttributeExtensions(repository, resource, attributeReferences, excludedAttributeReferences);
resource = attributesForDisplayThrowOnError(resource, attributeReferences, excludedAttributeReferences);
results.add(resource);
}
listResponse.setResources(results);
}
return Response.ok()
.entity(listResponse)
.build();
}