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

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