Changeset 6494


Ignore:
Timestamp:
09/10/15 09:03:11 (9 years ago)
Author:
davor.ostojic@oeaw.ac.at
Message:

Performance issues - model is changed in order to decrease number of requests to he SOLR server
multi value search for the single facet

Location:
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src
Files:
1 added
1 deleted
22 edited

Legend:

Unmodified
Added
Removed
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/FacetSelection.java

    r6486 r6494  
    5252
    5353    public FacetSelection(FacetSelectionType selectionType, Collection<String> values) {
    54         this.selectionType = selectionType;
     54        this.selectionType = values.size() > 1? FacetSelectionType.OR : FacetSelectionType.AND;
    5555        // always store as array list, which is modifiable and serialisable
    5656        if (values instanceof ArrayList) {
     
    7878    }
    7979   
    80     public void mergeValues(FacetSelection facetSel){
    81         if(facetSel == null || this.equals(facetSel))
     80    public void mergeValues(Collection<String> values){
     81        if(values == null || values.isEmpty())
    8282                return;
    83         for(String val: facetSel.values){
    84                 this.values.add(val);                           
    85         }
     83        for(String val: values)
     84                if(!this.values.contains(val))
     85                        this.values.add(val);
    8686       
    8787        //change type of selection to OR if more values are selected
     
    9191    }
    9292   
    93     public void removeValues(FacetSelection facetSel){
    94         if(facetSel != null && facetSel.values != null){
    95                 for(String val: facetSel.values){
     93    public void removeValues(Collection<String> valuesToBeRemoved){
     94        if(valuesToBeRemoved != null){
     95                for(String val: valuesToBeRemoved){
    9696                        this.values.remove(val);
    9797                }
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/pojo/QueryFacetsSelection.java

    r6457 r6494  
    1717package eu.clarin.cmdi.vlo.pojo;
    1818
    19 import com.google.common.collect.Maps;
    2019import java.io.Serializable;
     20import java.util.ArrayList;
    2121import java.util.Collection;
    2222import java.util.HashMap;
    2323import java.util.Map;
    2424import java.util.Map.Entry;
     25
     26import com.google.common.collect.Maps;
    2527
    2628/**
     
    115117    }
    116118
     119   
    117120    public void selectValues(String facet, FacetSelection values) {
     121        // allow multi value selection for single facet only if user has selected one value
    118122        if (values == null || values.isEmpty()) {
    119123            selection.remove(facet);
     124           
     125            switch(selection.size()){
     126            case 0:
     127                excludedFacet = null;
     128                break;
     129            case 1:
     130                excludedFacet = selection.keySet().iterator().next(); //set it to the only element
     131                break;
     132            }
    120133        } else {
    121134            if (values instanceof Serializable) {
     
    124137                selection.put (facet, values);
    125138            }
     139           
     140            if(selection.size() == 1)
     141                excludedFacet = facet;
     142            else
     143                excludedFacet = null;
    126144        }
    127145    }
    128146   
    129     public void addNewFacetValue(String facet, FacetSelection values){
     147    public void addNewFacetValue(String facet, Collection<String> values){
    130148        FacetSelection curSel = selection.get(facet);
    131149        if(curSel != null){
    132150                curSel.mergeValues(values);
    133151        }else{
    134                 curSel = values;
    135                 excludedFacet = facet;
     152                curSel = new FacetSelection(values);                   
    136153        }
     154               
    137155        selectValues(facet, curSel);           
    138156    }
    139157   
    140     public void removeFacetValue(String facet, FacetSelection values){
     158    public void removeFacetValue(String facet, Collection<String> valuestoBeRemoved){
    141159        FacetSelection curSel = selection.get(facet);
    142160        if (curSel != null){
    143                 curSel.removeValues(values);
    144                
    145                 //if it was the last one, reset the value
    146                 if(curSel.getValues().isEmpty()){
    147                         excludedFacet = null;
    148                 }
     161                curSel.removeValues(valuestoBeRemoved);                                 
    149162        }
    150163        //to remove facet from map if does not have any value
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/FacetFieldsService.java

    r4932 r6494  
    4545     */
    4646    long getFacetFieldCount(List<String> facets);
     47   
     48   
     49    /**
     50    *
     51    * @param facet
     52    * @return the total number of documents that don't have specified value for this facet
     53    */
     54   
     55        long getNullCount(String facet, QueryFacetsSelection selection);
    4756}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/SolrFacetQueryFactory.java

    r6456 r6494  
    4848    /* query that returns complete list of values for specified facet */
    4949        SolrQuery createExludedFacetQuery(QueryFacetsSelection selection, String facet, int valueLimit);
     50       
     51        /* query that returns number of documents that have unspecified value for given facet */
     52        SolrQuery createNullQuery(String facet, QueryFacetsSelection selection);
    5053
    5154}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrFacetFieldsService.java

    r6465 r6494  
    4747    @Override
    4848    public List<FacetField> getFacetFields(QueryFacetsSelection selection, List<String> facets, int valueLimit) {
    49         //if excluded facet exists and it is equal to selected fire additional query and do it only for single facet queries
    50         return (selection.getExcludedFacet() != null && facets.size() == 1 && selection.getExcludedFacet().equals(facets.get(0)))?
     49        //if excluded facet exists and it is equal to the selected then fire additional query //and do it only for single facet queries
     50        return (selection.getExcludedFacet() != null)? //&& facets.size() == 1
    5151        searchResultsDao.getFacets(queryFatory.createFacetQuery(selection, facets, valueLimit),
    5252                        queryFatory.createExludedFacetQuery(selection, selection.getExcludedFacet(), valueLimit)) :
     
    5858        return (long) searchResultsDao.getFacets(queryFatory.createCountFacetsQuery(facets)).size();
    5959    }
     60   
     61    @Override
     62    public long getNullCount(String facet, QueryFacetsSelection selection) {
     63        return searchResultsDao.getFacets(queryFatory.createNullQuery(facet, selection)).get(0).getValueCount();
     64    }
    6065
    6166}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrFacetQueryFactoryImpl.java

    r6457 r6494  
    7373        return query;
    7474    }
     75   
     76    public SolrQuery createNullQuery(String facet, QueryFacetsSelection selection){     
     77        SolrQuery query = baseQuery.getCopy();
     78        addQueryFacetParameters(query, selection, false);
     79        query.setQuery("-(" + facet + ":*)");
     80        return query;   
     81    }
    7582
    7683}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetExpansionStateModel.java

    r4606 r6494  
    3030public class FacetExpansionStateModel implements IModel<ExpansionState> {
    3131
    32     private final IModel<FacetField> facetModel;
     32    private final IModel<String> facetName;
    3333    private final IModel<Map<String, ExpansionState>> expansionStateMapModel;
    3434
     
    3838     * @param expansionStateMapModel model that holds the map of expansion states
    3939     */
    40     public FacetExpansionStateModel(IModel<FacetField> facetModel, IModel<Map<String, ExpansionState>> expansionStateMapModel) {
    41         this.facetModel = facetModel;
     40    public FacetExpansionStateModel(IModel<String> facetName, IModel<Map<String, ExpansionState>> expansionStateMapModel) {
     41        this.facetName = facetName;
    4242        this.expansionStateMapModel = expansionStateMapModel;
    4343    }
     
    4545    @Override
    4646    public ExpansionState getObject() {
    47         final String facet = facetModel.getObject().getName();
     47        final String facet = facetName.getObject();
    4848        final ExpansionState state = expansionStateMapModel.getObject().get(facet);
    4949        if (state == null) {
     
    5656    @Override
    5757    public void setObject(ExpansionState object) {
    58         final String facet = facetModel.getObject().getName();
     58        final String facet = facetName.getObject();
    5959        expansionStateMapModel.getObject().put(facet, object);
    6060    }
     
    6262    @Override
    6363    public void detach() {
    64         facetModel.detach();
     64        facetName.detach();
    6565        expansionStateMapModel.detach();
    6666    }
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetFieldModel.java

    r4869 r6494  
    2222import java.util.List;
    2323import org.apache.solr.client.solrj.response.FacetField;
     24import org.apache.wicket.model.AbstractReadOnlyModel;
    2425import org.apache.wicket.model.IModel;
    2526import org.apache.wicket.model.LoadableDetachableModel;
     
    3839 * @author twagoo
    3940 */
    40 public class FacetFieldModel extends LoadableDetachableModel<FacetField> {
     41public class FacetFieldModel extends AbstractReadOnlyModel<FacetField> {
    4142
    4243    //todo: can probably be made more efficient/elegant than wrapping fields model
    4344    private final FacetFieldsModel fieldsModel;
     45    private final transient String facetName;
    4446   
    45     /**
    46      *
    47      * @param facetField facet field to provide
    48      * @param selectionModel model that provides current query/selection
    49      */
    50     public FacetFieldModel(FacetFieldsService service, FacetField facetField, IModel<QueryFacetsSelection> selectionModel) {
    51         super(facetField);
    52         fieldsModel = new FacetFieldsModel(service, Collections.singletonList(facetField.getName()), selectionModel, -1);
    53     }
    54 
     47   
    5548    /**
    5649     *
     
    5952     * @param selectionModel model that provides current query/selection
    6053     */
    61     public FacetFieldModel(FacetFieldsService service, String facet, IModel<QueryFacetsSelection> selectionModel, int valueLimit) {
    62         fieldsModel = new FacetFieldsModel(service, Collections.singletonList(facet), selectionModel, valueLimit);
     54    public FacetFieldModel(String facet, FacetFieldsService service, IModel<QueryFacetsSelection> selectionModel) {
     55        this(facet, new FacetFieldsModel(service, Collections.singletonList(facet), selectionModel, -1));
     56    }
     57   
     58    public FacetFieldModel(String facetName, FacetFieldsModel fieldsModel){
     59        this.fieldsModel = fieldsModel;
     60        this.facetName = facetName;
    6361    }
    6462
    6563    @Override
    66     protected FacetField load() {
    67         final List<FacetField> fieldsList = fieldsModel.getObject();
    68         if (fieldsList == null || fieldsList.isEmpty()) {
    69             return null;
    70         } else {
    71             return fieldsList.get(0);
    72         }
     64    public FacetField getObject() {
     65        return fieldsModel.getFacetField(facetName);
    7366    }
    7467
    75     @Override
    76     public void detach() {
    77         super.detach();
    78         fieldsModel.detach();
     68   
     69    public void detachFacetFieldsModel(){
     70        fieldsModel.detach();
    7971    }
     72
     73
    8074}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetFieldSelectionModel.java

    r6246 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.model;
    1818
    19 import eu.clarin.cmdi.vlo.pojo.FacetFieldSelection;
    20 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2219import java.util.Collection;
    2320import java.util.Collections;
    2421import java.util.List;
    2522import java.util.concurrent.CopyOnWriteArrayList;
     23
    2624import org.apache.solr.client.solrj.response.FacetField;
    2725import org.apache.wicket.model.AbstractReadOnlyModel;
    2826import org.apache.wicket.model.IModel;
     27
     28import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     29import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2930
    3031/**
     
    3435 * @author twagoo
    3536 */
    36 public class FacetFieldSelectionModel extends AbstractReadOnlyModel<FacetFieldSelection> implements FacetFieldSelection {
     37public class FacetFieldSelectionModel extends AbstractReadOnlyModel<FacetSelection> {
    3738
    3839    private final IModel<QueryFacetsSelection> selectionModel;
     
    4950    }
    5051
    51     @Override
     52 
     53    //@Override
     54        public IModel<FacetField> getFacetFieldAsModel() {
     55                return facetFieldModel;
     56        }
     57   
     58   
     59    //@Override
    5260    public FacetField getFacetField() {
    5361        return facetFieldModel.getObject();
    5462    }
     63   
    5564
    56     @Override
     65
     66   // @Override
    5767    public List<String> getFacetValues() {
    58         final String facetName = getFacetField().getName();
    59         final FacetSelection selection = getSelection().getSelectionValues(facetName);
     68        final FacetSelection selection = getObject();
    6069        if (selection == null) {
    6170            return Collections.emptyList();
     
    6978        }
    7079    }
     80   
     81   
    7182
    72     @Override
     83        //@Override
     84        public IModel<QueryFacetsSelection> getSelectionAsModel() {
     85                return selectionModel;
     86        }
     87   
     88
     89    //@Override
    7390    public QueryFacetsSelection getSelection() {
    7491        return selectionModel.getObject();
     
    7693
    7794    @Override
    78     public FacetFieldSelection getObject() {
    79         return this;
     95    public FacetSelection getObject() {
     96        final String facetName = getFacetField().getName();
     97        return getSelection().getSelectionValues(facetName);
    8098    }
    8199
     
    90108        return String.format("[Field: %s; Selection: %s]", facetFieldModel.getObject().getName(), selectionModel.getObject().toString());
    91109    }
    92    
     110
     111       
    93112}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/FacetFieldsModel.java

    r4943 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.model;
    1818
    19 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    20 import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    2119import java.util.List;
     20
    2221import org.apache.solr.client.solrj.response.FacetField;
    2322import org.apache.wicket.model.IModel;
    2423import org.apache.wicket.model.LoadableDetachableModel;
     24
     25import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     26import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     27import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    2528
    2629/**
     
    4144    private final IModel<QueryFacetsSelection> selectionModel;
    4245    private final int valueLimit;
     46   
     47   
     48    /**
     49     * now we are returning all facets and model is shared between facetValuesPanel and FacetsPagePanel
     50    *
     51    * @param service service to use for facet field retrieval
     52    * @param facets facets to include
     53    * @param selectionModel model that provides current query/selection
     54    */
     55    public FacetFieldsModel(FacetFieldsService service, List<String> facets, IModel<QueryFacetsSelection> selectionModel) {
     56        this(service, facets, selectionModel, -1);
     57    }
    4358
    4459    /**
     
    5671        this.valueLimit = valueLimit;
    5772    }
     73   
     74   
     75
    5876
    5977    @Override
     
    6785        selectionModel.detach();
    6886    }
     87   
     88    public FacetField getFacetField(String facetName){
     89        List<FacetField> facetList = getObject();
     90        if(facetList != null)
     91                for(FacetField facet: facetList)
     92                        if(facet.getName().equals(facetName))
     93                                return removeSelected(facet, selectionModel.getObject().getSelectionValues(facetName));
     94       
     95        return null;
     96    }
     97   
     98    private FacetField removeSelected(FacetField facetField, FacetSelection selection){
     99        FacetField filtered = new FacetField(facetField.getName());
     100        if(selection != null)
     101                for(FacetField.Count value: facetField.getValues())
     102                        if(selection.getValues().contains(value.getName()))
     103                                continue;
     104                        else
     105                                filtered.add(value.getName(), value.getCount());
     106        else
     107                filtered = facetField;
     108       
     109        return filtered;
     110    }
    69111
    70112}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/AllFacetValuesPage.java

    r6412 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.pages;
    1818
    19 import eu.clarin.cmdi.vlo.config.VloConfig;
    20 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    22 import eu.clarin.cmdi.vlo.service.FacetParameterMapper;
    23 import eu.clarin.cmdi.vlo.service.PageParametersConverter;
    24 import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    25 import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
    26 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    27 import eu.clarin.cmdi.vlo.wicket.panels.search.AllFacetValuesPanel;
    28 import eu.clarin.cmdi.vlo.wicket.panels.BreadCrumbPanel;
     19import java.util.Collection;
     20
    2921import org.apache.solr.client.solrj.response.FacetField;
    3022import org.apache.wicket.RestartResponseException;
     
    3931import org.apache.wicket.spring.injection.annot.SpringBean;
    4032import org.apache.wicket.util.string.StringValue;
     33
     34import eu.clarin.cmdi.vlo.config.VloConfig;
     35import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     36import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     37import eu.clarin.cmdi.vlo.service.FacetParameterMapper;
     38import eu.clarin.cmdi.vlo.service.PageParametersConverter;
     39import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
     40import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
     41import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
     42import eu.clarin.cmdi.vlo.wicket.panels.BreadCrumbPanel;
     43import eu.clarin.cmdi.vlo.wicket.panels.search.AllFacetValuesPanel;
    4144
    4245/**
     
    7376        if (vloConfig.getAllFacetFields().contains(facet)) {
    7477            // create a new model so that all values will be retrieved
    75             setModel(new FacetFieldModel(facetFieldsService, facet, selectionModel, -1)); // gets all facet values
     78               
     79            setModel(new FacetFieldModel(facet, facetFieldsService, selectionModel)); // gets all facet values
    7680        }
    7781        if (getModelObject() == null) {
     
    97101
    98102            @Override
    99             protected void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target) {
     103            protected void onValuesSelected(Collection<String> values, AjaxRequestTarget target) {
    100104                // Create updated selection state
    101105                final QueryFacetsSelection newSelection;
     
    105109                    newSelection = new QueryFacetsSelection();
    106110                }
    107                 newSelection.selectValues(facet, values);
     111                newSelection.selectValues(getModelObject().getName(), new FacetSelection(values));
    108112
    109113                // Redirect to search page with updated model
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/FacetedSearchPage.java

    r6480 r6494  
    5151    private Component navigation;
    5252    private Component searchForm;
     53   
     54   
     55    IModel<List<String>> facetNamesModel;
     56    FacetFieldsModel fieldsModel;
     57   
     58   
    5359
    5460    public FacetedSearchPage(IModel<QueryFacetsSelection> queryModel) {
    5561        super(queryModel);
     62        createModels();
    5663        addComponents();
    5764    }
     
    6370        final IModel<QueryFacetsSelection> queryModel = new Model<QueryFacetsSelection>(selection);
    6471        setModel(queryModel);
     72        createModels();
    6573        addComponents();
     74    }
     75   
     76   
     77    private void createModels(){
     78        facetNamesModel = new FacetNamesModel(vloConfig.getFacetFields());
     79        fieldsModel = new FacetFieldsModel(facetFieldsService, facetNamesModel.getObject(), getModel(), -1);
    6680    }
    6781
     
    142156        enclosure.setOutputMarkupId(true);
    143157        if (vloConfig.getCollectionFacet() != null) {
    144             final FacetPanel panel = new SingleFacetPanel("collectionsFacet", getModel(), vloConfig.getCollectionFacet(), facetFieldsService, 3) {
     158            final FacetPanel panel = new SingleFacetPanel("collectionsFacet", vloConfig.getCollectionFacet(), getModel(), facetFieldsService, 3) {
    145159
    146160                @Override
     
    161175
    162176    private Panel createFacetsPanel(final String id) {
    163         final IModel<QueryFacetsSelection> queryModel = getModel();
    164         final IModel<List<FacetField>> facetFieldsModel = new FacetFieldsModel(facetFieldsService, vloConfig.getFacetFields(), queryModel, FacetValuesPanel.MAX_NUMBER_OF_FACETS_TO_SHOW);
    165         final IModel<List<String>> facetNamesModel = new FacetNamesModel(vloConfig.getFacetFields());
    166         final FacetsPanel panel = new FacetsPanel(id, facetNamesModel, facetFieldsModel, queryModel) {
     177       
     178        //final FacetsPanel panel = new FacetsPanel(id, facetNamesModel, facetFieldsService, getModel(), FacetValuesPanel.MAX_NUMBER_OF_FACETS_TO_SHOW) {
     179        final FacetsPanel panel = new FacetsPanel(id, facetNamesModel, fieldsModel, getModel()) {
    167180
    168181            @Override
     
    176189
    177190    private void updateSelection(AjaxRequestTarget target) {
     191       
     192        //detach facetFieldsModel when selection is changed
     193        fieldsModel.detach();
     194       
    178195        // selection changed, update facets and search results
    179196        if (target != null) { // null if JavaScript disabled
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/SimpleSearchPage.java

    r6350 r6494  
    9393        // collection facet is optional...
    9494        if (vloConfig.getCollectionFacet() != null) {
    95             return new SingleFacetPanel(id, getModel(), vloConfig.getCollectionFacet(), facetFieldsService, 3) {
     95            return new SingleFacetPanel(id, vloConfig.getCollectionFacet(), getModel(), facetFieldsService, 3) {
    9696
    9797                @Override
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/SingleFacetPanel.java

    r5140 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.panels;
    1818
     19import org.apache.wicket.model.IModel;
     20import org.apache.wicket.model.Model;
     21
    1922import eu.clarin.cmdi.vlo.pojo.ExpansionState;
    2023import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2124import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    2225import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
    23 import eu.clarin.cmdi.vlo.wicket.model.FacetFieldSelectionModel;
    2426import eu.clarin.cmdi.vlo.wicket.panels.search.FacetPanel;
    25 import org.apache.wicket.model.IModel;
    26 import org.apache.wicket.model.Model;
    2727
    2828/**
     
    3131 */
    3232public abstract class SingleFacetPanel extends FacetPanel {
     33       
     34        //public FacetPanel(String id, IModel<String> facetName, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState, int subListSize) {
    3335
    34     public SingleFacetPanel(String id, IModel<QueryFacetsSelection> queryModel, String facetName, FacetFieldsService facetFieldsService, int subListSize) {
     36    public SingleFacetPanel(String id, String facetName, IModel<QueryFacetsSelection> queryModel, FacetFieldsService facetFieldsService, int subListSize) {
    3537        //TODO: Limit to number of items shown while keeping 'more' function?
    36         super(id, new FacetFieldSelectionModel(new FacetFieldModel(facetFieldsService, facetName, queryModel, -1), queryModel), Model.of(ExpansionState.COLLAPSED), subListSize);
     38        super(id,
     39                        new Model(facetName),
     40                        new FacetFieldModel(facetName, facetFieldsService, queryModel),
     41                        queryModel,
     42                                Model.of(ExpansionState.COLLAPSED),
     43                                subListSize);
    3744    }
    3845
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AdvancedSearchOptionsPanel.html

    r6486 r6494  
    3434                            <input wicket:id="collection" type="checkbox" id="onlycollections"/>
    3535                            <label for="onlycollections">Only include collection resources</label>
    36                         </li>
    37                         <li>
    38                             <input wicket:id="unspecified_values" type="checkbox" id="only_unspecified_values"/>
    39                             <label for="only_unspecified_values">Show unspecified values for each facet</label>
    40                         </li>
     36                        </li>                       
    4137                    </ul>
    4238                    <input type="submit" value="Apply" class="nonjsfallback" />
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AllFacetValuesPanel.java

    r6005 r6494  
    2828import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider;
    2929import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider;
     30
     31import java.util.Collection;
    3032import java.util.Collections;
    3133import org.apache.solr.client.solrj.response.FacetField;
     
    143145                        // call callback
    144146                        onValuesSelected(
    145                                 item.getModelObject().getFacetField().getName(),
    146147                                // for now only single values can be selected
    147                                 new FacetSelection(Collections.singleton(item.getModelObject().getName())),
     148                                        Collections.singleton(item.getModelObject().getName()),
    148149                                target);
    149150                    }
     
    256257     * Callback triggered when values have been selected on this facet
    257258     *
    258      * @param facet name of the facet this panel represents
    259259     * @param values selected values
    260260     * @param target Ajax target allowing for a partial update. May be null
    261261     * (fallback)!
    262262     */
    263     protected abstract void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target);
     263    protected abstract void onValuesSelected(Collection<String> values, AjaxRequestTarget target);
    264264
    265265}
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetPanel.java

    r6486 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.panels.search;
    1818
    19 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldDescriptionModel;
    20 import eu.clarin.cmdi.vlo.pojo.ExpansionState;
    21 import eu.clarin.cmdi.vlo.pojo.FacetFieldSelection;
    22 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    23 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    24 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    25 import eu.clarin.cmdi.vlo.wicket.panels.ExpandablePanel;
    2619import java.util.Collection;
    27 import java.util.HashSet;
     20
    2821import org.apache.solr.client.solrj.response.FacetField;
    2922import org.apache.wicket.ajax.AjaxRequestTarget;
     
    3124import org.apache.wicket.markup.html.basic.Label;
    3225import org.apache.wicket.model.IModel;
    33 import org.apache.wicket.model.PropertyModel;
    3426import org.slf4j.Logger;
    3527import org.slf4j.LoggerFactory;
     28
     29import eu.clarin.cmdi.vlo.pojo.ExpansionState;
     30import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     31import eu.clarin.cmdi.vlo.wicket.model.SelectionModel;
     32import eu.clarin.cmdi.vlo.wicket.model.SolrFieldDescriptionModel;
     33import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
     34import eu.clarin.cmdi.vlo.wicket.panels.ExpandablePanel;
    3635
    3736/**
     
    4342 * @author twagoo
    4443 */
    45 public abstract class FacetPanel extends ExpandablePanel<FacetFieldSelection> {
     44public abstract class FacetPanel extends ExpandablePanel<String> {
    4645    private final static Logger logger = LoggerFactory.getLogger(FacetPanel.class);
    4746
     
    4948    private final FacetValuesPanel facetValuesPanel;
    5049
    51     public FacetPanel(String id, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState) {
    52         this(id, selectionModel, expansionState, 0);
     50    public FacetPanel(String id, IModel<String> facetNameModel, IModel<FacetField> facetFieldModel, final IModel<QueryFacetsSelection> selectionModel, IModel<ExpansionState> expansionState) {
     51        this(id, facetNameModel, facetFieldModel, selectionModel, expansionState, 0);
    5352    }
    5453
    55     public FacetPanel(String id, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState, int subListSize) {
    56         super(id, selectionModel, expansionState);
     54    public FacetPanel(String id, IModel<String> facetNameModel, IModel<FacetField> facetFieldModel, final IModel<QueryFacetsSelection> selectionModel, IModel<ExpansionState> expansionState, int subListSize) {
     55        super(id, facetNameModel, expansionState);
    5756
    5857        // panel showing values for selection
    59         facetValuesPanel = createFacetValuesPanel("facetValues", subListSize);
     58        facetValuesPanel = createFacetValuesPanel("facetValues", facetNameModel.getObject(), facetFieldModel, selectionModel, subListSize);
    6059        add(facetValuesPanel);
    6160
    6261        // panel showing current selection, allowing for deselection
    63         selectedFacetPanel = createSelectedFacetPanel("facetSelection");
     62        selectedFacetPanel = createSelectedFacetPanel("facetSelection", facetNameModel.getObject(), selectionModel);
    6463        add(selectedFacetPanel);
    6564    }
     
    6766    @Override
    6867    protected Label createTitleLabel(String id) {
    69         final IModel<String> facetNameModel = new PropertyModel<>(getModel(), "facetField.name");
    70         final Label label = new Label(id, new SolrFieldNameModel(facetNameModel));
    71         label.add(new AttributeAppender("title", new SolrFieldDescriptionModel(facetNameModel)));
     68        final Label label = new Label(id, new SolrFieldNameModel(getModel()));
     69        label.add(new AttributeAppender("title", new SolrFieldDescriptionModel(getModel())));
    7270        return label;
    7371    }
     
    7674    protected void onConfigure() {
    7775        super.onConfigure();
     76       
     77        facetValuesPanel.setVisible((expansionModel.getObject() == ExpansionState.COLLAPSED)? false : true);
    7878
    79         final boolean valuesSelected = !getModelObject().getFacetValues().isEmpty();
    80        
    81         selectedFacetPanel.setVisible(valuesSelected);
    82        
    83         facetValuesPanel.setVisible((!valuesSelected && expansionModel.getObject() == ExpansionState.COLLAPSED)? false : true);       
    84 
    85         // hide this entire panel is no values are selectable
    86         setVisible(!isHideIfNoValues() || valuesSelected || getModelObject().getFacetField().getValueCount() > 0);
     79        // hide this entire panel if nothing is selected or there is nothing to be selected
     80        setVisible(!isHideIfNoValues() || !selectedFacetPanel.getModelObject().isEmpty() || facetValuesPanel.getModelObject().getValueCount() > 0);
    8781    }
    8882   
     
    9791    }
    9892
    99     private FacetValuesPanel createFacetValuesPanel(String id, int subListSize) {
    100         return new FacetValuesPanel(id,
    101                 new PropertyModel<FacetField>(getModel(), "facetField"),
    102                 new PropertyModel<QueryFacetsSelection>(getModel(), "selection"), subListSize) {
     93    private FacetValuesPanel createFacetValuesPanel(String id, final String facetName, IModel<FacetField> facetFieldModel, final IModel<QueryFacetsSelection> selectionModel, int subListSize) {
     94        return new FacetValuesPanel(id, facetFieldModel, selectionModel, subListSize) {
    10395                    @Override
    104                     public void onValuesSelected(String facet, FacetSelection value, AjaxRequestTarget target) {
     96                    public void onValuesSelected(Collection<String> values, AjaxRequestTarget target) {
    10597                        // A value has been selected on this facet's panel, update the model!
    106                         FacetPanel.this.getModelObject().getSelection().addNewFacetValue(facet, value);
    107                         //FacetPanel.this.getModelObject().getSelection().selectValues(facet, value);
    108                         if (target != null) {
     98                        selectionModel.getObject().addNewFacetValue(facetName, values);
     99                       
     100                        if (target != null) {
    109101                            // reload entire page for now
    110102                            selectionChanged(target);
     
    114106    }
    115107
    116     private SelectedFacetPanel createSelectedFacetPanel(String id) {
    117         return new SelectedFacetPanel(id, getModel()) {
     108    private SelectedFacetPanel createSelectedFacetPanel(String id, final String facetName, final IModel<QueryFacetsSelection> selectionModel) {
     109        return new SelectedFacetPanel(id, facetName, new SelectionModel(facetName, selectionModel)) {
    118110            @Override
    119             public void onValuesUnselected(String facet, Collection<String> valuesRemoved, AjaxRequestTarget target) {
    120                 final QueryFacetsSelection selection = getModelObject().getSelection();
     111            public void onValuesUnselected(Collection<String> valuesRemoved, AjaxRequestTarget target) {
     112                // Values have been removed, calculate remainder
     113                selectionModel.getObject().removeFacetValue(facetName, valuesRemoved);
    121114
    122                 // Values have been removed, calculate remainder
    123                
    124                 final FacetSelection facetSelection = selection.getSelectionValues(facet);
    125 //                final Collection<String> currentSelection = facetSelection.getValues();
    126 //                final Collection<String> newSelection = new HashSet<String>(currentSelection);
    127 //                newSelection.removeAll(valuesRemoved);
    128 
    129                 // Update model (keep selection type)
    130 //                              selection.selectValues(facet, new FacetSelection(facetSelection.getSelectionType(), newSelection));
    131                
    132                 FacetSelection fSelToRemove = new FacetSelection(facetSelection.getSelectionType(), valuesRemoved);
    133                 selection.removeFacetValue(facet, fSelToRemove);
    134 
    135                 //collapse if tha last value from selection has been removed
    136                 if(selection.getExcludedFacet() == null){
     115                //collapse if the last value from selection has been removed
     116                if(selectionModel.getObject().getExcludedFacet() == null){
    137117                        expansionModel.setObject(ExpansionState.COLLAPSED);
    138118                }
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.java

    r6456 r6494  
    2525import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
    2626import eu.clarin.cmdi.vlo.wicket.provider.PartitionedDataProvider;
     27import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
    2728import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    2829import eu.clarin.cmdi.vlo.wicket.pages.AllFacetValuesPage;
     
    202203                // call callback
    203204                onValuesSelected(
    204                         item.getModelObject().getFacetField().getName(),
    205205                        // for now only single values can be selected
    206                         new FacetSelection(Collections.singleton(item.getModelObject().getName())),
     206                                Collections.singleton(item.getModelObject().getName()),
    207207                        target);
    208208            }
     
    242242                super.onConfigure();
    243243                // only show if there actually are more values!
    244                 setVisible(getModel().getObject().getValueCount() > MAX_NUMBER_OF_FACETS_TO_SHOW);
     244                setVisible(getModelObject().getValueCount() > MAX_NUMBER_OF_FACETS_TO_SHOW);
    245245            }
    246246
     
    270270
    271271            @Override
    272             protected void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target) {
     272            protected void onValuesSelected(Collection<String> values, AjaxRequestTarget target) {
    273273                if (target != null) {
    274274                    // target can be null if selection link was opened in a new tab
    275275                    window.close(target);
    276276                }
    277                 FacetValuesPanel.this.onValuesSelected(facet, values, target);
     277                FacetValuesPanel.this.onValuesSelected(values, target);
    278278            }
    279279        };
     
    288288        filterModel.detach();
    289289    }
     290   
    290291
    291292    /**
     
    297298     * (fallback)!
    298299     */
    299     protected abstract void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target);
     300    protected abstract void onValuesSelected(Collection<String> values, AjaxRequestTarget target);
     301   
     302    @Override
     303    protected void onConfigure() {
     304        // TODO Auto-generated method stub
     305        super.onConfigure();
     306    }
    300307
    301308    @Override
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetsPanel.java

    r6480 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.panels.search;
    1818
    19 import eu.clarin.cmdi.vlo.JavaScriptResources;
    20 import eu.clarin.cmdi.vlo.pojo.ExpansionState;
    21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    22 import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    23 import eu.clarin.cmdi.vlo.wicket.model.FacetExpansionStateModel;
    24 import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
    25 import eu.clarin.cmdi.vlo.wicket.model.FacetFieldSelectionModel;
    2619import java.util.HashMap;
    2720import java.util.List;
    2821import java.util.Map;
    29 import org.apache.solr.client.solrj.response.FacetField;
     22
    3023import org.apache.wicket.Component;
    3124import org.apache.wicket.ajax.AjaxRequestTarget;
     
    4033import org.apache.wicket.model.IModel;
    4134import org.apache.wicket.model.util.MapModel;
    42 import org.apache.wicket.spring.injection.annot.SpringBean;
     35
     36import eu.clarin.cmdi.vlo.JavaScriptResources;
     37import eu.clarin.cmdi.vlo.pojo.ExpansionState;
     38import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     39import eu.clarin.cmdi.vlo.wicket.model.FacetExpansionStateModel;
     40import eu.clarin.cmdi.vlo.wicket.model.FacetFieldModel;
     41import eu.clarin.cmdi.vlo.wicket.model.FacetFieldsModel;
    4342
    4443/**
     
    5251public abstract class FacetsPanel extends GenericPanel<List<String>> {
    5352
    54     @SpringBean
    55     private FacetFieldsService facetFieldsService;
    5653    private MapModel<String, ExpansionState> expansionModel;
    5754
     
    6461     * selection state
    6562     */
    66     public FacetsPanel(final String id, final IModel<List<String>> facetNamesModel, final IModel<List<FacetField>> facetsModel, final IModel<QueryFacetsSelection> selectionModel) {
     63    public FacetsPanel(final String id, final IModel<List<String>> facetNamesModel, final FacetFieldsModel fieldsModel, final IModel<QueryFacetsSelection> selectionModel) {
    6764        super(id, facetNamesModel);
    6865
    6966        final Map<String, ExpansionState> expansionStateMap = new HashMap<String, ExpansionState>();
    7067        expansionModel = new MapModel<String, ExpansionState>(expansionStateMap);
    71 
    72         final ListView<FacetField> facetsView = new ListView<FacetField>("facets", facetsModel) {
     68       
     69        final ListView<String> facetsView = new ListView<String>("facets", facetNamesModel) {
    7370
    7471            @Override
    75             protected void populateItem(ListItem<FacetField> item) {
    76                 // Create a facet field model which does a lookup by name,
     72            protected void populateItem(ListItem<String> item) {
     73                // Create a facet field model which does a lookup by name,
    7774                // making it dynamic in case the selection and therefore
    7875                // set of available values changes
    7976                // TODO: Limit to number of items shown while keeping 'more' function?
    80                 final IModel<FacetField> facetFieldModel = new FacetFieldModel(facetFieldsService, item.getModelObject(), selectionModel);
    8177                item.add(
    82                         new FacetPanel("facet",
    83                                 new FacetFieldSelectionModel(facetFieldModel, selectionModel),
    84                                 new FacetExpansionStateModel(facetFieldModel, expansionModel)) {
     78                        new FacetPanel("facet",
     79                                        item.getModel(),
     80                                        new FacetFieldModel(item.getModelObject(), fieldsModel),
     81                                selectionModel,
     82                                new FacetExpansionStateModel(item.getModel(), expansionModel)) {
    8583
    8684                            @Override
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SelectedFacetPanel.java

    r6002 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.panels.search;
    1818
    19 import eu.clarin.cmdi.vlo.pojo.FacetFieldSelection;
    20 import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
     19import java.util.ArrayList;
    2120import java.util.Collection;
    2221import java.util.Collections;
    2322import java.util.List;
     23import java.util.concurrent.CopyOnWriteArrayList;
     24
    2425import org.apache.wicket.ajax.AjaxRequestTarget;
    2526import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxFallbackLink;
     
    2728import org.apache.wicket.markup.html.list.ListView;
    2829import org.apache.wicket.markup.html.panel.GenericPanel;
     30import org.apache.wicket.model.AbstractReadOnlyModel;
    2931import org.apache.wicket.model.IModel;
    30 import org.apache.wicket.model.PropertyModel;
     32import org.apache.wicket.model.Model;
     33
     34import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     35import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
    3136
    3237/**
     
    3641 * @author twagoo
    3742 */
    38 public abstract class SelectedFacetPanel extends GenericPanel<FacetFieldSelection> {
     43public abstract class SelectedFacetPanel extends GenericPanel<FacetSelection> {
    3944
    40     public SelectedFacetPanel(String id, final IModel<FacetFieldSelection> model) {
     45    public SelectedFacetPanel(String id, String facetName, final IModel<FacetSelection> model) {
    4146        super(id, model);
    4247
    4348        // Add removers for all selected values for collapsed state
    44         add(createSelectionRemovers("facetValueRemover"));
     49        add(createSelectionRemovers("facetValueRemover", facetName));
    4550        // Add selected items to expanded state
    46         add(createSelectionRemovers("selectedItem"));
     51        add(createSelectionRemovers("selectedItem", facetName));
    4752    }
    48 
    49     private ListView<String> createSelectionRemovers(String id) {
     53   
     54    @Override
     55    protected void onConfigure() {
     56        super.onConfigure();
     57        setVisible(!getModelObject().isEmpty());
     58    }
     59   
     60    private ListView<String> createSelectionRemovers(String id, String facetName) {
    5061        // Model of the list of selected values in this facet
    51         final PropertyModel<List<String>> propertyModel = new PropertyModel<List<String>>(getModel(), "facetValues");
    52         final PropertyModel<String> fieldNameModel = new PropertyModel(getModel(), "facetField.name");
     62       
     63        List<String> selectedValues;
     64                if (getModelObject().getValues() != null)
     65                        selectedValues = new CopyOnWriteArrayList<String>(getModelObject().getValues());
     66                else
     67                        selectedValues = Collections.emptyList();
     68               
     69               
     70        final IModel<List<String>> propertyModel = new AbstractReadOnlyModel<List<String>>() {
     71               
     72                        @Override
     73                        public List<String> getObject() {
     74                                return new ArrayList(SelectedFacetPanel.this.getModelObject().getValues());
     75                        }
     76               
     77                };
     78                final IModel<String> fieldNameModel = new Model<String>(facetName);
     79        //final PropertyModel<List<String>> propertyModel= new PropertyModel<List<String>>(getModel(), "facetValues");
     80        //final PropertyModel<String> fieldNameModel = new PropertyModel(getModel(), "facetField.name");
     81       
     82       
    5383        // Repeating container of value + unselection links
    5484        final ListView<String> listView = new ListView<String>(id, propertyModel) {
     
    79109     * (fallback)!
    80110     */
    81     protected abstract void onValuesUnselected(String facet, Collection<String> valuesRemoved, AjaxRequestTarget target);
     111    protected abstract void onValuesUnselected(Collection<String> valuesRemoved, AjaxRequestTarget target);
    82112
    83113    public class RemoveLink extends IndicatingAjaxFallbackLink {
     
    94124            // Remove a single value
    95125            // Call callback
    96             onValuesUnselected(
    97                     SelectedFacetPanel.this.getModelObject().getFacetField().getName(),
    98                     Collections.singleton(valueModel.getObject()), target);
     126            onValuesUnselected(Collections.singleton(valueModel.getObject()), target);
    99127        }
    100128
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SimpleSearchBrowsePanel.java

    r6248 r6494  
    1717package eu.clarin.cmdi.vlo.wicket.panels.search;
    1818
    19 import eu.clarin.cmdi.vlo.config.VloConfig;
    20 import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    22 import eu.clarin.cmdi.vlo.service.PageParametersConverter;
    23 import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
    24 import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService;
    25 import eu.clarin.cmdi.vlo.wicket.model.FacetFieldsModel;
    26 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldDescriptionModel;
    27 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    28 import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage;
    29 import eu.clarin.cmdi.vlo.wicket.pages.SimpleSearchPage;
     19import java.util.Collection;
     20
    3021import org.apache.solr.client.solrj.response.FacetField;
    3122import org.apache.wicket.ajax.AjaxRequestTarget;
     
    4435import org.apache.wicket.model.StringResourceModel;
    4536import org.apache.wicket.spring.injection.annot.SpringBean;
     37
     38import eu.clarin.cmdi.vlo.config.VloConfig;
     39import eu.clarin.cmdi.vlo.pojo.FacetSelection;
     40import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     41import eu.clarin.cmdi.vlo.service.PageParametersConverter;
     42import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService;
     43import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService;
     44import eu.clarin.cmdi.vlo.wicket.model.FacetFieldsModel;
     45import eu.clarin.cmdi.vlo.wicket.model.SolrFieldDescriptionModel;
     46import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
     47import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage;
     48import eu.clarin.cmdi.vlo.wicket.pages.SimpleSearchPage;
    4649
    4750/**
     
    125128
    126129                @Override
    127                 protected void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target) {
     130                protected void onValuesSelected(Collection<String> values, AjaxRequestTarget target) {
    128131                    // value selected, make a new selection (in this panel we do not want to change the existing selection)...
    129132                    final QueryFacetsSelection newSelection = selectionModel.getObject().getCopy();
    130                     newSelection.selectValues(facet, values);
     133                    newSelection.selectValues(getModelObject().getName(), new FacetSelection(values));
    131134                    // ...then submit to search page
    132135                    setResponsePage(FacetedSearchPage.class, paramsConverter.toParameters(newSelection));
  • vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/model/FacetFieldModelTest.java

    r4932 r6494  
    5858    @Test
    5959    public void testGetObject() {
    60         final FacetFieldModel instance = new FacetFieldModel(service, "facet4", selectionModel, 20);
     60        final FacetFieldModel instance = new FacetFieldModel("facet4", new FacetFieldsModel(service, ImmutableList.of("facet4"), selectionModel, 20));
    6161       
    6262        context.checking(new Expectations() {
     
    8383    @Test
    8484    public void testGetObjectNotIncluded() {
    85         final FacetFieldModel instance = new FacetFieldModel(service, "facet4", selectionModel, 20);
     85        final FacetFieldModel instance = new FacetFieldModel("facet4", new FacetFieldsModel(service, ImmutableList.of("facet4"), selectionModel, 20));
    8686
    8787        context.checking(new Expectations() {
Note: See TracChangeset for help on using the changeset viewer.