1 | package eu.clarin.cmdi.vlo.pages; |
---|
2 | |
---|
3 | import java.util.Map; |
---|
4 | |
---|
5 | import org.apache.wicket.request.mapper.parameter.PageParameters; |
---|
6 | import org.apache.wicket.markup.html.WebMarkupContainer; |
---|
7 | import org.apache.wicket.markup.html.basic.Label; |
---|
8 | import org.apache.wicket.markup.html.link.BookmarkablePageLink; |
---|
9 | import org.apache.wicket.markup.repeater.RepeatingView; |
---|
10 | |
---|
11 | public class ShowAllFacetValuesPage extends BasePage { |
---|
12 | |
---|
13 | public static final String SELECTED_FACET_PARAM = "selectedFacet"; |
---|
14 | public static final String FACET_MIN_OCCURS = "facetMinOccurs"; |
---|
15 | public static final Integer FACET_MIN_OCCURS_VALUE = 2; // for parameter FACET_MIN_OCCURS to show only values that occur with this minimal frequency |
---|
16 | |
---|
17 | public ShowAllFacetValuesPage(PageParameters parameters) { |
---|
18 | super(parameters); |
---|
19 | final SearchPageQuery query = new SearchPageQuery(parameters); |
---|
20 | |
---|
21 | // show facets that were already chosen |
---|
22 | addFilteredFacets(query); |
---|
23 | |
---|
24 | // filter for minimal frequency of values |
---|
25 | addOccurrencesFilter(parameters); |
---|
26 | |
---|
27 | String selectedFacet = (parameters.get(SELECTED_FACET_PARAM)).toString(); |
---|
28 | |
---|
29 | Integer facetMinOccurs = (parameters.get(FACET_MIN_OCCURS)).toInt(1); // take care of 1 as default value |
---|
30 | |
---|
31 | add(new Label("category", selectedFacet)); |
---|
32 | SolrFacetFieldDataProvider data = new SolrFacetFieldDataProvider(selectedFacet, query); |
---|
33 | add(new AlphabeticalPanel("alphaPanel", data, query, facetMinOccurs)); |
---|
34 | } |
---|
35 | |
---|
36 | /** |
---|
37 | * Adds a link to allow filtering for minimal occurrences of a value or to show all values again |
---|
38 | * @param parameters |
---|
39 | */ |
---|
40 | private void addOccurrencesFilter(PageParameters parameters) { |
---|
41 | PageParameters newParameters = (PageParameters) parameters.clone(); |
---|
42 | newParameters.remove(FACET_MIN_OCCURS); |
---|
43 | if(!parameters.containsKey(FACET_MIN_OCCURS) || parameters.getAsInteger(FACET_MIN_OCCURS) == 1) { |
---|
44 | newParameters.add(FACET_MIN_OCCURS, FACET_MIN_OCCURS_VALUE.toString()); |
---|
45 | add(new BookmarkablePageLink<Void>("filter", ShowAllFacetValuesPage.class, newParameters).add(new Label("filterLabel", "Show only values that occur at least "+FACET_MIN_OCCURS_VALUE+" times"))); |
---|
46 | } else { |
---|
47 | add(new BookmarkablePageLink<Void>("filter", ShowAllFacetValuesPage.class, newParameters).add(new Label("filterLabel", "Show all values"))); |
---|
48 | } |
---|
49 | } |
---|
50 | |
---|
51 | /** |
---|
52 | * Add view that shows already selected facets |
---|
53 | * @param query |
---|
54 | */ |
---|
55 | private void addFilteredFacets(SearchPageQuery query) { |
---|
56 | Map<String, String> filterQueries = query.getFilterQueryMap(); |
---|
57 | RepeatingView filteredFacets = new RepeatingView("filteredFacets"); |
---|
58 | if (filterQueries != null && !filterQueries.isEmpty()) { |
---|
59 | WebMarkupContainer wmc = new WebMarkupContainer(filteredFacets.newChildId()); |
---|
60 | wmc.add(new Label("filteredFacet", "Selected categories:")); |
---|
61 | filteredFacets.add(wmc); |
---|
62 | for (String fq : filterQueries.keySet()) { |
---|
63 | wmc = new WebMarkupContainer(filteredFacets.newChildId()); |
---|
64 | wmc.add(new Label("filteredFacet", fq + " = " + filterQueries.get(fq))); |
---|
65 | filteredFacets.add(wmc); |
---|
66 | } |
---|
67 | } |
---|
68 | add(filteredFacets); |
---|
69 | } |
---|
70 | } |
---|