mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
DS-3489: Fix facet search link
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -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 {
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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));
|
||||
}
|
||||
|
@@ -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());
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user