mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 01:54:22 +00:00
DS-3489: Add support for facet prefix
This commit is contained in:
@@ -171,6 +171,7 @@ public class DiscoveryRestController implements InitializingBean {
|
||||
|
||||
@RequestMapping(method = RequestMethod.GET, value = "/facets/{name}")
|
||||
public ResourceSupport getFacetValues(@PathVariable("name") String facetName,
|
||||
@RequestParam(name = "prefix", required = false) String prefix,
|
||||
@RequestParam(name = "query", required = false) String query,
|
||||
@RequestParam(name = "dsoType", required = false) String dsoType,
|
||||
@RequestParam(name = "scope", required = false) String dsoScope,
|
||||
@@ -179,13 +180,14 @@ public class DiscoveryRestController implements InitializingBean {
|
||||
if (log.isTraceEnabled()) {
|
||||
log.trace("Facetting on facet " + facetName + " with scope: " + StringUtils.trimToEmpty(dsoScope)
|
||||
+ ", dsoType: " + StringUtils.trimToEmpty(dsoType)
|
||||
+ ", prefix: " + StringUtils.trimToEmpty(prefix)
|
||||
+ ", query: " + StringUtils.trimToEmpty(dsoType)
|
||||
+ ", filters: " + Objects.toString(searchFilters)
|
||||
+ ", page: " + Objects.toString(page));
|
||||
}
|
||||
|
||||
FacetResultsRest facetResultsRest = discoveryRestRepository
|
||||
.getFacetObjects(facetName, query, dsoType, dsoScope, searchFilters, page);
|
||||
.getFacetObjects(facetName, prefix, query, dsoType, dsoScope, searchFilters, page);
|
||||
|
||||
FacetResultsResource facetResultsResource = new FacetResultsResource(facetResultsRest);
|
||||
|
||||
|
@@ -30,13 +30,13 @@ 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,
|
||||
public FacetResultsRest convert(Context context, String facetName, String prefix, String query, String dsoType,
|
||||
String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult,
|
||||
DiscoveryConfiguration configuration, Pageable page) {
|
||||
FacetResultsRest facetResultsRest = new FacetResultsRest();
|
||||
|
||||
setRequestInformation(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration,
|
||||
facetResultsRest, page);
|
||||
setRequestInformation(context, facetName, prefix, query, dsoType, dsoScope, searchFilters, searchResult,
|
||||
configuration, facetResultsRest, page);
|
||||
|
||||
addToFacetResultList(facetName, searchResult, facetResultsRest, configuration, page);
|
||||
|
||||
@@ -65,11 +65,12 @@ public class DiscoverFacetResultsConverter {
|
||||
return facetValueConverter.convert(value);
|
||||
}
|
||||
|
||||
private void setRequestInformation(Context context, String facetName, String query, String dsoType, String dsoScope,
|
||||
List<SearchFilter> searchFilters, DiscoverResult searchResult,
|
||||
private void setRequestInformation(Context context, String facetName, String prefix, String query, String dsoType,
|
||||
String dsoScope, List<SearchFilter> searchFilters, DiscoverResult searchResult,
|
||||
DiscoveryConfiguration configuration, FacetResultsRest facetResultsRest,
|
||||
Pageable page) {
|
||||
facetResultsRest.setQuery(query);
|
||||
facetResultsRest.setPrefix(prefix);
|
||||
facetResultsRest.setScope(dsoScope);
|
||||
facetResultsRest.setDsoType(dsoType);
|
||||
|
||||
|
@@ -33,12 +33,12 @@ public abstract class DiscoveryRestHalLinkFactory<T> extends HalLinkFactory<T, D
|
||||
}
|
||||
}
|
||||
|
||||
protected UriComponentsBuilder buildFacetBaseLink(final FacetResultsRest data) {
|
||||
try {
|
||||
UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn()
|
||||
.getFacetValues(data.getFacetEntry().getName(),
|
||||
data.getQuery(), data.getDsoType(),
|
||||
data.getScope(), null, null));
|
||||
protected UriComponentsBuilder buildFacetBaseLink(final FacetResultsRest data) throws Exception {
|
||||
UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn()
|
||||
.getFacetValues(data.getFacetEntry().getName(),
|
||||
data.getPrefix(), data.getQuery(),
|
||||
data.getDsoType(), data.getScope(),
|
||||
null, null));
|
||||
|
||||
return addFilterParams(uriBuilder, data);
|
||||
} catch (Exception ex) {
|
||||
|
@@ -42,8 +42,8 @@ public class SearchFacetEntryHalLinkFactory extends DiscoveryRestHalLinkFactory<
|
||||
String scope = searchData == null ? null : searchData.getScope();
|
||||
|
||||
UriComponentsBuilder uriBuilder = uriBuilder(getMethodOn()
|
||||
.getFacetValues(facetData.getName(), query, dsoType, scope,
|
||||
null, null));
|
||||
.getFacetValues(facetData.getName(), null, query, dsoType,
|
||||
scope, null, null));
|
||||
|
||||
addFilterParams(uriBuilder, searchData);
|
||||
|
||||
|
@@ -20,6 +20,8 @@ public class FacetResultsRest extends DiscoveryResultsRest {
|
||||
@JsonUnwrapped
|
||||
private SearchFacetEntryRest facetEntry;
|
||||
|
||||
private String prefix;
|
||||
|
||||
public void addToFacetResultList(SearchFacetValueRest facetResult) {
|
||||
facetEntry.addValue(facetResult);
|
||||
}
|
||||
@@ -33,7 +35,15 @@ public class FacetResultsRest extends DiscoveryResultsRest {
|
||||
return facetEntry;
|
||||
}
|
||||
|
||||
public void setFacetEntry(final SearchFacetEntryRest facetEntry) {
|
||||
public void setFacetEntry(SearchFacetEntryRest facetEntry) {
|
||||
this.facetEntry = facetEntry;
|
||||
}
|
||||
|
||||
public void setPrefix(String prefix) {
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public String getPrefix() {
|
||||
return prefix;
|
||||
}
|
||||
}
|
||||
|
@@ -129,7 +129,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
|
||||
return discoverSearchSupportConverter.convert();
|
||||
}
|
||||
|
||||
public FacetResultsRest getFacetObjects(String facetName, String query, String dsoType, String dsoScope,
|
||||
public FacetResultsRest getFacetObjects(String facetName, String prefix, String query, String dsoType, String dsoScope,
|
||||
List<SearchFilter> searchFilters, Pageable page)
|
||||
throws InvalidRequestException {
|
||||
|
||||
@@ -143,7 +143,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
|
||||
DiscoverQuery discoverQuery = null;
|
||||
try {
|
||||
discoverQuery = queryBuilder
|
||||
.buildFacetQuery(context, scopeObject, configuration, query, searchFilters, dsoType, page, facetName);
|
||||
.buildFacetQuery(context, scopeObject, configuration, prefix, query, searchFilters, dsoType, page, facetName);
|
||||
searchResult = searchService.search(context, scopeObject, discoverQuery);
|
||||
|
||||
} catch (SearchServiceException e) {
|
||||
@@ -152,7 +152,7 @@ public class DiscoveryRestRepository extends AbstractDSpaceRestRepository {
|
||||
}
|
||||
|
||||
FacetResultsRest facetResultsRest = discoverFacetResultsConverter
|
||||
.convert(context, facetName, query, dsoType, dsoScope, searchFilters, searchResult, configuration, page);
|
||||
.convert(context, facetName, prefix, query, dsoType, dsoScope, searchFilters, searchResult, configuration, page);
|
||||
return facetResultsRest;
|
||||
}
|
||||
|
||||
|
@@ -101,7 +101,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
|
||||
public DiscoverQuery buildFacetQuery(Context context, DSpaceObject scope,
|
||||
DiscoveryConfiguration discoveryConfiguration,
|
||||
String query, List<SearchFilter> searchFilters,
|
||||
String prefix, String query, List<SearchFilter> searchFilters,
|
||||
String dsoType, Pageable page, String facetName)
|
||||
throws InvalidRequestException {
|
||||
|
||||
@@ -109,7 +109,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
dsoType);
|
||||
|
||||
//When all search criteria are set, configure facet results
|
||||
addFacetingForFacets(context, scope, queryArgs, discoveryConfiguration, facetName, page);
|
||||
addFacetingForFacets(context, scope, prefix, queryArgs, discoveryConfiguration, facetName, page);
|
||||
|
||||
//We don' want any search results, we only want facet values
|
||||
queryArgs.setMaxResults(0);
|
||||
@@ -126,8 +126,8 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
}
|
||||
}
|
||||
|
||||
private DiscoverQuery addFacetingForFacets(Context context, DSpaceObject scope, DiscoverQuery queryArgs,
|
||||
DiscoveryConfiguration discoveryConfiguration,
|
||||
private DiscoverQuery addFacetingForFacets(Context context, DSpaceObject scope, String prefix,
|
||||
DiscoverQuery queryArgs, DiscoveryConfiguration discoveryConfiguration,
|
||||
String facetName, Pageable page) throws InvalidSearchFacetException {
|
||||
|
||||
DiscoverySearchFilterFacet facet = discoveryConfiguration.getSidebarFacet(facetName);
|
||||
@@ -135,7 +135,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
queryArgs.setFacetMinCount(1);
|
||||
int pageSize = Math.min(pageSizeLimit, page.getPageSize());
|
||||
|
||||
fillFacetIntoQueryArgs(context, scope, queryArgs, facet, pageSize);
|
||||
fillFacetIntoQueryArgs(context, scope, prefix, queryArgs, facet, pageSize);
|
||||
|
||||
} else {
|
||||
throw new InvalidSearchFacetException(facetName + " is not a valid search facet");
|
||||
@@ -144,7 +144,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
return queryArgs;
|
||||
}
|
||||
|
||||
private void fillFacetIntoQueryArgs(Context context, DSpaceObject scope, DiscoverQuery queryArgs,
|
||||
private void fillFacetIntoQueryArgs(Context context, DSpaceObject scope, String prefix, DiscoverQuery queryArgs,
|
||||
DiscoverySearchFilterFacet facet, final int pageSize) {
|
||||
if (facet.getType().equals(DiscoveryConfigurationParameters.TYPE_DATE)) {
|
||||
try {
|
||||
@@ -165,7 +165,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
int facetLimit = pageSize + 1;
|
||||
//This should take care of the sorting for us
|
||||
queryArgs.addFacetField(new DiscoverFacetField(facet.getIndexFieldName(), facet.getType(), facetLimit,
|
||||
facet.getSortOrderSidebar()));
|
||||
facet.getSortOrderSidebar(), StringUtils.trimToNull(prefix)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,7 +321,7 @@ public class DiscoverQueryBuilder implements InitializingBean {
|
||||
|
||||
/** enable faceting of search results */
|
||||
for (DiscoverySearchFilterFacet facet : facets) {
|
||||
fillFacetIntoQueryArgs(context, scope, queryArgs, facet, facet.getFacetLimit());
|
||||
fillFacetIntoQueryArgs(context, scope, null, queryArgs, facet, facet.getFacetLimit());
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user