Changeset 4519


Ignore:
Timestamp:
02/14/14 10:21:02 (10 years ago)
Author:
twagoo
Message:

Simplified model by merging FacetSelection? into QueryFacetsSelection?

Location:
vlo/branches/vlo-3.0/vlo-web-app/src
Files:
2 deleted
9 edited

Legend:

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

    r4511 r4519  
    1818
    1919import java.io.Serializable;
    20 import java.util.List;
     20import java.util.Collection;
     21import java.util.Collections;
     22import java.util.Map;
    2123
    2224/**
     
    2729
    2830    private final String queryString;
    29     private final List<FacetSelection> selection;
     31    private final Map<String, Collection<String>> selection;
    3032
    31     public QueryFacetsSelection(List<FacetSelection> selection) {
     33    /**
     34     * creates an empty selection (no string, no facet values)
     35     */
     36    public QueryFacetsSelection() {
     37        this(null, Collections.<String, Collection<String>>emptyMap());
     38    }
     39
     40    /**
     41     * creates a selection without a query
     42     *
     43     * @param selection facet values selection map
     44     */
     45    public QueryFacetsSelection(Map<String, Collection<String>> selection) {
    3246        this(null, selection);
    3347    }
    34    
    35     public QueryFacetsSelection(String query, List<FacetSelection> selection) {
     48
     49    /**
     50     * creates a selection with a textual query and facet value selection
     51     *
     52     * @param query textual query
     53     * @param selection facet values selection map
     54     */
     55    public QueryFacetsSelection(String query, Map<String, Collection<String>> selection) {
    3656        this.queryString = query;
    3757        this.selection = selection;
    3858    }
    3959
    40     public List<FacetSelection> getSelection() {
     60    /**
     61     *
     62     * @return a facet -> values map representing the current selection
     63     */
     64    public Map<String, Collection<String>> getSelection() {
    4165        return selection;
    4266    }
    4367
     68    /**
     69     *
     70     * @return the facets present in the current selection
     71     */
     72    public Collection<String> getFacets() {
     73        return selection.keySet();
     74    }
     75
     76    /**
     77     *
     78     * @param facet facet to get values for
     79     * @return the selected values for the specified facet
     80     */
     81    public Collection<String> getSelectionValues(String facet) {
     82        return selection.get(facet);
     83    }
     84
     85    /**
     86     *
     87     * @return the current textual query, may be null in case of no query
     88     */
    4489    public String getQuery() {
    4590        return queryString;
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/FacetFieldsService.java

    r4511 r4519  
    1818package eu.clarin.cmdi.vlo.service;
    1919
    20 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     20import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2121import java.util.List;
    2222import org.apache.solr.client.solrj.response.FacetField;
     
    2828public interface FacetFieldsService {
    2929   
    30     List<FacetField> getFacetFields(List<FacetSelection> selection, String query);
     30    List<FacetField> getFacetFields(QueryFacetsSelection selection);
    3131   
    3232    long getFacetFieldCount();
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/SolrQueryFactory.java

    r4513 r4519  
    1717package eu.clarin.cmdi.vlo.service;
    1818
    19 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    20 import java.util.List;
     19import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2120import org.apache.solr.client.solrj.SolrQuery;
    2221
     
    2726public interface SolrQueryFactory {
    2827
    29     SolrQuery createFacetQuery(List<FacetSelection> selection, String query);
     28    SolrQuery createFacetQuery(QueryFacetsSelection selection);
    3029   
    3130    SolrQuery createCountFacetsQuery();
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/FacetFieldsDataProvider.java

    r4512 r4519  
    1717package eu.clarin.cmdi.vlo.service.impl;
    1818
    19 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2019import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2120import eu.clarin.cmdi.vlo.service.FacetFieldsService;
     
    2625import org.apache.wicket.model.IModel;
    2726import org.apache.wicket.model.Model;
    28 import org.apache.wicket.model.PropertyModel;
    2927
    3028/**
     
    3533
    3634    private final FacetFieldsService facetFieldService;
    37     private final IModel<List<FacetSelection>> selectionModel;
    38     private final IModel<String> searchQuery;
     35    private final IModel<QueryFacetsSelection> selectionModel;
    3936
    40     public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<QueryFacetsSelection> model) {
    41         this(facetFieldService,
    42                 new PropertyModel<List<FacetSelection>>(model, "selection"),
    43                 new PropertyModel<String>(model, "query"));
    44     }
    45 
    46     public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<List<FacetSelection>> selectionModel, IModel<String> searchQuery) {
     37    public FacetFieldsDataProvider(FacetFieldsService facetFieldService, IModel<QueryFacetsSelection> selectionModel) {
    4738        this.facetFieldService = facetFieldService;
    4839        this.selectionModel = selectionModel;
    49         this.searchQuery = searchQuery;
    5040    }
    5141
    5242    @Override
    5343    public Iterator<? extends FacetField> iterator(long first, long count) {
    54         List<FacetField> facets = facetFieldService.getFacetFields(selectionModel.getObject(), searchQuery.getObject());
     44        List<FacetField> facets = facetFieldService.getFacetFields(selectionModel.getObject());
    5545        return facets.listIterator((int) first);
    5646    }
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrFacetFieldsService.java

    r4513 r4519  
    1717package eu.clarin.cmdi.vlo.service.impl;
    1818
    19 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     19import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2020import eu.clarin.cmdi.vlo.service.FacetFieldsService;
    2121import eu.clarin.cmdi.vlo.service.SearchResultsDao;
     
    3939
    4040    @Override
    41     public List<FacetField> getFacetFields(List<FacetSelection> selection, String query) {
    42         return searchResultsDao.getFacets(queryFatory.createFacetQuery(selection, query));
     41    public List<FacetField> getFacetFields(QueryFacetsSelection selection) {
     42        return searchResultsDao.getFacets(queryFatory.createFacetQuery(selection));
    4343    }
    4444
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImpl.java

    r4518 r4519  
    2020import eu.clarin.cmdi.vlo.config.VloConfig;
    2121import eu.clarin.cmdi.vlo.service.SolrQueryFactory;
    22 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     22import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2323import java.util.ArrayList;
    2424import java.util.Collection;
    2525import java.util.List;
     26import java.util.Map;
    2627import org.apache.solr.client.solrj.SolrQuery;
    2728import org.apache.solr.client.solrj.util.ClientUtils;
     
    4647
    4748    @Override
    48     public SolrQuery createFacetQuery(List<FacetSelection> selections, String queryString) {
    49         SolrQuery query = getDefaultFacetQuery();
     49    public SolrQuery createFacetQuery(QueryFacetsSelection queryFacetsSelections) {
     50        final SolrQuery query = getDefaultFacetQuery();
     51        final String queryString = queryFacetsSelections.getQuery();
    5052
    5153        if (queryString == null) {
     
    5557        }
    5658
    57         if (selections != null) {
    58             final List<String> encodedQueries = new ArrayList(selections.size());
    59             for (FacetSelection selection : selections) {
    60                 final String facetName = selection.getFacetName();
    61                 final Collection<String> values = selection.getValue();
    62                 if (values != null) {
    63                     for (String value : values) {
    64                         encodedQueries.add(String.format("%s:%s", facetName, ClientUtils.escapeQueryChars(value)));
    65                     }
     59        Map<String, Collection<String>> selections = queryFacetsSelections.getSelection();
     60
     61        final List<String> encodedQueries = new ArrayList(selections.size()); // assuming every facet has one selection, most common scenario
     62        for (Map.Entry<String, Collection<String>> selection : selections.entrySet()) {
     63            final String facetName = selection.getKey();
     64            final Collection<String> values = selection.getValue();
     65            if (values != null) {
     66                for (String value : values) {
     67                    encodedQueries.add(String.format("%s:%s", facetName, ClientUtils.escapeQueryChars(value)));
    6668                }
    6769            }
    68             query.setFilterQueries(encodedQueries.toArray(new String[encodedQueries.size()]));
    6970        }
     71        query.setFilterQueries(encodedQueries.toArray(new String[encodedQueries.size()]));
    7072        return query;
    7173    }
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java

    r4518 r4519  
    22
    33import eu.clarin.cmdi.vlo.wicket.components.FacetsPanel;
    4 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    54import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    6 import java.util.Arrays;
     5import java.util.Collection;
    76import java.util.Collections;
    87import org.apache.wicket.request.mapper.parameter.PageParameters;
     
    1716        super(parameters);
    1817
    19         final FacetSelection languageSelection = new FacetSelection("language", Collections.singleton("Dutch"));
    20 
    21         final QueryFacetsSelection selection = new QueryFacetsSelection(Arrays.asList(languageSelection));
     18        final QueryFacetsSelection selection = new QueryFacetsSelection(
     19                Collections.<String, Collection<String>>singletonMap("language", Collections.singleton("Dutch")));
    2220
    2321        add(new FacetsPanel("facets", new Model<QueryFacetsSelection>(selection)));
  • vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/SolrQueryFactoryImplTest.java

    r4518 r4519  
    1818
    1919import eu.clarin.cmdi.vlo.config.VloConfig;
    20 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     20import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2121import java.util.Arrays;
     22import java.util.Collection;
    2223import java.util.Collections;
     24import java.util.HashMap;
    2325import java.util.List;
     26import java.util.Map;
    2427import org.apache.solr.client.solrj.SolrQuery;
    2528import org.hamcrest.Matchers;
     
    5861    @Test
    5962    public void testCreateFacetQueryNoFacets() {
    60         List<FacetSelection> selection = Collections.emptyList();
    61         SolrQuery query = instance.createFacetQuery(selection, null);
     63        // default constructor -> empty
     64        QueryFacetsSelection selection = new QueryFacetsSelection();
     65        SolrQuery query = instance.createFacetQuery(selection);
    6266
    6367        // default: query selects all values
     
    7478    public void testCreateFacetQueryNoSelection() {
    7579        // Facets are present but no values are selected
    76         List<FacetSelection> selection = Arrays.asList(
    77                 new FacetSelection(
    78                         "facet1",
    79                         Collections.<String>emptyList()),
    80                 new FacetSelection(
    81                         "facet2",
    82                         Collections.<String>emptyList()));
    83         SolrQuery query = instance.createFacetQuery(selection, null);
     80        Map<String, Collection<String>> selection = new HashMap<String, Collection<String>>() {
     81            {
     82                put("facet1", Collections.<String>emptySet());
     83                put("facet2", Collections.<String>emptyList());
     84            }
     85        };
     86
     87        SolrQuery query = instance.createFacetQuery(new QueryFacetsSelection(selection));
    8488
    8589        // default: query selects all values
     
    96100    public void testCreateFacetQuerySelection() {
    97101        // Some facets have one or more values selected
    98         List<FacetSelection> selection = Arrays.asList(
    99                 new FacetSelection(
    100                         "facet1",
    101                         Arrays.asList("valueA")),
    102                 new FacetSelection(
    103                         "facet2",
    104                         Arrays.asList("valueB", "valueC")),
    105                 new FacetSelection(
    106                         "facet3",
    107                         Collections.<String>emptyList()));
    108         SolrQuery query = instance.createFacetQuery(selection, null);
     102        Map<String, Collection<String>> selection = new HashMap<String, Collection<String>>() {
     103            {
     104                put("facet1", Arrays.asList("valueA"));
     105                put("facet2", Arrays.asList("valueB", "valueC"));
     106                put("facet3", Collections.<String>emptyList());
     107            }
     108        };
     109        SolrQuery query = instance.createFacetQuery(new QueryFacetsSelection(selection));
    109110
    110111        // default: query selects all values
     
    124125    @Test
    125126    public void testCreateFacetQuerySelectionAndQuery() {
    126         List<FacetSelection> selection = Arrays.asList(
    127                 new FacetSelection(
    128                         "facet1",
    129                         Arrays.asList("valueA")));
    130         SolrQuery query = instance.createFacetQuery(selection, "query string");
     127        Map<String, Collection<String>> selection = new HashMap<String, Collection<String>>() {
     128            {
     129                put("facet1", Arrays.asList("valueA"));
     130            }
     131        };
     132        SolrQuery query = instance.createFacetQuery(new QueryFacetsSelection("query string", selection));
    131133
    132134        assertEquals(1, query.getFilterQueries().length);
  • vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestFacetedSearchPage.java

    r4515 r4519  
    44import eu.clarin.cmdi.vlo.VloWicketApplication;
    55import eu.clarin.cmdi.vlo.config.VloSpringConfig;
     6import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    67import eu.clarin.cmdi.vlo.service.FacetFieldsService;
    78import java.util.Arrays;
     
    7172                atLeast(1).of(facetFieldsService).getFacetFieldCount();
    7273                will(returnValue(2L));
    73                 oneOf(facetFieldsService).getFacetFields(with(any(List.class)), with(anyOf(aNull(String.class), any(String.class))));
     74                oneOf(facetFieldsService).getFacetFields(with(any(QueryFacetsSelection.class)));
    7475                will(returnValue(Arrays.asList(new FacetField("language"), new FacetField("resource class"))));
    7576            }
Note: See TracChangeset for help on using the changeset viewer.