DS-3489: Update search objects response document

This commit is contained in:
Tom Desair
2017-10-26 17:39:19 +02:00
committed by Tom Desair
parent 0a5e5f3052
commit 659a6f4cb2
5 changed files with 47 additions and 57 deletions

View File

@@ -8,10 +8,8 @@ import org.dspace.app.rest.model.SearchFacetValueRest;
import org.dspace.app.rest.model.SearchResultsRest;
import org.dspace.app.rest.parameter.SearchFilter;
import org.dspace.core.Context;
import org.dspace.discovery.DiscoverQuery;
import org.dspace.discovery.DiscoverResult;
import org.dspace.discovery.configuration.DiscoveryConfiguration;
import org.dspace.discovery.configuration.DiscoveryConfigurationParameters;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component;
@@ -19,12 +17,12 @@ import org.springframework.stereotype.Component;
public class DiscoverFacetResultsConverter {
public FacetResultsRest convert(Context context, String facetName, DiscoverQuery discoverQuery, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult, DiscoveryConfiguration configuration, Pageable page){
public FacetResultsRest convert(Context context, String facetName, String query, String dsoType, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult, DiscoveryConfiguration configuration, Pageable page){
FacetResultsRest facetResultsRest = new FacetResultsRest();
addToFacetResultList(facetName, searchResult, facetResultsRest, page);
setRequestInformation(context, facetName, discoverQuery, dsoScope, searchFilters, searchResult, configuration, facetResultsRest, page);
setRequestInformation(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, facetResultsRest, page);
return facetResultsRest;
}
@@ -50,11 +48,11 @@ public class DiscoverFacetResultsConverter {
return searchFacetValueRest;
}
private void setRequestInformation(Context context, String facetName, DiscoverQuery discoverQuery, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult, DiscoveryConfiguration configuration, FacetResultsRest facetResultsRest, Pageable page) {
private void setRequestInformation(Context context, String facetName, String query, String dsoType, String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult, DiscoveryConfiguration configuration, FacetResultsRest facetResultsRest, Pageable page) {
facetResultsRest.setName(facetName);
facetResultsRest.setQuery(discoverQuery.getQuery());
facetResultsRest.setQuery(query);
facetResultsRest.setScope(dsoScope);
facetResultsRest.setQuery(discoverQuery.getQuery());
facetResultsRest.setDsoType(dsoType);
facetResultsRest.setPage(page);
if(!searchResult.getFacetResult(facetName).isEmpty()){
@@ -66,11 +64,7 @@ public class DiscoverFacetResultsConverter {
facetResultsRest.setHasMore(true);
}
if(!discoverQuery.getFacetFields().isEmpty()){
DiscoveryConfigurationParameters.SORT sort2 = discoverQuery.getFacetFields().get(0).getSortOrder();
SearchResultsRest.Sorting sort = new SearchResultsRest.Sorting(sort2.name());
facetResultsRest.setSort(sort);
}
facetResultsRest.setSort(SearchResultsRest.Sorting.fromPage(page));
facetResultsRest.setSearchFilters(searchFilters);
SearchFilterToAppliedFilterConverter searchFilterToAppliedFilterConverter = new SearchFilterToAppliedFilterConverter();

View File

@@ -7,17 +7,20 @@
*/
package org.dspace.app.rest.converter;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.dspace.app.rest.model.*;
import org.dspace.app.rest.model.DSpaceObjectRest;
import org.dspace.app.rest.model.SearchFacetEntryRest;
import org.dspace.app.rest.model.SearchFacetValueRest;
import org.dspace.app.rest.model.SearchResultEntryRest;
import org.dspace.app.rest.model.SearchResultsRest;
import org.dspace.app.rest.parameter.SearchFilter;
import org.dspace.authority.AuthorityValue;
import org.dspace.authority.service.AuthorityValueService;
import org.dspace.content.DSpaceObject;
import org.dspace.core.Constants;
import org.dspace.core.Context;
import org.dspace.discovery.DiscoverQuery;
import org.dspace.discovery.DiscoverResult;
import org.dspace.discovery.configuration.DiscoveryConfiguration;
import org.dspace.discovery.configuration.DiscoverySearchFilterFacet;
@@ -26,9 +29,6 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* TODO TOM UNIT TEST
*/
@@ -39,12 +39,12 @@ public class DiscoverResultConverter {
private List<DSpaceObjectConverter> converters;
public SearchResultsRest convert(final Context context, final DiscoverQuery discoverQuery, final String configurationName, final String scope,
public SearchResultsRest convert(final Context context, final String query, final String dsoType, final String configurationName, final String scope,
final List<SearchFilter> searchFilters, final Pageable page, final DiscoverResult searchResult, final DiscoveryConfiguration configuration) {
SearchResultsRest resultsRest = new SearchResultsRest();
setRequestInformation(context, discoverQuery, configurationName, scope, searchFilters, page, resultsRest);
setRequestInformation(context, query, dsoType, configurationName, scope, searchFilters, page, resultsRest);
addSearchResults(searchResult, resultsRest);
@@ -120,14 +120,11 @@ public class DiscoverResultConverter {
return null;
}
private void setRequestInformation(final Context context, final DiscoverQuery discoverQuery, final String configurationName, final String scope,
private void setRequestInformation(final Context context, final String query, final String dsoType, final String configurationName, final String scope,
final List<SearchFilter> searchFilters, final Pageable page, final SearchResultsRest resultsRest) {
resultsRest.setQuery(discoverQuery.getQuery());
resultsRest.setQuery(query);
resultsRest.setConfigurationName(configurationName);
if(discoverQuery.getDSpaceObjectFilter() >= 0) {
resultsRest.setDsoType(Constants.typeText[discoverQuery.getDSpaceObjectFilter()]);
}
resultsRest.setDsoType(dsoType);
resultsRest.setScope(scope);

View File

@@ -11,12 +11,15 @@ import java.util.LinkedList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
/**
* TODO TOM UNIT TEST
*/
public class SearchResultsRest extends DiscoveryResultsRest {
@JsonIgnore
private long totalNumberOfResults;
@JsonIgnore
@@ -138,5 +141,16 @@ public class SearchResultsRest extends DiscoveryResultsRest {
public void setOrder(final String order) {
this.order = order;
}
public static Sorting fromPage(final Pageable page) {
if (page != null) {
Sort sort = page.getSort();
if (sort != null && sort.iterator().hasNext()) {
Sort.Order order = sort.iterator().next();
return new Sorting(order.getProperty(), order.getDirection().name());
}
}
return null;
}
}
}

View File

@@ -7,6 +7,12 @@
*/
package org.dspace.app.rest.model.hateoas;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
import java.util.LinkedList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import org.apache.commons.collections4.CollectionUtils;
import org.dspace.app.rest.DiscoveryRestController;
@@ -16,15 +22,8 @@ import org.dspace.app.rest.model.SearchResultsRest;
import org.dspace.app.rest.utils.Utils;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.hateoas.Link;
import org.springframework.web.util.UriComponentsBuilder;
import java.util.LinkedList;
import java.util.List;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo;
import static org.springframework.hateoas.mvc.ControllerLinkBuilder.methodOn;
/**
* TODO TOM UNIT TEST
*/
@@ -34,14 +33,13 @@ public class SearchResultsResource extends HALResource {
@JsonUnwrapped
private final SearchResultsRest data;
@JsonUnwrapped
private EmbeddedPage embeddedSearchResults;
public SearchResultsResource(final SearchResultsRest data, final Pageable page, final Utils utils) {
this.data = data;
addLinks(data);
addEmbeds(data, page, utils);
}
public SearchResultsRest getData(){
@@ -72,15 +70,8 @@ public class SearchResultsResource extends HALResource {
PageImpl<SearchResultEntryResource> page = new PageImpl<SearchResultEntryResource>(entryResources,
pageable, data.getTotalNumberOfResults());
embedResource("searchResults", new EmbeddedPage(buildBaseLink(data), page, entryResources));
}
private void addLinks(final SearchResultsRest data) {
//Create the self link using our Controller
String baseLink = buildBaseLink(data);
Link link = new Link(baseLink, Link.REL_SELF);
add(link);
embeddedSearchResults = new EmbeddedPage(buildBaseLink(data), page, entryResources);
embedResource("searchResults", entryResources);
}
private String buildBaseLink(final SearchResultsRest data) {

View File

@@ -88,29 +88,22 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
discoverQuery = queryBuilder.buildQuery(context, scopeObject, configuration, query, searchFilters, dsoType, page);
searchResult = searchService.search(context, scopeObject, discoverQuery);
//TODO set "hasMore" property on facets
} catch (InvalidRequestException e) {
log.warn("Received an invalid request", e);
} catch (SearchServiceException e) {
log.error("Error while searching with Discovery", e);
}
return discoverResultConverter.convert(context, discoverQuery, configurationName, dsoScope, searchFilters, page, searchResult, configuration);
return discoverResultConverter.convert(context, query, dsoType, configurationName, dsoScope, searchFilters, page, searchResult, configuration);
}
public FacetConfigurationRest getFacetsConfiguration(final String dsoScope, final String configurationName) {
//TODO
Context context = obtainContext();
DSpaceObject scopeObject = scopeResolver.resolveScope(context, dsoScope);
DiscoveryConfiguration configuration = searchConfigurationService.getDiscoveryConfigurationByNameOrDso(configurationName, scopeObject);
return discoverFacetConfigurationConverter.convert(configuration);
//TODO Call DiscoveryConfigurationConverter on configuration to convert this API model to the REST model
//TODO Return REST model
}
public SearchSupportRest getSearchSupport() {
@@ -137,7 +130,8 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
log.error("Error while searching with Discovery", e);
//TODO TOM handle search exception
}
FacetResultsRest facetResultsRest = discoverFacetResultsConverter.convert(context, facetName, discoverQuery, dsoScope, searchFilters, searchResult, configuration, page);
FacetResultsRest facetResultsRest = discoverFacetResultsConverter.convert(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, page);
return facetResultsRest;
}
}