1 | package eu.clarin.cmdi.vlo.pages; |
---|
2 | |
---|
3 | import java.util.Map; |
---|
4 | |
---|
5 | import org.apache.wicket.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.getString(SELECTED_FACET_PARAM); |
---|
28 | Integer facetMinOccurs = parameters.getAsInteger(FACET_MIN_OCCURS, 1); |
---|
29 | add(new Label("category", selectedFacet)); |
---|
30 | SolrFacetFieldDataProvider data = new SolrFacetFieldDataProvider(selectedFacet, query); |
---|
31 | add(new AlphabeticalPanel("alphaPanel", data, query, facetMinOccurs)); |
---|
32 | } |
---|
33 | |
---|
34 | /** |
---|
35 | * Adds a link to allow filtering for minimal occurrences of a value or to show all values again |
---|
36 | * @param parameters |
---|
37 | */ |
---|
38 | private void addOccurrencesFilter(PageParameters parameters) { |
---|
39 | PageParameters newParameters = (PageParameters) parameters.clone(); |
---|
40 | newParameters.remove(FACET_MIN_OCCURS); |
---|
41 | if(!parameters.containsKey(FACET_MIN_OCCURS) || parameters.getAsInteger(FACET_MIN_OCCURS) == 1) { |
---|
42 | newParameters.add(FACET_MIN_OCCURS, FACET_MIN_OCCURS_VALUE.toString()); |
---|
43 | add(new BookmarkablePageLink<Void>("filter", ShowAllFacetValuesPage.class, newParameters).add(new Label("filterLabel", "Show only values that occur at least "+FACET_MIN_OCCURS_VALUE+" times"))); |
---|
44 | } else { |
---|
45 | add(new BookmarkablePageLink<Void>("filter", ShowAllFacetValuesPage.class, newParameters).add(new Label("filterLabel", "Show all values"))); |
---|
46 | } |
---|
47 | } |
---|
48 | |
---|
49 | /** |
---|
50 | * Add view that shows already selected facets |
---|
51 | * @param query |
---|
52 | */ |
---|
53 | private void addFilteredFacets(SearchPageQuery query) { |
---|
54 | Map<String, String> filterQueries = query.getFilterQueryMap(); |
---|
55 | RepeatingView filteredFacets = new RepeatingView("filteredFacets"); |
---|
56 | if (filterQueries != null && !filterQueries.isEmpty()) { |
---|
57 | WebMarkupContainer wmc = new WebMarkupContainer(filteredFacets.newChildId()); |
---|
58 | wmc.add(new Label("filteredFacet", "Selected categories:")); |
---|
59 | filteredFacets.add(wmc); |
---|
60 | for (String fq : filterQueries.keySet()) { |
---|
61 | wmc = new WebMarkupContainer(filteredFacets.newChildId()); |
---|
62 | wmc.add(new Label("filteredFacet", fq + " = " + filterQueries.get(fq))); |
---|
63 | filteredFacets.add(wmc); |
---|
64 | } |
---|
65 | } |
---|
66 | add(filteredFacets); |
---|
67 | } |
---|
68 | } |
---|