Changeset 4582


Ignore:
Timestamp:
02/27/14 15:14:16 (10 years ago)
Author:
twagoo
Message:

refactored construction of facet panels, both in facets panel and single collections facet panel

Location:
vlo/branches/vlo-3.0/vlo-web-app
Files:
3 added
3 deleted
9 edited
1 moved

Legend:

Unmodified
Added
Removed
  • vlo/branches/vlo-3.0/vlo-web-app/pom.xml

    r4536 r4582  
    132132                </exclusion>
    133133            </exclusions>
     134        </dependency>
     135        <dependency>
     136            <groupId>com.google.guava</groupId>
     137            <artifactId>guava</artifactId>
     138            <version>16.0.1</version>
    134139        </dependency>
    135140    </dependencies>
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSpringConfig.java

    r4579 r4582  
    1717package eu.clarin.cmdi.vlo.config;
    1818
     19import com.google.common.collect.Lists;
    1920import eu.clarin.cmdi.vlo.VloWicketApplication;
    2021import eu.clarin.cmdi.vlo.service.FacetFieldsService;
     
    2829import eu.clarin.cmdi.vlo.service.impl.SolrFacetQueryFactoryImpl;
    2930import java.io.IOException;
    30 import java.util.Collections;
     31import java.util.ArrayList;
    3132import org.apache.solr.client.solrj.SolrServer;
    3233import org.apache.solr.client.solrj.impl.HttpSolrServer;
     
    4748public class VloSpringConfig {
    4849
    49     public final static String FACETS_PANEL_SERVICE = "factsPanelService";
    50     public final static String COLLECTION_FACET_SERVICE = "factsPanelService";
    51    
    5250    /**
    5351     *
     
    7371    }
    7472
    75     @Bean(name = FACETS_PANEL_SERVICE)
     73    @Bean
    7674    public FacetFieldsService facetFieldsService() {
    7775        return new SolrFacetFieldsService(searchResultsDao(), facetQueryFactory());
     
    8078    @Bean
    8179    public SolrFacetQueryFactory facetQueryFactory() {
    82         return new SolrFacetQueryFactoryImpl(vloConfig().getFacetFields());
     80        final ArrayList<String> facets = Lists.newArrayList(vloConfig().getFacetFields());
     81        //TODO: get collections facet from config
     82        facets.add("collection");
     83
     84        return new SolrFacetQueryFactoryImpl(facets);
    8385    }
    8486
    85     @Bean(name = COLLECTION_FACET_SERVICE)
    86     public FacetFieldsService collectionFacetFieldsService() {
    87         return new SolrFacetFieldsService(searchResultsDao(), collectionFacetQueryFactory());
    88     }
    89    
    90     @Bean
    91     public SolrFacetQueryFactory collectionFacetQueryFactory() {
    92         return new SolrFacetQueryFactoryImpl(Collections.singletonList("collection"));
    93     }
    94    
    9587    @Bean
    9688    public SolrDocumentService documentService() {
     
    10294        return new SearchResultsDaoImpl(solrServer(), vloConfig());
    10395    }
    104    
     96
    10597    @Bean
    10698    public SolrDocumentQueryFactoryImpl documentQueryFactory() {
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/FacetSelection.java

    r4542 r4582  
    1919
    2020import java.util.List;
     21import org.apache.solr.client.solrj.response.FacetField;
    2122
    2223/**
     
    2627public interface FacetSelection {
    2728
    28     String getFacet();
     29    FacetField getFacetField();
    2930
    3031    List<String> getFacetValues();
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/QueryFacetsSelection.java

    r4543 r4582  
    8383     *
    8484     * @param facet facet to get values for
    85      * @return the selected values for the specified facet
     85     * @return the selected values for the specified facet. Can be null.
    8686     */
    8787    public Collection<String> getSelectionValues(String facet) {
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/components/FacetsPanel.java

    r4579 r4582  
    1717package eu.clarin.cmdi.vlo.wicket.components;
    1818
    19 import eu.clarin.cmdi.vlo.config.VloSpringConfig;
    2019import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2120import eu.clarin.cmdi.vlo.service.FacetFieldsService;
    22 import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldsDataProvider;
    23 import java.util.Collection;
     21import eu.clarin.cmdi.vlo.wicket.model.FacetSelectionModel;
     22import java.util.List;
    2423import org.apache.solr.client.solrj.response.FacetField;
     24import org.apache.wicket.markup.html.list.ListItem;
     25import org.apache.wicket.markup.html.list.ListView;
    2526import org.apache.wicket.markup.html.panel.Panel;
    26 import org.apache.wicket.markup.repeater.Item;
    27 import org.apache.wicket.markup.repeater.data.DataView;
    2827import org.apache.wicket.model.IModel;
    29 import org.apache.wicket.spring.injection.annot.SpringBean;
    3028
    3129/**
     
    4038 * @author twagoo
    4139 */
    42 public class FacetsPanel extends AbstractFacetsPanel {
     40public class FacetsPanel extends Panel {
    4341
    44     @SpringBean(name = VloSpringConfig.FACETS_PANEL_SERVICE)
    45     private FacetFieldsService facetFieldsService;
     42    public FacetsPanel(final String id, final IModel<List<FacetField>> facetsModel, final IModel<QueryFacetsSelection> selectionModel) {
     43        super(id, selectionModel);
    4644
    47     public FacetsPanel(final String id, IModel<QueryFacetsSelection> model) {
    48         super(id, model);
    49 
    50         add(new DataView<FacetField>("facets", new FacetFieldsDataProvider(facetFieldsService, model)) {
     45        add(new ListView<FacetField>("facets", facetsModel) {
    5146
    5247            @Override
    53             protected void populateItem(Item<FacetField> item) {
    54                 item.add(createFacetPanel("facet", item.getModel()));
     48            protected void populateItem(ListItem<FacetField> item) {
     49                item.add(
     50                        new FacetPanel("facet", new FacetSelectionModel(item.getModel(), selectionModel))
     51                );
    5552            }
    5653        });
    5754    }
    58 
    59     private Panel createFacetPanel(String id, IModel<FacetField> facetFieldModel) {
    60         // Is there a selection for this facet?
    61         final String facetName = facetFieldModel.getObject().getName();
    62         final Collection<String> selectionValues = model.getObject().getSelectionValues(facetName);
    63         // Show different panel, depending on selected values
    64         if (selectionValues == null || selectionValues.isEmpty()) {
    65             // No values selected, show value selection panel
    66             return createFacetValuesPanel(id, facetFieldModel);
    67         } else {
    68             // Values selected, show selected values panel (with option to remove)
    69             return createSelectedFacetPanel(id, facetName);
    70         }
    71     }
    7255}
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/components/SelectedFacetPanel.java

    r4540 r4582  
    4444        super(id, model);
    4545        this.model = model;
    46         setDefaultModel(new CompoundPropertyModel<FacetSelection>(model));
    4746
    4847        // Facet name becomes title
    49         add(new Label("facet"));
     48        add(new Label("facet", new PropertyModel(model, "facetField.name")));
    5049        // Add removers for all selected values
    5150        add(createSelectionRemovers("facetValueRemover"));
     
    7978                        // Call callback
    8079                        onValuesUnselected(
    81                                 model.getObject().getFacet(),
     80                                model.getObject().getFacetField().getName(),
    8281                                // Remove a single value
    8382                                Collections.singleton(item.getModel().getObject()), target);
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetSelectionModel.java

    r4542 r4582  
    1919import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2020import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     21import java.util.Collection;
     22import java.util.Collections;
    2123import java.util.List;
    2224import java.util.concurrent.CopyOnWriteArrayList;
     25import org.apache.solr.client.solrj.response.FacetField;
    2326import org.apache.wicket.model.AbstractReadOnlyModel;
    2427import org.apache.wicket.model.IModel;
     
    3235public class FacetSelectionModel extends AbstractReadOnlyModel<FacetSelection> implements FacetSelection {
    3336
    34     private final String facet;
    3537    private final IModel<QueryFacetsSelection> selectionModel;
     38    private final IModel<FacetField> facetFieldModel;
    3639
    3740    /**
    38      * 
    39      * @param facet facet to represent selection for
     41     *
     42     * @param facetFieldModel
    4043     * @param selectionModel broad (multi-facet) selection model
    4144     */
    42     public FacetSelectionModel(String facet, IModel<QueryFacetsSelection> selectionModel) {
    43         this.facet = facet;
     45    public FacetSelectionModel(IModel<FacetField> facetFieldModel, IModel<QueryFacetsSelection> selectionModel) {
     46        this.facetFieldModel = facetFieldModel;
    4447        this.selectionModel = selectionModel;
    4548    }
    4649
    4750    @Override
    48     public String getFacet() {
    49         return facet;
     51    public FacetField getFacetField() {
     52        return facetFieldModel.getObject();
    5053    }
    5154
    5255    @Override
    5356    public List<String> getFacetValues() {
    54         return new CopyOnWriteArrayList<String>(getSelection().getSelectionValues(facet));
     57        final String facetName = getFacetField().getName();
     58        final Collection<String> selectionValues = getSelection().getSelectionValues(facetName);
     59        if (selectionValues == null) {
     60            return Collections.emptyList();
     61        } else {
     62            return new CopyOnWriteArrayList<String>(selectionValues);
     63        }
    5564    }
    5665
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java

    r4579 r4582  
    11package eu.clarin.cmdi.vlo.wicket.pages;
    22
     3import eu.clarin.cmdi.vlo.config.VloConfig;
    34import eu.clarin.cmdi.vlo.wicket.components.FacetsPanel;
    45import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    5 import eu.clarin.cmdi.vlo.wicket.components.SingleFacetPanel;
     6import eu.clarin.cmdi.vlo.service.FacetFieldsService;
     7import eu.clarin.cmdi.vlo.wicket.components.FacetPanel;
    68import eu.clarin.cmdi.vlo.wicket.components.SearchForm;
    79import eu.clarin.cmdi.vlo.wicket.components.SearchResultsPanel;
     10import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
     11import eu.clarin.cmdi.vlo.wicket.model.FacetFieldsModel;
     12import eu.clarin.cmdi.vlo.wicket.model.FacetSelectionModel;
    813import java.util.Collection;
     14import java.util.List;
    915import java.util.Map;
     16import org.apache.solr.client.solrj.response.FacetField;
    1017import org.apache.wicket.request.mapper.parameter.PageParameters;
    1118import org.apache.wicket.markup.html.WebPage;
     19import org.apache.wicket.model.IModel;
    1220import org.apache.wicket.model.Model;
     21import org.apache.wicket.spring.injection.annot.SpringBean;
    1322
    1423/**
     
    2130    private static final long serialVersionUID = 1L;
    2231
     32    @SpringBean
     33    private FacetFieldsService facetFieldsService;
     34    @SpringBean
     35    private VloConfig vloConfig;
     36
    2337    public FacetedSearchPage(final PageParameters parameters) {
    2438        super(parameters);
     
    2741        final Model<QueryFacetsSelection> queryModel = new Model<QueryFacetsSelection>(selection);
    2842
    29         add(new SingleFacetPanel("collectionsFacet", queryModel));
    30        
    31         add(new FacetsPanel("facets", queryModel));
     43        final FacetFieldModel collectionFacetFieldModel = new FacetFieldModel(facetFieldsService, "collection", queryModel);
     44        final FacetSelectionModel collectionSelectionModel = new FacetSelectionModel(collectionFacetFieldModel, queryModel);
     45        add(new FacetPanel("collectionsFacet", collectionSelectionModel));
     46
     47        final IModel<List<FacetField>> facetFieldsModel = new FacetFieldsModel(facetFieldsService, vloConfig.getFacetFields(), queryModel);
     48        add(new FacetsPanel("facets", facetFieldsModel, queryModel));
    3249
    3350        add(new SearchForm("search", queryModel));
     
    3855    private QueryFacetsSelection paramsToQueryFacetSelection(final PageParameters parameters) {
    3956        final String query = parameters.get("q").toOptionalString();
    40        
     57
    4158        //TODO: Map parameters to facet selection
    4259        final Map<String, Collection<String>> selection = null;
    43        
     60
    4461        return new QueryFacetsSelection(query, selection);
    4562    }
  • vlo/branches/vlo-3.0/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/pages/TestFacetedSearchPage.java

    r4579 r4582  
    11package eu.clarin.cmdi.vlo.wicket.pages;
    22
    3 import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage;
    43import eu.clarin.cmdi.vlo.VloWicketApplication;
    5 import eu.clarin.cmdi.vlo.config.VloConfig;
    64import eu.clarin.cmdi.vlo.config.VloSpringConfig;
    75import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     
    97import eu.clarin.cmdi.vlo.service.SolrDocumentService;
    108import java.util.Arrays;
    11 import java.util.List;
    129import org.apache.solr.client.solrj.response.FacetField;
    1310import org.apache.solr.common.SolrDocument;
     
    2724import org.springframework.test.context.support.AnnotationConfigContextLoader;
    2825
    29 import static org.hamcrest.core.AnyOf.*;
    30 import org.springframework.beans.factory.annotation.Qualifier;
    3126
    3227/**
     
    5045
    5146        @Override
    52         @Bean(name = VloSpringConfig.FACETS_PANEL_SERVICE)
    5347        public FacetFieldsService facetFieldsService() {
    5448            return mockery().mock(FacetFieldsService.class, "facetFieldsService");
    55         }
    56 
    57         @Override
    58         @Bean(name = COLLECTION_FACET_SERVICE)
    59         public FacetFieldsService collectionFacetFieldsService() {
    60             return mockery().mock(FacetFieldsService.class, "collectionFacetFieldsService");
    6149        }
    6250
     
    7462
    7563    @Autowired(required = true)
    76     @Qualifier(VloSpringConfig.FACETS_PANEL_SERVICE)
    7764    private FacetFieldsService facetFieldsService;
    78 
    79     @Autowired(required = true)
    80     @Qualifier(VloSpringConfig.COLLECTION_FACET_SERVICE)
    81     private FacetFieldsService collectionsFacetFieldsService; //TODO: Make sure this gets injected separately (like qualifier should ensure)
    8265
    8366    @Autowired(required = true)
     
    9881                will(returnValue(2L));
    9982                atLeast(1).of(facetFieldsService).getFacetFields(with(any(QueryFacetsSelection.class)));
    100                 will(returnValue(Arrays.asList(new FacetField("language"), new FacetField("resource class"))));
    101 //
    102 //                // mock collection facet
    103 //                atLeast(1).of(collectionsFacetFieldsService).getFacetFieldCount();
    104 //                will(returnValue(1L));
    105 //                oneOf(collectionsFacetFieldsService).getFacetFields(with(any(QueryFacetsSelection.class)));
    106 //                will(returnValue(Arrays.asList(new FacetField("collection"))));
     83                will(returnValue(Arrays.asList(new FacetField("collection"), new FacetField("language"), new FacetField("resource class"))));
    10784
    10885                // mock search results
Note: See TracChangeset for help on using the changeset viewer.