Ignore:
Timestamp:
11/17/15 11:55:14 (9 years ago)
Author:
davor.ostojic@oeaw.ac.at
Message:

#795 VLO web-app generates unnecessary requests. The idea behind is to fire SOLR query only when selection is changed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetPanel.java

    r6248 r6813  
    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);
    47 
    48     private final IModel<ExpansionState> expansionStateModel;
    4946
    5047    private final SelectedFacetPanel selectedFacetPanel;
    5148    private final FacetValuesPanel facetValuesPanel;
    5249
    53     public FacetPanel(String id, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState) {
    54         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);
    5552    }
    5653
    57     public FacetPanel(String id, IModel<FacetFieldSelection> selectionModel, IModel<ExpansionState> expansionState, int subListSize) {
    58         super(id, selectionModel, expansionState);
    59         this.expansionStateModel = 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);
    6056
    6157        // panel showing values for selection
    62         facetValuesPanel = createFacetValuesPanel("facetValues", subListSize);
     58        facetValuesPanel = createFacetValuesPanel("facetValues", facetNameModel.getObject(), facetFieldModel, selectionModel, subListSize);
    6359        add(facetValuesPanel);
    6460
    6561        // panel showing current selection, allowing for deselection
    66         selectedFacetPanel = createSelectedFacetPanel("facetSelection");
     62        selectedFacetPanel = createSelectedFacetPanel("facetSelection", facetNameModel.getObject(), selectionModel);
    6763        add(selectedFacetPanel);
    6864    }
     
    7066    @Override
    7167    protected Label createTitleLabel(String id) {
    72         final IModel<String> facetNameModel = new PropertyModel<>(getModel(), "facetField.name");
    73         final Label label = new Label(id, new SolrFieldNameModel(facetNameModel));
    74         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())));
    7570        return label;
    7671    }
     
    7974    protected void onConfigure() {
    8075        super.onConfigure();
    81 
    82         final boolean valuesSelected = !getModelObject().getFacetValues().isEmpty();
     76       
     77        final boolean valuesSelected = !selectedFacetPanel.getModelObject().isEmpty();
    8378        facetValuesPanel.setVisible(!valuesSelected);
    8479        selectedFacetPanel.setVisible(valuesSelected);
    85 
    86         // hide this entire panel is no values are selectable
    87         setVisible(!isHideIfNoValues() || valuesSelected || getModelObject().getFacetField().getValueCount() > 0);
     80       
     81       
     82        // hide this entire panel if nothing is selected or there is nothing to be selected
     83        setVisible(!isHideIfNoValues() || valuesSelected || facetValuesPanel.getModelObject().getValueCount() > 0);
    8884    }
     85   
    8986
    9087    /**
     
    9794    }
    9895
    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) {
     96    private FacetValuesPanel createFacetValuesPanel(String id, final String facetName, IModel<FacetField> facetFieldModel, final IModel<QueryFacetsSelection> selectionModel, int subListSize) {
     97        return new FacetValuesPanel(id, facetFieldModel, selectionModel, subListSize) {
    10398                    @Override
    104                     public void onValuesSelected(String facet, FacetSelection value, AjaxRequestTarget target) {
     99                    public void onValuesSelected(Collection<String> values, AjaxRequestTarget target) {
    105100                        // A value has been selected on this facet's panel, update the model!
    106                         FacetPanel.this.getModelObject().getSelection().selectValues(facet, value);
    107                         if (target != null) {
     101                        selectionModel.getObject().addNewFacetValue(facetName, values);
     102                       
     103                        if (target != null) {
    108104                            // reload entire page for now
    109105                            selectionChanged(target);
     
    113109    }
    114110
    115     private SelectedFacetPanel createSelectedFacetPanel(String id) {
    116         return new SelectedFacetPanel(id, getModel()) {
     111    private SelectedFacetPanel createSelectedFacetPanel(String id, final String facetName, final IModel<QueryFacetsSelection> selectionModel) {
     112        return new SelectedFacetPanel(id, facetName, new SelectionModel(facetName, selectionModel)) {
    117113            @Override
    118             public void onValuesUnselected(String facet, Collection<String> valuesRemoved, AjaxRequestTarget target) {
    119                 final QueryFacetsSelection selection = getModelObject().getSelection();
     114            public void onValuesUnselected(Collection<String> valuesRemoved, AjaxRequestTarget target) {
     115                // Values have been removed, calculate remainder
     116                selectionModel.getObject().removeFacetValue(facetName, valuesRemoved);
    120117
    121                 // Values have been removed, calculate remainder
    122                 final FacetSelection facetSelection = selection.getSelectionValues(facet);
    123                 final Collection<String> currentSelection = facetSelection.getValues();
    124                 final Collection<String> newSelection = new HashSet<String>(currentSelection);
    125                 newSelection.removeAll(valuesRemoved);
    126 
    127                 // Update model (keep selection type)
    128                 selection.selectValues(facet, new FacetSelection(facetSelection.getSelectionType(), newSelection));
    129 
    130                 // collapse after removal
    131                 // TODO: should be removed, but then list of values
    132                 // does not seem to update correctly
    133                 expansionStateModel.setObject(ExpansionState.COLLAPSED);
    134 
     118             // collapse after removal
     119             // TODO: should be removed, but then list of values
     120             // does not seem to update correctly
     121             expansionModel.setObject(ExpansionState.COLLAPSED);
     122               
    135123                if (target != null) {
    136124                    // reload entire page for now
Note: See TracChangeset for help on using the changeset viewer.