source: vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java @ 4601

Last change on this file since 4601 was 4601, checked in by Twan Goosen, 10 years ago

Expansion state for facet panels (through expansion state model)

File size: 4.1 KB
Line 
1package eu.clarin.cmdi.vlo.wicket.pages;
2
3import eu.clarin.cmdi.vlo.config.VloConfig;
4import eu.clarin.cmdi.vlo.pojo.ExpansionState;
5import eu.clarin.cmdi.vlo.wicket.components.FacetsPanel;
6import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
7import eu.clarin.cmdi.vlo.service.FacetFieldsService;
8import eu.clarin.cmdi.vlo.wicket.components.FacetPanel;
9import eu.clarin.cmdi.vlo.wicket.components.SearchForm;
10import eu.clarin.cmdi.vlo.wicket.components.SearchResultsPanel;
11import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
12import eu.clarin.cmdi.vlo.wicket.model.FacetFieldsModel;
13import eu.clarin.cmdi.vlo.wicket.model.FacetSelectionModel;
14import java.util.Collection;
15import java.util.List;
16import java.util.Map;
17import org.apache.solr.client.solrj.response.FacetField;
18import org.apache.wicket.ajax.AjaxRequestTarget;
19import org.apache.wicket.request.mapper.parameter.PageParameters;
20import org.apache.wicket.markup.html.WebPage;
21import org.apache.wicket.markup.html.panel.Panel;
22import org.apache.wicket.model.IModel;
23import org.apache.wicket.model.Model;
24import org.apache.wicket.spring.injection.annot.SpringBean;
25
26/**
27 * The main search page showing a search form, facets, and search results
28 *
29 * @author twagoo
30 */
31public class FacetedSearchPage extends WebPage {
32
33    private static final long serialVersionUID = 1L;
34
35    @SpringBean
36    private FacetFieldsService facetFieldsService;
37    @SpringBean
38    private VloConfig vloConfig;
39
40    private final Panel searchResultsPanel;
41    private final Panel facetsPanel;
42    private final Panel collectionsPanel;
43
44    public FacetedSearchPage(final PageParameters parameters) {
45        super(parameters);
46
47        final QueryFacetsSelection selection = paramsToQueryFacetSelection(parameters);
48        final Model<QueryFacetsSelection> queryModel = new Model<QueryFacetsSelection>(selection);
49
50        final SearchForm searchForm = new SearchForm("search", queryModel);
51        add(searchForm);
52
53        collectionsPanel = createCollectionsPanel("collectionsFacet", queryModel);
54        add(collectionsPanel);
55
56        facetsPanel = createFacetsPanel("facets", queryModel);
57        add(facetsPanel);
58
59        searchResultsPanel = new SearchResultsPanel("searchResults", queryModel);
60        add(searchResultsPanel);
61    }
62
63    private Panel createCollectionsPanel(final String id, final Model<QueryFacetsSelection> queryModel) {
64        final FacetFieldModel collectionFacetFieldModel = new FacetFieldModel(facetFieldsService, vloConfig.getCollectionFacet(), queryModel);
65        final FacetSelectionModel collectionSelectionModel = new FacetSelectionModel(collectionFacetFieldModel, queryModel);
66        final FacetPanel panel = new FacetPanel(id, collectionSelectionModel, new Model<ExpansionState>(ExpansionState.COLLAPSED)) {
67
68            @Override
69            protected void selectionChanged(AjaxRequestTarget target) {
70                updateSelection(target);
71            }
72        };
73        panel.setOutputMarkupId(true);
74        return panel;
75    }
76
77    private Panel createFacetsPanel(final String id, final Model<QueryFacetsSelection> queryModel) {
78        final IModel<List<FacetField>> facetFieldsModel = new FacetFieldsModel(facetFieldsService, vloConfig.getFacetFields(), queryModel);
79        final FacetsPanel panel = new FacetsPanel(id, facetFieldsModel, queryModel) {
80
81            @Override
82            protected void selectionChanged(AjaxRequestTarget target) {
83                updateSelection(target);
84            }
85        };
86        panel.setOutputMarkupId(true);
87        return panel;
88    }
89
90    private void updateSelection(AjaxRequestTarget target) {
91        // selection changed, update facets and search results
92        target.add(searchResultsPanel);
93        target.add(facetsPanel);
94        target.add(collectionsPanel);
95    }
96
97    private QueryFacetsSelection paramsToQueryFacetSelection(final PageParameters parameters) {
98        final String query = parameters.get("q").toOptionalString();
99
100        //TODO: Map parameters to facet selection
101        final Map<String, Collection<String>> selection = null;
102
103        return new QueryFacetsSelection(query, selection);
104    }
105}
Note: See TracBrowser for help on using the repository browser.