source: vlo/branches/to-wicket-1.6/vlo_web_app/src/main/java/eu/clarin/cmdi/vlo/pages/FacetBoxPanel.java @ 4232

Last change on this file since 4232 was 4232, checked in by keeloo, 10 years ago

Removed VloPageParameters? class. ResourceLinkPanel? test is failing.

File size: 5.4 KB
Line 
1package eu.clarin.cmdi.vlo.pages;
2
3import java.util.ArrayList;
4import java.util.HashSet;
5import java.util.List;
6import java.util.Set;
7import org.apache.solr.client.solrj.response.FacetField;
8import org.apache.solr.client.solrj.response.FacetField.Count;
9import org.apache.wicket.AttributeModifier;
10import org.apache.wicket.markup.html.WebMarkupContainer;
11import org.apache.wicket.markup.html.basic.Label;
12import org.apache.wicket.markup.html.link.BookmarkablePageLink;
13import org.apache.wicket.markup.html.list.ListItem;
14import org.apache.wicket.markup.html.list.ListView;
15import org.apache.wicket.model.IModel;
16import org.apache.wicket.model.Model;
17import org.apache.wicket.request.mapper.parameter.PageParameters;
18
19public class FacetBoxPanel extends BasePanel {
20    private static final Set<String> IGNORABLE_VALUES = new HashSet<String>();
21    static {
22        IGNORABLE_VALUES.add("unknown");
23        IGNORABLE_VALUES.add("unspecified");
24    }
25    private static final int MAX_NR_OF_FACET_VALUES = 10;
26    private static final long serialVersionUID = 1L;
27    private Label label;
28    private FacetHeaderPanel facetHeaderPanel;
29    private FacetModel facetModel;
30    private int maxNrOfFacetValues;
31   
32    public FacetBoxPanel(String id, IModel<FacetField> model, String tooltipText) {
33        super(id, model);
34        setOutputMarkupId(true);
35        setMaxNrOfFacetValues(MAX_NR_OF_FACET_VALUES);
36        add(new AttributeModifier("title", tooltipText));
37       
38    }
39     
40    @SuppressWarnings({"serial"})
41    public FacetBoxPanel create(final SearchPageQuery query) {
42        final FacetField facetField = (FacetField) getDefaultModelObject();
43        facetModel = new FacetModel(facetField);
44        facetModel.setSelectedValue(query.getSelectedValue(facetField));
45        label = new Label("headerLabel", facetField.getName());
46        add(label);
47        facetHeaderPanel = new FacetHeaderPanel("facetHeaderPanel", new Model<FacetModel>(facetModel), query);
48        if (facetModel.isSelected()) {
49            add(facetHeaderPanel);
50        } else {
51            add(new WebMarkupContainer("facetHeaderPanel"));
52        }
53        final boolean showMore = facetField.getValueCount() > maxNrOfFacetValues + 1;
54        List<Count> values = getFacetListForBox(facetField, showMore);
55        ListView<Count> facetList = new ListView<Count>("facetList", values) {
56            @Override
57            protected void populateItem(ListItem<Count> item) {
58                item.add(new FacetLinkPanel("facetLinks", item.getModel(), query));
59            }
60
61            @Override
62            public boolean isVisible() {
63                return !facetModel.isSelected();
64            }
65        };
66        add(facetList);
67        PageParameters facetParameters = new PageParameters ();
68           
69        PageParameters extraParameters = new PageParameters ();
70        // kj; add the new values directly
71        // extraParameters.add(ShowAllFacetValuesPage.SELECTED_FACET_PARAM, facetField.getName());
72        // extraParameters.add(ShowAllFacetValuesPage.FACET_MIN_OCCURS, "1");
73        facetParameters.add(ShowAllFacetValuesPage.SELECTED_FACET_PARAM, facetField.getName());
74        facetParameters.add(ShowAllFacetValuesPage.FACET_MIN_OCCURS, "1");
75        //TODO: merge again once implemented
76        // facetParameters.add(extraParameters);
77
78        add(new BookmarkablePageLink("showMore", ShowAllFacetValuesPage.class, extraParameters) {
79            @Override
80            public boolean isVisible() {
81                return !facetModel.isSelected() && showMore;
82            }
83        });
84        return this;
85    }
86
87    List<Count> getFacetListForBox(final FacetField facetField, final boolean showMore) {
88        List<Count> allValues = facetField.getValues();
89        List<Count> values = new ArrayList<Count>();
90        if (showMore) {
91            if (facetField.getValueCount() == maxNrOfFacetValues || facetField.getValueCount() == maxNrOfFacetValues + 1) { //Show all values, the "more" link can be used as the extra facet
92                values = allValues;
93            } else {// make a sublist
94                //IGNORABLE_VALUES (like "unknown") are move to the back of the list and should only be shown when you click "more...", unless the list is too small then whe can just show them.
95                List<Count> ignorables = new ArrayList<Count>();
96                for (int i = 0; values.size() < maxNrOfFacetValues && i < allValues.size(); i++) {
97                    Count count = allValues.get(i);
98                    if (!IGNORABLE_VALUES.contains(count.getName().toLowerCase())) {
99                        values.add(count);
100                    } else {
101                        ignorables.add(count);
102                    }
103                }
104                int stillToAdd = maxNrOfFacetValues - values.size();
105                for (int i = 0; i < stillToAdd && i < ignorables.size(); i++) {
106                    values.add(ignorables.get(i));
107
108                }
109            }
110        } else { //show all values
111            values = allValues;
112        }
113        return values;
114    }
115
116    public void replaceHeader(boolean isSelected, String selectedValue) {
117        facetModel.setSelectedValue(selectedValue);
118        if (isSelected) {
119            label.replaceWith(facetHeaderPanel);
120        } else {
121            facetHeaderPanel.replaceWith(label);
122        }
123
124    }
125
126    void setMaxNrOfFacetValues(int maxNrOfFacetValues) {
127        this.maxNrOfFacetValues = maxNrOfFacetValues;
128    }
129
130}
Note: See TracBrowser for help on using the repository browser.