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

Last change on this file since 4220 was 4220, checked in by twagoo, 10 years ago

Merged twagoo branch of to-wicket-1.6 back to original, removed this branch

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