DS-3489: Fix facet search link

This commit is contained in:
Tom Desair
2017-10-27 14:03:33 +02:00
committed by Tom Desair
parent c839c1ce03
commit 1799a59aa2
8 changed files with 54 additions and 58 deletions

View File

@@ -4,6 +4,7 @@ import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.dspace.app.rest.model.FacetResultsRest;
import org.dspace.app.rest.model.SearchFacetEntryRest;
import org.dspace.app.rest.model.SearchFacetValueRest;
import org.dspace.app.rest.model.SearchResultsRest;
import org.dspace.app.rest.parameter.SearchFilter;
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Component;
@Component
public class DiscoverFacetResultsConverter {
private DiscoverFacetValueConverter facetValueConverter = new DiscoverFacetValueConverter();
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();
@@ -42,34 +44,38 @@ public class DiscoverFacetResultsConverter {
}
private SearchFacetValueRest buildSearchFacetValueRestFromFacetResult(DiscoverResult.FacetResult value) {
SearchFacetValueRest searchFacetValueRest = new SearchFacetValueRest();
searchFacetValueRest.setLabel(value.getDisplayedValue());
searchFacetValueRest.setCount(value.getCount());
return searchFacetValueRest;
return facetValueConverter.convert(value);
}
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(query);
facetResultsRest.setScope(dsoScope);
facetResultsRest.setDsoType(dsoType);
facetResultsRest.setPage(page);
if(!searchResult.getFacetResult(facetName).isEmpty()){
facetResultsRest.setType(searchResult.getFacetResult(facetName).get(0).getFieldType());
}
if(searchResult.getFacetResult(facetName).size() > page.getPageSize()){
//We requested one extra facet value. Check if that value is present to indicate that there are more results
facetResultsRest.setHasMore(true);
}
facetResultsRest.setFacetEntry(convertFacetEntry(facetName, searchResult, page));
facetResultsRest.setSort(SearchResultsRest.Sorting.fromPage(page));
facetResultsRest.setSearchFilters(searchFilters);
SearchFilterToAppliedFilterConverter searchFilterToAppliedFilterConverter = new SearchFilterToAppliedFilterConverter();
for (SearchFilter searchFilter : CollectionUtils.emptyIfNull(searchFilters)) {
facetResultsRest.addAppliedFilter(searchFilterToAppliedFilterConverter.convertSearchFilter(context, searchFilter));
}
}
private SearchFacetEntryRest convertFacetEntry(final String facetName, final DiscoverResult searchResult, final Pageable page) {
SearchFacetEntryRest facetEntryRest = new SearchFacetEntryRest(facetName);
if(!searchResult.getFacetResult(facetName).isEmpty()){
facetEntryRest.setFacetType(searchResult.getFacetResult(facetName).get(0).getFieldType());
}
if(searchResult.getFacetResult(facetName).size() > page.getPageSize()){
//We requested one extra facet value. Check if that value is present to indicate that there are more results
facetEntryRest.setHasMore(true);
}
return facetEntryRest;
}
}

View File

@@ -0,0 +1,20 @@
package org.dspace.app.rest.converter;
import org.dspace.app.rest.model.SearchFacetValueRest;
import org.dspace.discovery.DiscoverResult; /**
* TODO TOM UNIT TEST
*/
public class DiscoverFacetValueConverter {
public SearchFacetValueRest convert(final DiscoverResult.FacetResult value) {
SearchFacetValueRest valueRest = new SearchFacetValueRest();
valueRest.setLabel(value.getDisplayedValue());
valueRest.setFilterValue(value.getAsFilterQuery());
valueRest.setFilterType(value.getFilterType());
valueRest.setAuthorityKey(value.getAuthorityKey());
valueRest.setSortValue(value.getSortValue());
valueRest.setCount(value.getCount());
return valueRest;
}
}

View File

@@ -38,6 +38,7 @@ public class DiscoverResultConverter {
@Autowired
private List<DSpaceObjectConverter> converters;
private DiscoverFacetValueConverter facetValueConverter = new DiscoverFacetValueConverter();
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) {
@@ -68,13 +69,7 @@ public class DiscoverResultConverter {
//The discover results contains max facetLimit + 1 values. If we reach the "+1", indicate that there are
//more results available.
if(valueCount < field.getFacetLimit()) {
SearchFacetValueRest valueRest = new SearchFacetValueRest();
valueRest.setLabel(value.getDisplayedValue());
valueRest.setFilterValue(value.getAsFilterQuery());
valueRest.setFilterType(value.getFilterType());
valueRest.setAuthorityKey(value.getAuthorityKey());
valueRest.setSortValue(value.getSortValue());
valueRest.setCount(value.getCount());
SearchFacetValueRest valueRest = facetValueConverter.convert(value);
facetEntry.addValue(valueRest);
} else {

View File

@@ -21,7 +21,7 @@ public abstract class DiscoveryRestHalLinkFactory<T> extends HalLinkFactory<T, D
protected UriComponentsBuilder buildFacetBaseLink(final FacetResultsRest data) {
UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn()
.getFacetValues(data.getName(), data.getQuery(), data.getDsoType(), data.getScope(), null, null));
.getFacetValues(data.getFacetEntry().getName(), data.getQuery(), data.getDsoType(), data.getScope(), null, null));
return addFilterParams(uriBuilder, data);
}

View File

@@ -22,7 +22,7 @@ public class FacetResultsHalLinkFactory extends DiscoveryRestHalLinkFactory<Face
if(data != null && pageable != null){
PageImpl page = new PageImpl<>(data.getFacetResultList(), data.getPage(),
data.getFacetResultList().size() + (data.isHasMore() ? 1 : 0));
data.getFacetResultList().size() + (data.getFacetEntry().isHasMore() ? 1 : 0));
halResource.setPageHeader(new EmbeddedPageHeader(buildFacetBaseLink(data), page, false));
}

View File

@@ -2,8 +2,6 @@ package org.dspace.app.rest.link.search;
import java.util.LinkedList;
import org.dspace.app.rest.model.DiscoveryResultsRest;
import org.dspace.app.rest.model.FacetResultsRest;
import org.dspace.app.rest.model.SearchFacetEntryRest;
import org.dspace.app.rest.model.SearchFacetValueRest;
import org.dspace.app.rest.model.hateoas.SearchFacetValueResource;
@@ -24,7 +22,7 @@ public class SearchFacetValueHalLinkFactory extends DiscoveryRestHalLinkFactory<
UriComponentsBuilder builder = buildSearchBaseLink(halResource.getSearchData());
addFilterForFacetValue(builder, halResource.getSearchData(), halResource.getFacetData(), halResource.getValueData());
addFilterForFacetValue(builder, halResource.getFacetData(), halResource.getValueData());
list.add(buildLink("search", builder.build().toUriString()));
@@ -36,14 +34,8 @@ public class SearchFacetValueHalLinkFactory extends DiscoveryRestHalLinkFactory<
return SearchFacetValueResource.class;
}
private void addFilterForFacetValue(final UriComponentsBuilder baseLink, DiscoveryResultsRest searchData,
private void addFilterForFacetValue(final UriComponentsBuilder baseLink,
SearchFacetEntryRest facetData, SearchFacetValueRest valueData) {
//TODO ugly
if(facetData!=null){
baseLink.queryParam("f." + facetData.getName(), valueData.getFilterValue() + "," + valueData.getFilterType());
}
else{
baseLink.queryParam("f." + ((FacetResultsRest) searchData).getName(), valueData.getLabel() + "," + "equals");
}
baseLink.queryParam("f." + facetData.getName(), valueData.getFilterValue() + "," + valueData.getFilterType());
}
}

View File

@@ -4,6 +4,7 @@ import java.util.LinkedList;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import org.springframework.data.domain.Pageable;
@@ -12,9 +13,8 @@ public class FacetResultsRest extends DiscoveryResultsRest {
@JsonIgnore
private LinkedList<SearchFacetValueRest> facetResultList = new LinkedList<>();
private String type;
private String name;
private boolean hasMore;
@JsonUnwrapped
private SearchFacetEntryRest facetEntry;
@JsonIgnore
private Pageable page;
@@ -35,28 +35,11 @@ public class FacetResultsRest extends DiscoveryResultsRest {
this.page = page;
}
public String getName() {
return name;
public SearchFacetEntryRest getFacetEntry() {
return facetEntry;
}
public void setName(String name) {
this.name = name;
public void setFacetEntry(final SearchFacetEntryRest facetEntry) {
this.facetEntry = facetEntry;
}
public String getType(){
return type;
}
public void setType(String type){
this.type = type;
}
public boolean isHasMore(){
return hasMore;
}
public void setHasMore(boolean hasMore){
this.hasMore = hasMore;
}
}

View File

@@ -22,7 +22,7 @@ public class FacetResultsResource extends HALResource<FacetResultsRest>{
private static List<SearchFacetValueResource> buildEntryList(FacetResultsRest data) {
LinkedList<SearchFacetValueResource> list = new LinkedList<>();
for(SearchFacetValueRest searchFacetValueRest : data.getFacetResultList()){
SearchFacetValueResource searchFacetValueResource = new SearchFacetValueResource(searchFacetValueRest, null, data);
SearchFacetValueResource searchFacetValueResource = new SearchFacetValueResource(searchFacetValueRest, data.getFacetEntry(), data);
list.add(searchFacetValueResource);
}
return list;