Changeset 4511


Ignore:
Timestamp:
02/13/14 16:16:28 (10 years ago)
Author:
twagoo
Message:

implemented solr query factory, added optional textual query to model

Location:
vlo/branches/vlo-3.0/vlo-web-app/src
Files:
3 added
10 edited

Legend:

Unmodified
Added
Removed
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/components/FacetsPanel.java

    r4501 r4511  
    1818
    1919import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     20import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2021import eu.clarin.cmdi.vlo.service.FacetFieldsService;
    2122import eu.clarin.cmdi.vlo.service.impl.FacetFieldsDataProvider;
     23import java.util.List;
    2224import org.apache.solr.client.solrj.response.FacetField;
    2325import org.apache.wicket.markup.html.panel.Panel;
     
    2527import org.apache.wicket.markup.repeater.data.DataView;
    2628import org.apache.wicket.markup.repeater.data.IDataProvider;
    27 import org.apache.wicket.model.util.ListModel;
     29import org.apache.wicket.model.IModel;
     30import org.apache.wicket.model.PropertyModel;
    2831import org.apache.wicket.spring.injection.annot.SpringBean;
    2932
     
    3639    @SpringBean
    3740    private FacetFieldsService facetFieldsService;
    38    
    39     public FacetsPanel(String id, ListModel<FacetSelection> model) {
     41
     42    public FacetsPanel(String id, IModel<QueryFacetsSelection> model) {
    4043        super(id, model);
    4144
    42         final IDataProvider<FacetField> provider = new FacetFieldsDataProvider(facetFieldsService, model);
     45        final IDataProvider<FacetField> provider = new FacetFieldsDataProvider(facetFieldsService,
     46                new PropertyModel<List<FacetSelection>>(model, "selection"),
     47                new PropertyModel<String>(model, "query"));
    4348        add(new DataView<FacetField>("facets", provider) {
    4449
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSpringConfig.java

    r4507 r4511  
    7373    @Bean
    7474    public SolrQueryFactory queryFactory() {
    75         return new SolrQueryFactoryImpl();
     75        return new SolrQueryFactoryImpl(vloConfig());
    7676    }
    7777   
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pages/FacetedSearchPage.java

    r4501 r4511  
    44import eu.clarin.cmdi.vlo.pojo.Facet;
    55import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     6import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    67import java.util.Arrays;
    78import java.util.Collections;
    89import org.apache.wicket.request.mapper.parameter.PageParameters;
    910import org.apache.wicket.markup.html.WebPage;
    10 import org.apache.wicket.model.util.ListModel;
     11import org.apache.wicket.model.Model;
    1112
    1213public class FacetedSearchPage extends WebPage {
     
    1617    public FacetedSearchPage(final PageParameters parameters) {
    1718        super(parameters);
    18         final FacetSelection languageSelection = new FacetSelection(new Facet("Language"), Collections.singleton("Dutch"));
    19         final FacetSelection typeSelection = new FacetSelection(new Facet("Resource type"), Collections.<String>emptySet());
    2019
    21         add(new FacetsPanel("facets",
    22                 new ListModel<FacetSelection>(
    23                         Arrays.asList(languageSelection, typeSelection)
    24                 )));
     20        final FacetSelection languageSelection = new FacetSelection(new Facet("language"), Collections.singleton("Dutch"));
     21
     22        final QueryFacetsSelection selection = new QueryFacetsSelection(Arrays.asList(languageSelection));
     23
     24        add(new FacetsPanel("facets", new Model<QueryFacetsSelection>(selection)));
    2525    }
    2626}
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/FacetSelection.java

    r4481 r4511  
    3939    }
    4040
    41     public Collection getValue() {
     41    public Collection<String> getValue() {
    4242        return values;
    4343    }
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/FacetFieldsService.java

    r4501 r4511  
    2828public interface FacetFieldsService {
    2929   
    30     List<FacetField> getFacetFields(List<FacetSelection> selection);
     30    List<FacetField> getFacetFields(List<FacetSelection> selection, String query);
    3131   
    3232    long getFacetFieldCount();
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/SolrQueryFactory.java

    r4501 r4511  
    1515 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    1616 */
    17 
    1817package eu.clarin.cmdi.vlo.service;
    1918
     
    2827public interface SolrQueryFactory {
    2928
    30     SolrQuery createQuery(List<FacetSelection> selection);
    31    
     29    SolrQuery createFacetQuery(List<FacetSelection> selection, String query);
     30
    3231}
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/FacetFieldsDataProvider.java

    r4501 r4511  
    2525import org.apache.wicket.model.IModel;
    2626import org.apache.wicket.model.Model;
    27 import org.apache.wicket.model.util.ListModel;
    2827
    2928/**
     
    3433
    3534    private final FacetFieldsService facetFieldService;
    36     private final ListModel<FacetSelection> selectionModel;
     35    private final IModel<List<FacetSelection>> selectionModel;
     36    private final IModel<String> searchQuery;
    3737
    38     public FacetFieldsDataProvider(FacetFieldsService facetFieldService, ListModel<FacetSelection> selectionModel) {
     38    public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<List<FacetSelection>> selectionModel, IModel<String> searchQuery) {
    3939        this.facetFieldService = facetFieldService;
    4040        this.selectionModel = selectionModel;
     41        this.searchQuery = searchQuery;
    4142    }
    4243
    4344    @Override
    4445    public Iterator<? extends FacetField> iterator(long first, long count) {
    45         List<FacetField> facets = facetFieldService.getFacetFields(selectionModel.getObject());
     46        List<FacetField> facets = facetFieldService.getFacetFields(selectionModel.getObject(), searchQuery.getObject());
    4647        return facets.listIterator((int) first);
    4748    }
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrFacetFieldsService.java

    r4501 r4511  
    4040
    4141    @Override
    42     public List<FacetField> getFacetFields(List<FacetSelection> selection) {
    43         return searchResultsDao.getFacets(queryFatory.createQuery(selection));
     42    public List<FacetField> getFacetFields(List<FacetSelection> selection, String query) {
     43        return searchResultsDao.getFacets(queryFatory.createFacetQuery(selection, query));
    4444    }
    4545
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImpl.java

    r4501 r4511  
    1717package eu.clarin.cmdi.vlo.service.impl;
    1818
     19import eu.clarin.cmdi.vlo.FacetConstants;
     20import eu.clarin.cmdi.vlo.config.VloConfig;
    1921import eu.clarin.cmdi.vlo.service.SolrQueryFactory;
    2022import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     23import java.util.ArrayList;
    2124import java.util.List;
    2225import org.apache.solr.client.solrj.SolrQuery;
     26import org.apache.solr.client.solrj.util.ClientUtils;
    2327
    2428/**
     
    2832public class SolrQueryFactoryImpl implements SolrQueryFactory {
    2933
    30     @Override
    31     public SolrQuery createQuery(List<FacetSelection> selection) {
    32         throw new UnsupportedOperationException();
     34    private static final String SOLR_SEARCH_ALL = "*:*";
     35    private final VloConfig config;
     36
     37    public SolrQueryFactoryImpl(VloConfig config) {
     38        this.config = config;
    3339    }
    3440
     41    @Override
     42    public SolrQuery createFacetQuery(List<FacetSelection> selections, String queryString) {
     43        SolrQuery query = getDefaultFacetQuery();
     44
     45        if (queryString == null) {
     46            query.setQuery(SOLR_SEARCH_ALL);
     47        } else {
     48            query.setQuery(ClientUtils.escapeQueryChars(queryString));
     49        }
     50
     51        if (selections != null) {
     52            final List<String> encodedQueries = new ArrayList(selections.size());
     53            for (FacetSelection selection : selections) {
     54                String facet = selection.getFacet().getName();
     55                for (String value : selection.getValue()) {
     56                    encodedQueries.add(String.format("%s:%s", facet, ClientUtils.escapeQueryChars(value)));
     57                }
     58            }
     59            query.setFilterQueries(encodedQueries.toArray(new String[encodedQueries.size()]));
     60        }
     61        return query;
     62    }
     63
     64    private SolrQuery getDefaultFacetQuery() {
     65        SolrQuery result = new SolrQuery();
     66        result.setRows(10);
     67        result.setStart(0);
     68        result.setFields(FacetConstants.FIELD_NAME, FacetConstants.FIELD_ID, FacetConstants.FIELD_DESCRIPTION);
     69        result.setFacet(true);
     70        result.setFacetMinCount(1);
     71        result.addFacetField(config.getFacetFields());
     72        return result;
     73    }
    3574}
  • vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/pages/TestFacetedSearchPage.java

    r4501 r4511  
    2121import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    2222import org.springframework.test.context.support.AnnotationConfigContextLoader;
     23
     24import static org.hamcrest.core.AnyOf.*;
    2325
    2426/**
     
    6668        mockery.checking(new Expectations() {
    6769            {
    68                 oneOf(facetFieldsService).getFacetFieldCount();
     70                atLeast(1).of(facetFieldsService).getFacetFieldCount();
    6971                will(returnValue(2L));
    70                 oneOf(facetFieldsService).getFacetFields(with(any(List.class)));
     72                oneOf(facetFieldsService).getFacetFields(with(any(List.class)), with(anyOf(aNull(String.class), any(String.class))));
    7173                will(returnValue(Arrays.asList(new FacetField("language"), new FacetField("resource class"))));
    7274            }
Note: See TracChangeset for help on using the changeset viewer.