DS-2637 Possibility for users to configure the discovery browse page on the fly

Modifications to the following files:
-searchFacetFilter.java
-browse.js
-attribute-handles.xsl
-browse.xsl
,enable the user to change the pagination through the gear icon, as was already the case for other browse pages

The was an improvement based on the following Jira ticket
https://jira.duraspace.org/browse/DS-2637
This commit is contained in:
Jonas Van Goolen
2015-09-28 09:45:01 +02:00
parent a7334c6d8b
commit a665e705d3
4 changed files with 69 additions and 13 deletions

View File

@@ -17,7 +17,8 @@
$this = $(this);
browse_controls = $('#aspect_artifactbrowser_ConfigurableBrowse_div_browse-controls, ' +
'#aspect_administrative_WithdrawnItems_div_browse-controls, ' +
'#aspect_administrative_PrivateItems_div_browse-controls');
'#aspect_administrative_PrivateItems_div_browse-controls, '+
'#aspect_discovery_SearchFacetFilter_div_browse-controls');
$('*[name="' +$this.data('name') + '"]', browse_controls).val($this.data('returnvalue'));
$('.btn', browse_controls).click();
$this.closest('.open').removeClass('open');

View File

@@ -112,7 +112,8 @@
<xsl:variable name="gear"
select="//dri:div[@id='aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
or @id='aspect.administrative.PrivateItems.div.browse-controls']"/>
or @id='aspect.administrative.PrivateItems.div.browse-controls'
or @id='aspect.discovery.SearchFacetFilter.div.browse-controls']"/>
<xsl:choose>
<xsl:when test="$position = 'top' and $gear">
<div class="row">
@@ -412,7 +413,8 @@
<xsl:for-each
select="//dri:div[@id='aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
or @id='aspect.administrative.PrivateItems.div.browse-controls']//dri:field[@type='select']">
or @id='aspect.administrative.PrivateItems.div.browse-controls'
or @id='aspect.discovery.SearchFacetFilter.div.browse-controls']//dri:field[@type='select']">
<xsl:if test="position() > 1">
<li class="divider"/>
</xsl:if>

View File

@@ -104,7 +104,8 @@
<xsl:template match="dri:div[@id = 'aspect.artifactbrowser.ConfigurableBrowse.div.browse-controls'
or @id='aspect.administrative.WithdrawnItems.div.browse-controls'
or @id='aspect.administrative.PrivateItems.div.browse-controls']">
or @id='aspect.administrative.PrivateItems.div.browse-controls'
or @id='aspect.discovery.SearchFacetFilter.div.browse-controls']">
<div>
<xsl:call-template name="copy-attributes"/>
<xsl:attribute name="rend">

View File

@@ -77,6 +77,8 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
private SearchService searchService = null;
private static final Message T_go = message("xmlui.general.go");
private static final Message T_rpp = message("xmlui.Discovery.AbstractSearch.rpp");
private static final int[] RESULTS_PER_PAGE_PROGRESSION = {5, 10, 20, 40, 60, 80, 100};
public SearchFacetFilter() {
@@ -220,9 +222,9 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
DiscoverFacetField discoverFacetField;
if(request.getParameter(SearchFilterParam.STARTS_WITH) != null)
{
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, DEFAULT_PAGE_SIZE + 1, DiscoveryConfigurationParameters.SORT.VALUE, request.getParameter(SearchFilterParam.STARTS_WITH).toLowerCase());
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, getPageSize() + 1, DiscoveryConfigurationParameters.SORT.VALUE, request.getParameter(SearchFilterParam.STARTS_WITH).toLowerCase());
}else{
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, DEFAULT_PAGE_SIZE + 1, DiscoveryConfigurationParameters.SORT.VALUE);
discoverFacetField = new DiscoverFacetField(facetField, DiscoveryConfigurationParameters.TYPE_TEXT, getPageSize() + 1, DiscoveryConfigurationParameters.SORT.VALUE);
}
@@ -269,6 +271,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
Division div = body.addDivision("browse-by-" + request.getParameter(SearchFilterParam.FACET_FIELD), "primary");
addBrowseJumpNavigation(div, browseParams, request);
addBrowseControls(div, browseParams);
// Set up the major variables
//Collection collection = (Collection) dso;
@@ -307,20 +310,20 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
//Only show the nextpageurl if we have at least one result following our current results
String nextPageUrl = null;
if (values.size() == (DEFAULT_PAGE_SIZE + 1))
if (values.size() == (getPageSize() + 1))
{
nextPageUrl = getNextPageURL(browseParams, request);
}
int shownItemsMax = offSet + (DEFAULT_PAGE_SIZE < values.size() ? values.size() - 1 : values.size());
int shownItemsMax = offSet + (getPageSize() < values.size() ? values.size() - 1 : values.size());
// We put our total results to -1 so this doesn't get shown in the results (will be hidden by the xsl)
// The reason why we do this is because solr 1.4 can't retrieve the total number of facets found
results.setSimplePagination(-1, offSet + 1,
results.setSimplePagination((int) queryResults.getTotalSearchResults(), offSet + 1,
shownItemsMax, getPreviousPageURL(browseParams, request), nextPageUrl);
Table singleTable = results.addTable("browse-by-" + facetField + "-results", (int) (queryResults.getDspaceObjects().size() + 1), 1);
@@ -329,9 +332,9 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
int end = values.size();
if(DEFAULT_PAGE_SIZE < end)
if(getPageSize() < end)
{
end = DEFAULT_PAGE_SIZE;
end = getPageSize();
}
for (int i = 0; i < end; i++) {
DiscoverResult.FacetResult value = values.get(i);
@@ -441,7 +444,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
Map<String, String> parameters = new HashMap<String, String>();
parameters.putAll(browseParams.getCommonBrowseParams());
parameters.putAll(browseParams.getControlParameters());
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offSet + DEFAULT_PAGE_SIZE));
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offSet + getPageSize()));
// Add the filter queries
String url = generateURL("search-filter", parameters);
@@ -466,7 +469,7 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
Map<String, String> parameters = new HashMap<String, String>();
parameters.putAll(browseParams.getCommonBrowseParams());
parameters.putAll(browseParams.getControlParameters());
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offset - DEFAULT_PAGE_SIZE));
parameters.put(SearchFilterParam.OFFSET, String.valueOf(offset - getPageSize()));
// Add the filter queries
String url = generateURL("search-filter", parameters);
@@ -574,5 +577,54 @@ public class SearchFacetFilter extends AbstractDSpaceTransformer implements Cach
return dso;
}
protected int getPageSize() {
try {
int rpp =Integer.parseInt(ObjectModelHelper.getRequest(objectModel).getParameter("rpp"));
DEFAULT_PAGE_SIZE=rpp;
return rpp;
}
catch (Exception e) {
return DEFAULT_PAGE_SIZE;
}
}
/**
* Add the controls to changing sorting and display options.
*
* @param div
* @param params
* @throws WingException
*/
private void addBrowseControls(Division div, SearchFilterParam params)
throws WingException
{
// Prepare a Map of query parameters required for all links
Map<String, String> queryParams = new HashMap<String, String>();
queryParams.putAll(params.getCommonBrowseParams());
Request request = ObjectModelHelper.getRequest(objectModel);
queryParams.put("order",request.getParameter("order"));
String facetField = request.getParameter(SearchFilterParam.FACET_FIELD);
Division controls = div.addInteractiveDivision("browse-controls", "search-filter?field="+facetField,
Division.METHOD_POST, "browse controls");
// Add all the query parameters as hidden fields on the form
for (Map.Entry<String, String> param : queryParams.entrySet())
{
controls.addHidden(param.getKey()).setValue(param.getValue());
}
Para controlsForm = controls.addPara();
// Create a control for the number of records to display
controlsForm.addContent(T_rpp);
Select rppSelect = controlsForm.addSelect("rpp");
for (int i : RESULTS_PER_PAGE_PROGRESSION)
{
rppSelect.addOption((i == getPageSize()), i, Integer.toString(i));
}
controlsForm.addButton("update").setValue("update");
}
}