source: vlo/branches/vlo-2.13-param/vlo_web_app/src/main/java/eu/clarin/cmdi/vlo/pages/SearchPageQuery.java @ 2659

Last change on this file since 2659 was 2659, checked in by keeloo, 11 years ago

Removed VloConfig?.get() and made the member variables static themselves. Cleaned up the VloConfig? class.

File size: 4.1 KB
Line 
1package eu.clarin.cmdi.vlo.pages;
2
3import eu.clarin.cmdi.vlo.FacetConstants;
4import eu.clarin.cmdi.vlo.config.VloConfig;
5import java.util.HashMap;
6import java.util.Map;
7import org.apache.solr.client.solrj.SolrQuery;
8import org.apache.solr.client.solrj.response.FacetField;
9import org.apache.solr.client.solrj.response.FacetField.Count;
10import org.apache.solr.client.solrj.util.ClientUtils;
11import org.apache.solr.common.params.CommonParams;
12import org.apache.wicket.IClusterable;
13import org.apache.wicket.PageParameters;
14
15public class SearchPageQuery implements IClusterable {
16
17    private static final String SOLR_SEARCH_ALL = "*:*";
18
19    private static final long serialVersionUID = 1L;
20
21    private SolrQuery query;
22    private Map<String, String> filterQueryMap = new HashMap<String, String>();
23    private String searchQuery;
24
25    public SearchPageQuery(PageParameters parameters) {
26        query = getDefaultQuery();
27        String queryParam = parameters.getString(CommonParams.Q);
28        setSearchQuery(queryParam);
29        if (queryParam != null) {
30            query.setQuery(escapeSolrQuery(queryParam));
31        } else {
32            query.setQuery(SOLR_SEARCH_ALL);
33
34        }
35        String[] filterQueries = parameters.getStringArray(CommonParams.FQ);
36        if (filterQueries != null) {
37            String[] encodedQueries = new String[filterQueries.length];
38            for (int i = 0; i < filterQueries.length; i++) {
39                String fq = filterQueries[i];
40                String[] keyValue = fq.split(":", 2);
41                filterQueryMap.put(keyValue[0], keyValue[1]);
42                encodedQueries[i] = keyValue[0] + ":" + ClientUtils.escapeQueryChars(keyValue[1]);
43            }
44            query.setFilterQueries(encodedQueries);
45        }
46    }
47
48    private String escapeSolrQuery(String value) {
49        String result = null;
50        if (value != null) {
51            result = ClientUtils.escapeQueryChars(value);
52        }
53        return result;
54    }
55
56    private SearchPageQuery(SearchPageQuery searchPageQuery) {
57        this.query = searchPageQuery.query;
58        this.filterQueryMap = new HashMap(searchPageQuery.filterQueryMap);
59        this.searchQuery = searchPageQuery.searchQuery;
60    }
61
62    public SearchPageQuery getShallowCopy() {
63        return new SearchPageQuery(this);
64    }
65
66    private SolrQuery getDefaultQuery() {
67        SolrQuery result = new SolrQuery();
68        result.setRows(10);
69        result.setStart(0);
70        result.setFields(FacetConstants.FIELD_NAME, FacetConstants.FIELD_ID, FacetConstants.FIELD_DESCRIPTION);
71        result.setFacet(true);
72        result.setFacetMinCount(1);
73        result.addFacetField(VloConfig.getFacetFields());
74        return result;
75    }
76
77    public SolrQuery getSolrQuery() {
78        return query;
79    }
80
81    public void removeFilterQuery(FacetField facetField) {
82        filterQueryMap.remove(facetField.getName());
83    }
84
85    public void setFilterQuery(Count count) {
86        filterQueryMap.put(count.getFacetField().getName(), count.getName());
87    }
88
89    public boolean isSelected(FacetField facetField) {
90        return filterQueryMap.containsKey(facetField.getName());
91    }
92
93    public String getSelectedValue(FacetField field) {
94        return filterQueryMap.get(field.getName());
95    }
96
97    public Map<String, String> getFilterQueryMap() {
98        return filterQueryMap;
99    }
100
101    public void setSearchQuery(String searchQuery) {
102        if (searchQuery == null || searchQuery.isEmpty()) {
103            searchQuery = SOLR_SEARCH_ALL;
104        }
105        this.searchQuery = searchQuery;
106    }
107
108    public String getSearchQuery() {
109        if (searchQuery.equals(SOLR_SEARCH_ALL)) {
110            searchQuery = "";
111        }
112        return searchQuery;
113    }
114
115    public PageParameters getPageParameters() {
116        PageParameters result = new PageParameters();
117        if (!getSearchQuery().isEmpty()) {
118            result.add(CommonParams.Q, getSearchQuery());
119        }
120        for (String facet : filterQueryMap.keySet()) {
121            String facetValue = filterQueryMap.get(facet);
122            result.add(CommonParams.FQ, facet + ":" + facetValue);
123        }
124        return result;
125    }
126
127}
Note: See TracBrowser for help on using the repository browser.