Changeset 5018


Ignore:
Timestamp:
04/22/14 13:16:26 (10 years ago)
Author:
Twan Goosen
Message:

some internal refactoring and documentation in SimpleSearchBrowsePanel?

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vlo/branches/vlo-3.0/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SimpleSearchBrowsePanel.java

    r5017 r5018  
    2626import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    2727import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage;
    28 import java.util.List;
     28import eu.clarin.cmdi.vlo.wicket.pages.SimpleSearchPage;
    2929import org.apache.solr.client.solrj.response.FacetField;
    30 import org.apache.wicket.Component;
    3130import org.apache.wicket.ajax.AjaxRequestTarget;
    3231import org.apache.wicket.ajax.markup.html.AjaxFallbackLink;
     
    4544
    4645/**
     46 * Panel to be shown on {@link SimpleSearchPage} that has a number of links for
     47 * browsing the records; either all records or by making a value selection in
     48 * one of a number of predefined facets
    4749 *
    4850 * @author twagoo
     
    5153
    5254    @SpringBean
    53     private FacetFieldsService facetFieldsService;
    54     @SpringBean
    5555    private SolrDocumentService documentService;
    56     @SpringBean(name = "queryParametersConverter")
    57     private PageParametersConverter<QueryFacetsSelection> paramsConverter;
    58     @SpringBean
    59     private VloConfig vloConfig;
    6056
     57    /**
     58     *
     59     * @param id component id
     60     * @param model model of current selection
     61     */
    6162    public SimpleSearchBrowsePanel(String id, IModel<QueryFacetsSelection> model) {
    6263        super(id, model);
     
    7071        };
    7172
     73        // add a link to browse all records
    7274        final BookmarkablePageLink browseAllLink = new BookmarkablePageLink("browseAll", FacetedSearchPage.class);
    7375        // set label on basis of string defined in resource bundle that takes the count model as a parameter
     
    7577        add(browseAllLink);
    7678
    77         add(addFacets("facet"));
     79        // add selectors for some facets
     80        add(new FacetSelectorsView("facet", getModel()));
    7881
     82        // make this panel AJAX-updatable
    7983        setOutputMarkupId(true);
    80 
    8184    }
    8285
    83     private Component addFacets(final String id) {
    84         final IModel<List<FacetField>> facetFieldsModel = new FacetFieldsModel(facetFieldsService, vloConfig.getSimpleSearchFacetFields(), getModel(), -1);
    85         final IModel<String> selectedFacetModel = new Model<String>(null);
    86         return new ListView<FacetField>(id, facetFieldsModel) {
     86    /**
     87     * List model of links that open up {@link FacetValuesPanel}s for a number
     88     * of facets. Which facets are included is based on the value returned by
     89     * {@link VloConfig#getSimpleSearchFacetFields() } in the {@link VloConfig}
     90     * instance injected into this instance.
     91     */
     92    private class FacetSelectorsView extends ListView<FacetField> {
    8793
    88             @Override
    89             protected void populateItem(final ListItem<FacetField> item) {
    90                 // add a panel showing the values for selection (constrained by the current model)
    91                 final FacetValuesPanel values = new FacetValuesPanel("values", item.getModel(), SimpleSearchBrowsePanel.this.getModel()) {
     94        @SpringBean
     95        private FacetFieldsService facetFieldsService;
     96        @SpringBean(name = "queryParametersConverter")
     97        private PageParametersConverter<QueryFacetsSelection> paramsConverter;
     98        @SpringBean
     99        private VloConfig vloConfig;
    92100
    93                     @Override
    94                     protected void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target) {
    95                         // value selected, add to selection model then submit to search page
    96                         final IModel<QueryFacetsSelection> selectionModel = SimpleSearchBrowsePanel.this.getModel();
    97                         selectionModel.getObject().selectValues(facet, values);
    98                         setResponsePage(FacetedSearchPage.class, paramsConverter.toParameters(selectionModel.getObject()));
     101        /**
     102         * Model that holds the currently selected facet
     103         */
     104        private final IModel<String> selectedFacetModel = new Model<String>(null);
     105        private final IModel<QueryFacetsSelection> selectionModel;
     106
     107        public FacetSelectorsView(String id, IModel<QueryFacetsSelection> selectionModel) {
     108            super(id);
     109            this.selectionModel = selectionModel;
     110            setModel(new FacetFieldsModel(facetFieldsService, vloConfig.getSimpleSearchFacetFields(), selectionModel, -1));
     111        }
     112
     113        @Override
     114        protected void populateItem(final ListItem<FacetField> item) {
     115            // add a panel showing the values for selection (constrained by the current model)
     116            final FacetValuesPanel values = new FacetValuesPanel("values", item.getModel(), selectionModel) {
     117
     118                @Override
     119                protected void onValuesSelected(String facet, FacetSelection values, AjaxRequestTarget target) {
     120                    // value selected, make a new selection (in this panel we do not want to change the existing selection)...
     121                    final QueryFacetsSelection newSelection = selectionModel.getObject().getCopy();
     122                    newSelection.selectValues(facet, values);
     123                    // ...then submit to search page
     124                    setResponsePage(FacetedSearchPage.class, paramsConverter.toParameters(newSelection));
     125                }
     126
     127            };
     128            // wrap in a container that is only visible if this is the selected facet
     129            final WebMarkupContainer valuesContainer = new WebMarkupContainer("valuesContainer") {
     130
     131                @Override
     132                protected void onConfigure() {
     133                    super.onConfigure();
     134                    setVisible(item.getModelObject().getName().equals(selectedFacetModel.getObject()));
     135                }
     136            };
     137            valuesContainer.add(values);
     138            item.add(valuesContainer);
     139
     140            // add a link for selecting this facet
     141            final AjaxFallbackLink select = new AjaxFallbackLink("select") {
     142
     143                @Override
     144                public void onClick(AjaxRequestTarget target) {
     145                    final String facetName = item.getModelObject().getName();
     146                    if (facetName.equals(selectedFacetModel.getObject())) {
     147                        // already selected, hide
     148                        selectedFacetModel.setObject(null);
     149                    } else {
     150                        // set this facet as the selected one
     151                        selectedFacetModel.setObject(facetName);
    99152                    }
    100153
    101                 };
    102                 // wrap in a container that is only visible if this is the selected facet
    103                 final WebMarkupContainer valuesContainer = new WebMarkupContainer("valuesContainer") {
     154                    if (target != null) {
     155                        // AJAX update
     156                        target.add(SimpleSearchBrowsePanel.this);
     157                    }
     158                }
     159            };
     160            select.add(new Label("name",
     161                    // friendly facet name based on name in FacetField
     162                    new SolrFieldNameModel(new PropertyModel(item.getModel(), "name"))));
     163            item.add(select);
    104164
    105                     @Override
    106                     protected void onConfigure() {
    107                         super.onConfigure();
    108                         setVisible(item.getModelObject().getName().equals(selectedFacetModel.getObject()));
    109                     }
    110                 };
    111                 valuesContainer.add(values);
    112                 item.add(valuesContainer);
     165            // show a separator except for the last item
     166            item.add(new WebMarkupContainer("separator") {
    113167
    114                 // add a link for selecting this facet
    115                 final AjaxFallbackLink select = new AjaxFallbackLink("select") {
    116 
    117                     @Override
    118                     public void onClick(AjaxRequestTarget target) {
    119                         final String facetName = item.getModelObject().getName();
    120                         if (facetName.equals(selectedFacetModel.getObject())) {
    121                             // already selected, hide
    122                             selectedFacetModel.setObject(null);
    123                         } else {
    124                             // set this facet as the selected one
    125                             selectedFacetModel.setObject(facetName);
    126                         }
    127 
    128                         if (target != null) {
    129                             // AJAX update
    130                             target.add(SimpleSearchBrowsePanel.this);
    131                         }
    132                     }
    133                 };
    134                 select.add(new Label("name",
    135                         // friendly facet name based on name in FacetField
    136                         new SolrFieldNameModel(new PropertyModel(item.getModel(), "name"))));
    137                 item.add(select);
    138 
    139                 // show a separator except for the last item
    140                 item.add(new WebMarkupContainer("separator") {
    141 
    142                     @Override
    143                     protected void onConfigure() {
    144                         super.onConfigure();
    145                         setVisible(item.getIndex() + 1 < getList().size());
    146                     }
    147                 });
    148             }
    149         };
     168                @Override
     169                protected void onConfigure() {
     170                    super.onConfigure();
     171                    setVisible(item.getIndex() + 1 < getList().size());
     172                }
     173            });
     174        }
    150175    }
    151176
Note: See TracChangeset for help on using the changeset viewer.