1 | package eu.clarin.cmdi.vlo.wicket.pages; |
---|
2 | |
---|
3 | import eu.clarin.cmdi.vlo.config.VloConfig; |
---|
4 | import eu.clarin.cmdi.vlo.pojo.ExpansionState; |
---|
5 | import eu.clarin.cmdi.vlo.wicket.components.FacetsPanel; |
---|
6 | import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; |
---|
7 | import eu.clarin.cmdi.vlo.service.FacetFieldsService; |
---|
8 | import eu.clarin.cmdi.vlo.wicket.components.FacetPanel; |
---|
9 | import eu.clarin.cmdi.vlo.wicket.components.SearchForm; |
---|
10 | import eu.clarin.cmdi.vlo.wicket.components.SearchResultsPanel; |
---|
11 | import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel; |
---|
12 | import eu.clarin.cmdi.vlo.wicket.model.FacetFieldsModel; |
---|
13 | import eu.clarin.cmdi.vlo.wicket.model.FacetSelectionModel; |
---|
14 | import java.util.Collection; |
---|
15 | import java.util.List; |
---|
16 | import java.util.Map; |
---|
17 | import org.apache.solr.client.solrj.response.FacetField; |
---|
18 | import org.apache.wicket.ajax.AjaxRequestTarget; |
---|
19 | import org.apache.wicket.request.mapper.parameter.PageParameters; |
---|
20 | import org.apache.wicket.markup.html.WebPage; |
---|
21 | import org.apache.wicket.markup.html.panel.Panel; |
---|
22 | import org.apache.wicket.model.IModel; |
---|
23 | import org.apache.wicket.model.Model; |
---|
24 | import 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 | */ |
---|
31 | public 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 | } |
---|