<%-- The contents of this file are subject to the license and copyright detailed in the LICENSE and NOTICE files at the root of the source tree and available online at http://www.dspace.org/license/ --%> <%-- - Display the form to refine the simple-search and dispaly the results of the search - - Attributes to pass in: - - scope - pass in if the scope of the search was a community - or a collection - scopes - the list of available scopes where limit the search - sortOptions - the list of available sort options - availableFilters - the list of filters available to the user - - query - The original query - queryArgs - The query configuration parameters (rpp, sort, etc.) - appliedFilters - The list of applied filters (user input or facet) - - search.error - a flag to say that an error has occurred - spellcheck - the suggested spell check query (if any) - qResults - the discovery results - items - the results. An array of Items, most relevant first - communities - results, Community[] - collections - results, Collection[] - - admin_button - If the user is an admin --%> <%@page import="org.dspace.core.Utils"%> <%@page import="com.coverity.security.Escape"%> <%@page import="org.dspace.discovery.configuration.DiscoverySearchFilterFacet"%> <%@page import="org.dspace.app.webui.util.UIUtil"%> <%@page import="java.util.HashMap"%> <%@page import="java.util.ArrayList"%> <%@page import="org.dspace.discovery.DiscoverFacetField"%> <%@page import="org.dspace.discovery.configuration.DiscoverySearchFilter"%> <%@page import="org.dspace.discovery.DiscoverFilterQuery"%> <%@page import="org.dspace.discovery.DiscoverQuery"%> <%@page import="org.apache.commons.lang.StringUtils"%> <%@page import="java.util.Map"%> <%@page import="org.dspace.discovery.DiscoverResult.FacetResult"%> <%@page import="org.dspace.discovery.DiscoverResult"%> <%@page import="org.dspace.content.DSpaceObject"%> <%@page import="java.util.List"%> <%@ page contentType="text/html;charset=UTF-8" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://www.dspace.org/dspace-tags.tld" prefix="dspace" %> <%@ page import="java.net.URLEncoder" %> <%@ page import="org.dspace.content.Community" %> <%@ page import="org.dspace.content.Collection" %> <%@ page import="org.dspace.content.Item" %> <%@ page import="org.dspace.sort.SortOption" %> <%@ page import="java.util.Enumeration" %> <%@ page import="java.util.Set" %> <% // Get the attributes DSpaceObject scope = (DSpaceObject) request.getAttribute("scope" ); String searchScope = scope!=null ? scope.getHandle() : ""; List scopes = (List) request.getAttribute("scopes"); List sortOptions = (List) request.getAttribute("sortOptions"); String query = (String) request.getAttribute("query"); if (query == null) { query = ""; } Boolean error_b = (Boolean)request.getAttribute("search.error"); boolean error = error_b==null ? false : error_b.booleanValue(); DiscoverQuery qArgs = (DiscoverQuery) request.getAttribute("queryArgs"); String sortedBy = qArgs.getSortField(); String order = qArgs.getSortOrder().toString(); String ascSelected = (SortOption.ASCENDING.equalsIgnoreCase(order) ? "selected=\"selected\"" : ""); String descSelected = (SortOption.DESCENDING.equalsIgnoreCase(order) ? "selected=\"selected\"" : ""); String httpFilters =""; String spellCheckQuery = (String) request.getAttribute("spellcheck"); List availableFilters = (List) request.getAttribute("availableFilters"); List appliedFilters = (List) request.getAttribute("appliedFilters"); List appliedFilterQueries = (List) request.getAttribute("appliedFilterQueries"); if (appliedFilters != null && appliedFilters.size() >0 ) { int idx = 1; for (String[] filter : appliedFilters) { if (filter == null || filter[0] == null || filter[0].trim().equals("") || filter[2] == null || filter[2].trim().equals("")) { idx++; continue; } httpFilters += "&filter_field_"+idx+"="+URLEncoder.encode(filter[0],"UTF-8"); httpFilters += "&filter_type_"+idx+"="+URLEncoder.encode(filter[1],"UTF-8"); httpFilters += "&filter_value_"+idx+"="+URLEncoder.encode(filter[2],"UTF-8"); idx++; } } int rpp = qArgs.getMaxResults(); int etAl = ((Integer) request.getAttribute("etal")).intValue(); String[] options = new String[]{"equals","contains","authority","notequals","notcontains","notauthority"}; // Admin user or not Boolean admin_b = (Boolean)request.getAttribute("admin_button"); boolean admin_button = (admin_b == null ? false : admin_b.booleanValue()); %> <%--

Search Results

--%>

<%-- Controls for a repeat search --%>

"/> " /> <% if (StringUtils.isNotBlank(spellCheckQuery)) {%>

<%= spellCheckQuery %>

<% } %> <% if (appliedFilters.size() > 0 ) { %>
<% int idx = 1; for (String[] filter : appliedFilters) { boolean found = false; %>
<% idx++; } %>
<% } %> ">
<% if (availableFilters.size() > 0) { %>

<% if (appliedFilterQueries.size() > 0 ) { int idx = 1; for (String[] filter : appliedFilters) { boolean found = false; %> <% idx++; } } %> " onclick="return validateFilters()" />
<% } %> <%-- Include a component for modifying sort by, order, results per page, and et-al limit --%>
<% DiscoverResult qResults = (DiscoverResult)request.getAttribute("queryresults"); List items = (List )request.getAttribute("items"); List communities = (List )request.getAttribute("communities"); Listcollections = (List)request.getAttribute("collections"); if( error ) { %>

<% } else if( qResults != null && qResults.getTotalSearchResults() == 0 ) { %> <%--

Search produced no results.

--%>

<% } else if( qResults != null) { long pageTotal = ((Long)request.getAttribute("pagetotal" )).longValue(); long pageCurrent = ((Long)request.getAttribute("pagecurrent")).longValue(); long pageLast = ((Long)request.getAttribute("pagelast" )).longValue(); long pageFirst = ((Long)request.getAttribute("pagefirst" )).longValue(); // create the URLs accessing the previous and next search result pages String baseURL = request.getContextPath() + (!searchScope.equals("") ? "/handle/" + searchScope : "") + "/simple-search?query=" + URLEncoder.encode(query,"UTF-8") + httpFilters + "&sort_by=" + sortedBy + "&order=" + order + "&rpp=" + rpp + "&etal=" + etAl + "&start="; String nextURL = baseURL; String firstURL = baseURL; String lastURL = baseURL; String prevURL = baseURL + (pageCurrent-2) * qResults.getMaxResults(); nextURL = nextURL + (pageCurrent) * qResults.getMaxResults(); firstURL = firstURL +"0"; lastURL = lastURL + (pageTotal-1) * qResults.getMaxResults(); %>
<% long lastHint = qResults.getStart()+qResults.getMaxResults() <= qResults.getTotalSearchResults()? qResults.getStart()+qResults.getMaxResults():qResults.getTotalSearchResults(); %> <%--

Results - of --%>

<%=qResults.getStart()+1%> <%=lastHint%> <%=qResults.getTotalSearchResults()%> <%=(float) qResults.getSearchTime() / 1000%>
<% if (communities.size() > 0 ) { %>
<% } %> <% if (collections.size() > 0 ) { %>
<% } %> <% if (items.size() > 0) { %>
<% } %>
<%-- if the result page is enought long... --%> <% if ((communities.size() + collections.size() + items.size()) > 10) {%> <%-- show again the navigation info/links --%>
<%--

Results - of --%>

<%=qResults.getStart()+1%> <%=lastHint%> <%=qResults.getTotalSearchResults()%> <%=(float) qResults.getSearchTime() / 1000 %>
<% } %> <% } %> <% boolean brefine = false; List facetsConf = (List) request.getAttribute("facetsConfig"); Map showFacets = new HashMap(); for (DiscoverySearchFilterFacet facetConf : facetsConf) { if(qResults!=null) { String f = facetConf.getIndexFieldName(); List facet = qResults.getFacetResult(f); if (facet.size() == 0) { facet = qResults.getFacetResult(f+".year"); if (facet.size() == 0) { showFacets.put(f, false); continue; } } boolean showFacet = false; for (FacetResult fvalue : facet) { if(!appliedFilterQueries.contains(f+"::"+fvalue.getFilterType()+"::"+fvalue.getAsFilterQuery())) { showFacet = true; break; } } showFacets.put(f, showFacet); brefine = brefine || showFacet; } } if (brefine) { %>

<% for (DiscoverySearchFilterFacet facetConf : facetsConf) { String f = facetConf.getIndexFieldName(); if (!showFacets.get(f)) continue; List facet = qResults.getFacetResult(f); if (facet.size() == 0) { facet = qResults.getFacetResult(f+".year"); } int limit = facetConf.getFacetLimit()+1; String fkey = "jsp.search.facet.refine."+f; %>
    <% int idx = 1; int currFp = UIUtil.getIntParameter(request, f+"_page"); if (currFp < 0) { currFp = 0; } for (FacetResult fvalue : facet) { if (idx != limit && !appliedFilterQueries.contains(f+"::"+fvalue.getFilterType()+"::"+fvalue.getAsFilterQuery())) { %>
  • <%= fvalue.getCount() %> " title="<%=fvalue.getDisplayedValue() %>"> <%= StringUtils.abbreviate(fvalue.getDisplayedValue(),36) %>
  • <% idx++; } if (idx > limit) { break; } } if (currFp > 0 || idx == limit) { %>
  • . <% if (currFp > 0) { %> <% } %> <% if (idx == limit) { %> <% } %>
  • <% } %>
<% } %>
<% } %>