Changeset 5018
- Timestamp:
- 04/22/14 13:16:26 (10 years ago)
- 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 26 26 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel; 27 27 import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage; 28 import java.util.List;28 import eu.clarin.cmdi.vlo.wicket.pages.SimpleSearchPage; 29 29 import org.apache.solr.client.solrj.response.FacetField; 30 import org.apache.wicket.Component;31 30 import org.apache.wicket.ajax.AjaxRequestTarget; 32 31 import org.apache.wicket.ajax.markup.html.AjaxFallbackLink; … … 45 44 46 45 /** 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 47 49 * 48 50 * @author twagoo … … 51 53 52 54 @SpringBean 53 private FacetFieldsService facetFieldsService;54 @SpringBean55 55 private SolrDocumentService documentService; 56 @SpringBean(name = "queryParametersConverter")57 private PageParametersConverter<QueryFacetsSelection> paramsConverter;58 @SpringBean59 private VloConfig vloConfig;60 56 57 /** 58 * 59 * @param id component id 60 * @param model model of current selection 61 */ 61 62 public SimpleSearchBrowsePanel(String id, IModel<QueryFacetsSelection> model) { 62 63 super(id, model); … … 70 71 }; 71 72 73 // add a link to browse all records 72 74 final BookmarkablePageLink browseAllLink = new BookmarkablePageLink("browseAll", FacetedSearchPage.class); 73 75 // set label on basis of string defined in resource bundle that takes the count model as a parameter … … 75 77 add(browseAllLink); 76 78 77 add(addFacets("facet")); 79 // add selectors for some facets 80 add(new FacetSelectorsView("facet", getModel())); 78 81 82 // make this panel AJAX-updatable 79 83 setOutputMarkupId(true); 80 81 84 } 82 85 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> { 87 93 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; 92 100 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); 99 152 } 100 153 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); 104 164 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") { 113 167 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 } 150 175 } 151 176
Note: See TracChangeset
for help on using the changeset viewer.