source: vlo/trunk/vlo_web_app/src/main/java/eu/clarin/cmdi/vlo/pages/SolrFacetFieldDataProvider.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: 2.8 KB
Line 
1package eu.clarin.cmdi.vlo.pages;
2
3import java.util.Collections;
4import java.util.Iterator;
5import java.util.List;
6
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.common.params.FacetParams;
11import org.apache.wicket.markup.repeater.data.IDataProvider;
12import org.apache.wicket.model.IModel;
13import org.apache.wicket.model.Model;
14import org.slf4j.Logger;
15import org.slf4j.LoggerFactory;
16
17import eu.clarin.cmdi.vlo.dao.DaoLocator;
18import eu.clarin.cmdi.vlo.dao.SearchResultsDao;
19
20public class SolrFacetFieldDataProvider implements IDataProvider<Count> {
21    private final static Logger LOG = LoggerFactory.getLogger(SolrFacetFieldDataProvider.class);
22
23    private static final long serialVersionUID = 1L;
24    private FacetField facet;
25    private SolrQuery query;
26
27    private final String selectedFacet;
28
29    public SolrFacetFieldDataProvider(String selectedFacet, SearchPageQuery pageQuery) {
30        this.selectedFacet = selectedFacet;
31        query = pageQuery.getSolrQuery();
32        query.setFacetSort(FacetParams.FACET_SORT_INDEX);
33        query.setFacetLimit(-1);
34        String[] facetFields = query.getFacetFields();
35        for (String facetField : facetFields) {
36            if (!facetField.equals(selectedFacet)) {
37                query.removeFacetField(facetField);
38            }
39        }
40
41    }
42
43    private FacetField getFacet() {
44        if (facet == null) {
45            SearchResultsDao searchResultsDao = DaoLocator.getSearchResultsDao();
46            List<FacetField> facets = searchResultsDao.getFacets(query);
47            if (facets == null || facets.isEmpty()) {
48                facet = new EmptyFacetField(selectedFacet);
49            } else if (facets.size() != 1) {
50                LOG.warn("Should have only one facet, but got: " + facets.size() + ". Choosing first one.");
51            } else {
52                facet = facets.get(0);
53            }
54        }
55        return facet;
56    }
57
58    @Override
59    public Iterator<? extends Count> iterator(int first, int count) {
60        return getFacet().getValues().subList(first, first + count).iterator();
61    }
62
63    @Override
64    public int size() {
65        return getFacet().getValueCount();
66    }
67
68    @Override
69    public IModel<Count> model(Count count) {
70        return new Model<Count>(count);
71    }
72
73    @Override
74    public void detach() {
75    }
76
77    @SuppressWarnings("serial")
78    private static class EmptyFacetField extends FacetField {
79        public EmptyFacetField(String name) {
80            super(name);
81        }
82
83        public List<Count> getValues() {
84            return (List<Count>) Collections.EMPTY_LIST.iterator();
85        }
86
87        public int getValueCount() {
88            return 0;
89        }
90
91    }
92}
Note: See TracBrowser for help on using the repository browser.