source: vlo/trunk/vlo_web_app/src/main/java/eu/clarin/cmdi/vlo/pages/SearchPageQuery.java @ 2768

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

Integrated parameter branche into trunk again

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.