source: vlo/trunk/vlo_webapp/src/main/java/eu/clarin/cmdi/vlo/pages/FacetBoxPanel.java @ 770

Last change on this file since 770 was 770, checked in by patdui, 14 years ago
  • made some things configurable
  • added "more..." page
  • Made all links bookmarkable
File size: 3.3 KB
Line 
1package eu.clarin.cmdi.vlo.pages;
2
3import java.util.List;
4
5import org.apache.solr.client.solrj.response.FacetField;
6import org.apache.solr.client.solrj.response.FacetField.Count;
7import org.apache.solr.common.SolrDocument;
8import org.apache.wicket.PageParameters;
9import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable;
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.markup.html.panel.Panel;
16import org.apache.wicket.model.IModel;
17import org.apache.wicket.model.Model;
18
19public class FacetBoxPanel extends Panel {
20
21    private static final int MAX_NR_OF_FACET_VALUES = 5;
22    private static final long serialVersionUID = 1L;
23    private Label label;
24    private FacetHeaderPanel facetHeaderPanel;
25    private FacetModel facetModel;
26
27    public FacetBoxPanel(String id, IModel<FacetField> model) {
28        super(id, model);
29        setOutputMarkupId(true);
30    }
31
32    @SuppressWarnings("serial")
33    public FacetBoxPanel create(final SearchPageQuery query, final AjaxFallbackDefaultDataTable<SolrDocument> searchResultList) {
34        final FacetField facetField = (FacetField) getDefaultModelObject();
35        facetModel = new FacetModel(facetField);
36        facetModel.setSelectedValue(query.getSelectedValue(facetField));
37        label = new Label("headerLabel", facetField.getName());
38        add(label);
39        facetHeaderPanel = new FacetHeaderPanel("facetHeaderPanel", new Model<FacetModel>(facetModel), query);
40        if (facetModel.isSelected()) {
41            add(facetHeaderPanel);
42        } else {
43            add(new WebMarkupContainer("facetHeaderPanel"));
44        }
45        List<Count> allValues = facetField.getValues();
46        List<Count> values = allValues;
47        final boolean showMore = allValues != null && allValues.size() > MAX_NR_OF_FACET_VALUES;
48        if (showMore) {
49            values = allValues.subList(0, MAX_NR_OF_FACET_VALUES);
50        }
51        ListView<Count> facetList = new ListView<Count>("facetList", values) {
52            @Override
53            protected void populateItem(ListItem<Count> item) {
54                item.add(new FacetLinkPanel("facetLinks", item.getModel(), query));
55            }
56
57            @Override
58            public boolean isVisible() {
59                return !facetModel.isSelected();
60            }
61        };
62        add(facetList);
63        PageParameters pageParameters = query.getPageParameters();
64        pageParameters.add(ShowAllFacetValuesPage.SELECTED_FACET_PARAM, facetField.getName());
65        add(new BookmarkablePageLink("showMore", ShowAllFacetValuesPage.class, pageParameters) { //TODO PD when nr of facet values is 6 show all instead of 5+more
66
67            public boolean isVisible() {
68                return !facetModel.isSelected() && showMore;
69            }
70
71        });
72        return this;
73    }
74
75    public void replaceHeader(boolean isSelected, String selectedValue) {
76        facetModel.setSelectedValue(selectedValue);
77        if (isSelected) {
78            label.replaceWith(facetHeaderPanel);
79        } else {
80            facetHeaderPanel.replaceWith(label);
81        }
82
83    }
84
85}
Note: See TracBrowser for help on using the repository browser.