Changeset 4526


Ignore:
Timestamp:
02/17/14 14:33:27 (10 years ago)
Author:
twagoo
Message:

added callback to facetpanel for value selection

Location:
vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo
Files:
3 edited

Legend:

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

    r4520 r4526  
    9191        return queryString;
    9292    }
     93   
     94    public void selectValues(String facet, Collection<String> values){
     95        selection.put(facet, values);
     96    }
    9397
    9498}
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/components/FacetPanel.java

    r4522 r4526  
    1818
    1919import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider;
     20import java.util.Collection;
     21import java.util.Collections;
    2022import org.apache.solr.client.solrj.response.FacetField;
    2123import org.apache.solr.client.solrj.response.FacetField.Count;
     24import org.apache.wicket.ajax.AjaxRequestTarget;
     25import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
    2226import org.apache.wicket.markup.html.basic.Label;
    2327import org.apache.wicket.markup.html.link.Link;
     
    3337 * @author twagoo
    3438 */
    35 public class FacetPanel extends Panel {
     39public abstract class FacetPanel extends Panel {
    3640
    3741    private final int maxNumberOfFacetsToShow = 10; //TODO: get from config
    38    
     42
    3943    public FacetPanel(String id, IModel<FacetField> model) {
    4044        super(id, model);
     
    4347        // 'name' field from FacetField
    4448        add(new Label("name"));
    45        
     49
    4650        // provider that extracts values and counts from FacetField
    4751        final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(model, maxNumberOfFacetsToShow);
     
    4953
    5054            @Override
    51             protected void populateItem(Item<Count> item) {
     55            protected void populateItem(final Item<Count> item) {
    5256                item.setDefaultModel(new CompoundPropertyModel<Count>(item.getModel()));
    53                 final Link selectLink = new Link("facetSelect") {
    54                    
     57                final Link selectLink = new AjaxFallbackLink("facetSelect") {
     58
    5559                    @Override
    56                     public void onClick() {
    57                         //TODO: select facet
    58                         throw new UnsupportedOperationException("Not supported yet.");
     60                    public void onClick(AjaxRequestTarget target) {
     61                        FacetPanel.this.onValuesSelected(
     62                                item.getModelObject().getFacetField().getName(),
     63                                Collections.singleton(item.getModelObject().getName()),
     64                                target);
    5965                    }
    6066                };
     
    6874    }
    6975
     76    /**
     77     * Callback triggered when values have been selected on this facet
     78     *
     79     * @param facet name of the facet this panel represents
     80     * @param values selected values
     81     * @param target Ajax target allowing for a partial update. May be null
     82     * (fallback)!
     83     */
     84    public abstract void onValuesSelected(String facet, Collection<String> values, AjaxRequestTarget target);
     85
    7086}
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/components/FacetsPanel.java

    r4522 r4526  
    2020import eu.clarin.cmdi.vlo.service.FacetFieldsService;
    2121import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldsDataProvider;
     22import java.util.Collection;
    2223import org.apache.solr.client.solrj.response.FacetField;
     24import org.apache.wicket.ajax.AjaxRequestTarget;
    2325import org.apache.wicket.markup.html.panel.Panel;
    2426import org.apache.wicket.markup.repeater.Item;
     
    3739    private FacetFieldsService facetFieldsService;
    3840
    39     public FacetsPanel(String id, IModel<QueryFacetsSelection> model) {
     41    public FacetsPanel(final String id, final IModel<QueryFacetsSelection> model) {
    4042        super(id, model);
    41         add(new FacetsDataView("facets", model));
     43
     44        add(new DataView<FacetField>("facets", new FacetFieldsDataProvider(facetFieldsService, model)) {
     45
     46            @Override
     47            protected void populateItem(Item<FacetField> item) {
     48                item.add(new FacetPanel("facet", item.getModel()) {
     49
     50                    @Override
     51                    public void onValuesSelected(String facet, Collection<String> value, AjaxRequestTarget target) {
     52                        // A value has been selected on this facet's panel,
     53                        // update the model!
     54                        model.getObject().selectValues(facet, value);
     55
     56                        // Trigger updates to reflect new model state
     57                        modelChanged();
     58
     59                        if (target != null) {
     60                            // reload entire page for now
     61                            target.add(getPage());
     62                        }
     63                    }
     64                });
     65            }
     66        });
    4267    }
    4368
    44     private class FacetsDataView extends DataView<FacetField> {
    45 
    46         public FacetsDataView(String id, IModel<QueryFacetsSelection> model) {
    47             super(id, new FacetFieldsDataProvider(facetFieldsService, model));
    48         }
    49 
    50         @Override
    51         protected void populateItem(Item<FacetField> item) {
    52             item.add(new FacetPanel("facet", item.getModel()));
    53         }
    54     }
    5569}
Note: See TracChangeset for help on using the changeset viewer.