Skip to content

Commit

Permalink
Merge pull request #6213 from IQSS/6191-more-facets-link
Browse files Browse the repository at this point in the history
6191 more facets link
  • Loading branch information
kcondon authored Sep 30, 2019
2 parents ad58d80 + c7c7a88 commit d7c1807
Show file tree
Hide file tree
Showing 4 changed files with 183 additions and 24 deletions.
122 changes: 122 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/DataversePage.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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<String, Integer> 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<String> filterQueries = new ArrayList<>();
private List<FacetCategory> 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<String> getFilterQueries() {
return filterQueries;
}

public void setFilterQueries(List<String> filterQueries) {
this.filterQueries = filterQueries;
}

public List<FacetCategory> getFacetCategoryList() {
return facetCategoryList;
}

public void setFacetCategoryList(List<FacetCategory> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -80,6 +81,8 @@ public class SearchIncludeFragment implements java.io.Serializable {
ThumbnailServiceWrapper thumbnailServiceWrapper;
@Inject
WidgetWrapper widgetWrapper;
@Inject
DataversePage dataversePage;
@EJB
SystemConfig systemConfig;

Expand Down Expand Up @@ -145,7 +148,8 @@ public class SearchIncludeFragment implements java.io.Serializable {
private boolean rootDv = false;
private Map<Long, String> harvestedDatasetDescriptions = null;
private boolean solrErrorEncountered = false;

private String adjustFacetName = null;
private int adjustFacetNumber = 0;
/**
* @todo:
*
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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.
Expand Down
2 changes: 2 additions & 0 deletions src/main/webapp/dataverse.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
<f:viewParam name="order" value="#{SearchIncludeFragment.sortOrder}"/>
<f:viewParam name="page" value="#{SearchIncludeFragment.page}"/>
<f:viewParam name="debug" value="#{SearchIncludeFragment.debug}"/>
<f:viewParam name="adjustFacetName" value="#{SearchIncludeFragment.adjustFacetName}"/>
<f:viewParam name="adjustFacetNumber" value="#{SearchIncludeFragment.adjustFacetNumber}"/>
<f:viewAction action="#{SearchIncludeFragment.search()}" />
</f:metadata>

Expand Down
42 changes: 21 additions & 21 deletions src/main/webapp/search-include-fragment.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
xmlns:o="http://omnifaces.org/ui"
xmlns:jsf="http://xmlns.jcp.org/jsf">

<c:set var="page" value="/dataverse/#{SearchIncludeFragment.dataverse.alias}"/>
<c:set var="page" value="/dataverse/#{DataversePage.dataverse.alias}"/>

<!-- Search Form + Add Data Button -->
<div class="row panelSearchForm" jsf:rendered="#{!SearchIncludeFragment.solrIsDown}">
Expand Down Expand Up @@ -172,47 +172,47 @@
</h:form>

<!--NON-TYPE FACETS-->
<h:form id="facetCategoryForm" rendered="#{SearchIncludeFragment.searchResultsCount > 0}">
<p:dataList id="facetCategoryList" value="#{SearchIncludeFragment.facetCategoryList}" var="facetCategory">
<h:form id="facetCategoryForm" rendered="#{DataversePage.searchResultsCount > 0}">
<p:dataList id="facetCategoryList" value="#{DataversePage.facetCategoryList}" var="facetCategory">
<h:outputText value="#{facetCategory.friendlyName}" styleClass="facetCategoryName"/>
<p:dataList value="#{facetCategory.facetLabel}" var="facetLabel" rows="#{SearchIncludeFragment.getNumberOfFacets(facetCategory.name,5)}">
<h:outputLink value="#{widgetWrapper.wrapURL(page)}" rendered="#{!SearchIncludeFragment.filterQueries.contains(facetLabel.filterQuery)}" styleClass="facetLink">
<p:dataList value="#{facetCategory.facetLabel}" var="facetLabel" rows="#{DataversePage.getNumberOfFacets(facetCategory.name,5)}">
<h:outputLink value="#{widgetWrapper.wrapURL(page)}" rendered="#{!DataversePage.filterQueries.contains(facetLabel.filterQuery)}" styleClass="facetLink">
<h:outputFormat value="{0} &#40;{1}&#41;">
<f:param value="#{facetLabel.name}"/>
<f:param value="#{facetLabel.count}"/>
</h:outputFormat>
<f:param name="q" value="#{SearchIncludeFragment.query}"/>
<f:param name="fq#{SearchIncludeFragment.filterQueries.size()}" value="#{facetLabel.filterQuery}"/>
<c:forEach items="#{SearchIncludeFragment.filterQueries}" var="clickedFilterQuery" varStatus="status">
<f:param name="q" value="#{DataversePage.query}"/>
<f:param name="fq#{DataversePage.filterQueries.size()}" value="#{facetLabel.filterQuery}"/>
<c:forEach items="#{DataversePage.filterQueries}" var="clickedFilterQuery" varStatus="status">
<f:param name="fq#{status.index}" value='#{clickedFilterQuery}'/>
</c:forEach>
<f:param name="types" value="#{SearchIncludeFragment.selectedTypesString}"/>
<f:param name="sort" value="#{SearchIncludeFragment.sortField}"/>
<f:param name="order" value="#{SearchIncludeFragment.sortOrder}"/>
<f:param name="types" value="#{DataversePage.selectedTypesString}"/>
<f:param name="sort" value="#{DataversePage.sortField}"/>
<f:param name="order" value="#{DataversePage.sortOrder}"/>
</h:outputLink>

<h:outputLink value="#{widgetWrapper.wrapURL(page)}" rendered="#{SearchIncludeFragment.filterQueries.contains(facetLabel.filterQuery)}" styleClass="facetLink facetSelected">
<h:outputLink value="#{widgetWrapper.wrapURL(page)}" rendered="#{DataversePage.filterQueries.contains(facetLabel.filterQuery)}" styleClass="facetLink facetSelected">
<h:outputFormat value="{0} &#40;{1}&#41;">
<f:param value="#{facetLabel.name}"/>
<f:param value="#{facetLabel.count}"/>
</h:outputFormat>
<span class="glyphicon glyphicon-remove"></span>
<f:param name="q" value="#{SearchIncludeFragment.query}"/>
<c:forEach items="#{SearchIncludeFragment.filterQueries}" var="clickedFilterQuery" varStatus="status">
<f:param name="q" value="#{DataversePage.query}"/>
<c:forEach items="#{DataversePage.filterQueries}" var="clickedFilterQuery" varStatus="status">
<f:param name="fq#{status.index}" value='#{clickedFilterQuery}' disable="#{clickedFilterQuery == facetLabel.filterQuery}"/>
</c:forEach>
<f:param name="types" value="#{SearchIncludeFragment.selectedTypesString}"/>
<f:param name="sort" value="#{SearchIncludeFragment.sortField}"/>
<f:param name="order" value="#{SearchIncludeFragment.sortOrder}"/>
<f:param name="types" value="#{DataversePage.selectedTypesString}"/>
<f:param name="sort" value="#{DataversePage.sortField}"/>
<f:param name="order" value="#{DataversePage.sortOrder}"/>
</h:outputLink>
</p:dataList>
<ui:fragment rendered="#{facetCategory.name != SearchIncludeFragment.searchFieldType and facetCategory.name != SearchIncludeFragment.searchFieldSubtree}">
<p:panelGrid styleClass="facetsMoreLess" columns="2" rendered="#{(SearchIncludeFragment.getNumberOfFacets(facetCategory.name,5) lt facetCategory.facetLabel.size()) or (SearchIncludeFragment.getNumberOfFacets(facetCategory.name,5) gt 5)}">
<ui:fragment rendered="#{facetCategory.name != DataversePage.searchFieldType and facetCategory.name != DataversePage.searchFieldSubtree}">
<p:panelGrid styleClass="facetsMoreLess" columns="2" rendered="#{(DataversePage.getNumberOfFacets(facetCategory.name,5) lt facetCategory.facetLabel.size()) or (DataversePage.getNumberOfFacets(facetCategory.name,5) gt 5)}">
<ui:fragment>
<p:commandLink actionListener="#{SearchIncludeFragment.incrementFacets(facetCategory.name,-5)}" update="facetCategoryList" rendered="#{SearchIncludeFragment.getNumberOfFacets(facetCategory.name,5) gt 5}">#{bundle.less}</p:commandLink>
<p:commandLink actionListener="#{DataversePage.incrementFacets(facetCategory.name,-5)}" update="facetCategoryList" rendered="#{DataversePage.getNumberOfFacets(facetCategory.name,5) gt 5}">#{bundle.less}</p:commandLink>
</ui:fragment>
<ui:fragment>
<p:commandLink actionListener="#{SearchIncludeFragment.incrementFacets(facetCategory.name,5)}" update="facetCategoryList" rendered="#{SearchIncludeFragment.getNumberOfFacets(facetCategory.name,5) lt facetCategory.facetLabel.size()}">#{bundle.more}</p:commandLink>
<p:commandLink actionListener="#{DataversePage.incrementFacets(facetCategory.name,5)}" update="facetCategoryList" rendered="#{DataversePage.getNumberOfFacets(facetCategory.name,5) lt facetCategory.facetLabel.size()}">#{bundle.more}</p:commandLink>
</ui:fragment>
</p:panelGrid>
</ui:fragment>
Expand Down

0 comments on commit d7c1807

Please sign in to comment.