diff --git a/src/main/java/edu/harvard/iq/dataverse/DataversePage.java b/src/main/java/edu/harvard/iq/dataverse/DataversePage.java index a9ab6c16730..62ea74f1f21 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DataversePage.java +++ b/src/main/java/edu/harvard/iq/dataverse/DataversePage.java @@ -14,6 +14,7 @@ import edu.harvard.iq.dataverse.engine.command.impl.LinkDataverseCommand; import edu.harvard.iq.dataverse.engine.command.impl.PublishDataverseCommand; import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseCommand; +import edu.harvard.iq.dataverse.search.FacetCategory; import edu.harvard.iq.dataverse.search.IndexServiceBean; import edu.harvard.iq.dataverse.search.SearchException; import edu.harvard.iq.dataverse.search.SearchFields; @@ -36,6 +37,8 @@ import javax.inject.Named; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.faces.component.UIComponent; @@ -1035,5 +1038,124 @@ public void validateAlias(FacesContext context, UIComponent toValidate, Object v private String returnRedirect(){ return "/dataverse.xhtml?alias=" + dataverse.getAlias() + "&faces-redirect=true"; } + + private Map numberOfFacets = new HashMap<>(); + + public int getNumberOfFacets(String name, int defaultValue) { + Integer numFacets = numberOfFacets.get(name); + if (numFacets == null) { + numberOfFacets.put(name, defaultValue); + numFacets = defaultValue; + } + return numFacets; + } + + public void incrementFacets(String name, int incrementNum) { + Integer numFacets = numberOfFacets.get(name); + if (numFacets == null) { + numFacets = incrementNum; + } + numberOfFacets.put(name, numFacets + incrementNum); + } + + private String query; + private List filterQueries = new ArrayList<>(); + private List facetCategoryList = new ArrayList<>(); + private String selectedTypesString; + private String sortField; + private SearchIncludeFragment.SortOrder sortOrder; + private String searchFieldType = SearchFields.TYPE; + private String searchFieldSubtree = SearchFields.SUBTREE; + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public List getFilterQueries() { + return filterQueries; + } + + public void setFilterQueries(List filterQueries) { + this.filterQueries = filterQueries; + } + + public List getFacetCategoryList() { + return facetCategoryList; + } + + public void setFacetCategoryList(List facetCategoryList) { + this.facetCategoryList = facetCategoryList; + } + + private int searchResultsCount = 0; + + public int getSearchResultsCount() { + return searchResultsCount; + } + + public void setSearchResultsCount(int searchResultsCount) { + this.searchResultsCount = searchResultsCount; + } + public String getSelectedTypesString() { + return selectedTypesString; + } + + public void setSelectedTypesString(String selectedTypesString) { + this.selectedTypesString = selectedTypesString; + } + + public String getSortField() { + return sortField; + } + + public void setSortField(String sortField) { + this.sortField = sortField; + } + + public String getSortOrder() { + if (sortOrder != null) { + return sortOrder.toString(); + } else { + return null; + } + } + + /** + * Allow only valid values to be set. + * + * Rather than passing in a String and converting it to an enum in this + * method we could write a converter: + * http://stackoverflow.com/questions/8609378/jsf-2-0-view-parameters-to-pass-objects + */ + public void setSortOrder(String sortOrderSupplied) { + if (sortOrderSupplied != null) { + if (sortOrderSupplied.equals(SearchIncludeFragment.SortOrder.asc.toString())) { + this.sortOrder = SearchIncludeFragment.SortOrder.asc; + } + if (sortOrderSupplied.equals(SearchIncludeFragment.SortOrder.desc.toString())) { + this.sortOrder = SearchIncludeFragment.SortOrder.desc; + } + } + } + + public String getSearchFieldType() { + return searchFieldType; + } + + public void setSearchFieldType(String searchFieldType) { + this.searchFieldType = searchFieldType; + } + + public String getSearchFieldSubtree() { + return searchFieldSubtree; + } + + public void setSearchFieldSubtree(String searchFieldSubtree) { + this.searchFieldSubtree = searchFieldSubtree; + } } diff --git a/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java b/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java index 21f1f5e416d..6de1e7e97aa 100644 --- a/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java +++ b/src/main/java/edu/harvard/iq/dataverse/search/SearchIncludeFragment.java @@ -8,6 +8,7 @@ import edu.harvard.iq.dataverse.DatasetServiceBean; import edu.harvard.iq.dataverse.DatasetVersionServiceBean; import edu.harvard.iq.dataverse.Dataverse; +import edu.harvard.iq.dataverse.DataversePage; import edu.harvard.iq.dataverse.DataverseServiceBean; import edu.harvard.iq.dataverse.DataverseSession; import edu.harvard.iq.dataverse.DvObject; @@ -80,6 +81,8 @@ public class SearchIncludeFragment implements java.io.Serializable { ThumbnailServiceWrapper thumbnailServiceWrapper; @Inject WidgetWrapper widgetWrapper; + @Inject + DataversePage dataversePage; @EJB SystemConfig systemConfig; @@ -145,7 +148,8 @@ public class SearchIncludeFragment implements java.io.Serializable { private boolean rootDv = false; private Map harvestedDatasetDescriptions = null; private boolean solrErrorEncountered = false; - + private String adjustFacetName = null; + private int adjustFacetNumber = 0; /** * @todo: * @@ -445,6 +449,16 @@ public void search(boolean onlyDataRelatedToMe) { } setDisplayCardValues(); + + dataversePage.setQuery(query); + dataversePage.setFacetCategoryList(facetCategoryList); + dataversePage.setFilterQueries(filterQueries); + dataversePage.setSearchResultsCount(searchResultsCount); + dataversePage.setSelectedTypesString(selectedTypesString); + dataversePage.setSortField(sortField); + dataversePage.setSortOrder(sortField); + dataversePage.setSearchFieldType(searchFieldType); + dataversePage.setSearchFieldSubtree(searchFieldSubtree); } else { // if SOLR is down: @@ -517,12 +531,17 @@ public String getMode() { } public int getNumberOfFacets(String name, int defaultValue) { - Integer numFacets = numberOfFacets.get(name); + if (adjustFacetName != null && adjustFacetName.equals(name)) { + return adjustFacetNumber; + } + + return defaultValue; + /*Integer numFacets = numberOfFacets.get(name); if (numFacets == null) { numberOfFacets.put(name, defaultValue); numFacets = defaultValue; } - return numFacets; + return numFacets;*/ } public void incrementFacets(String name, int incrementNum) { @@ -844,6 +863,22 @@ public void setSortOrder(String sortOrderSupplied) { } } } + + public String getAdjustFacetName() { + return adjustFacetName; + } + + public void setAdjustFacetName(String adjustFacetName) { + this.adjustFacetName = adjustFacetName; + } + + public int getAdjustFacetNumber() { + return adjustFacetNumber; + } + + public void setAdjustFacetNumber(int adjustFacetNumber) { + this.adjustFacetNumber = adjustFacetNumber; + } /** * @todo this method doesn't seem to be in use and can probably be deleted. diff --git a/src/main/webapp/dataverse.xhtml b/src/main/webapp/dataverse.xhtml index 62ca0d23437..32a1b30515e 100644 --- a/src/main/webapp/dataverse.xhtml +++ b/src/main/webapp/dataverse.xhtml @@ -43,6 +43,8 @@ + + diff --git a/src/main/webapp/search-include-fragment.xhtml b/src/main/webapp/search-include-fragment.xhtml index 2dd0f497695..770288838cc 100644 --- a/src/main/webapp/search-include-fragment.xhtml +++ b/src/main/webapp/search-include-fragment.xhtml @@ -7,7 +7,7 @@ xmlns:o="http://omnifaces.org/ui" xmlns:jsf="http://xmlns.jcp.org/jsf"> - +
@@ -172,47 +172,47 @@ - - + + - - + + - - - + + + - - - + + + - + - - + + - - - + + + - - + + - #{bundle.less} + #{bundle.less} - #{bundle.more} + #{bundle.more}