Changeset 6813 for vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetPanel.java
- Timestamp:
- 11/17/15 11:55:14 (9 years ago)
- 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 17 17 package eu.clarin.cmdi.vlo.wicket.panels.search; 18 18 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;26 19 import java.util.Collection; 27 import java.util.HashSet; 20 28 21 import org.apache.solr.client.solrj.response.FacetField; 29 22 import org.apache.wicket.ajax.AjaxRequestTarget; … … 31 24 import org.apache.wicket.markup.html.basic.Label; 32 25 import org.apache.wicket.model.IModel; 33 import org.apache.wicket.model.PropertyModel;34 26 import org.slf4j.Logger; 35 27 import org.slf4j.LoggerFactory; 28 29 import eu.clarin.cmdi.vlo.pojo.ExpansionState; 30 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 31 import eu.clarin.cmdi.vlo.wicket.model.SelectionModel; 32 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldDescriptionModel; 33 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel; 34 import eu.clarin.cmdi.vlo.wicket.panels.ExpandablePanel; 36 35 37 36 /** … … 43 42 * @author twagoo 44 43 */ 45 public abstract class FacetPanel extends ExpandablePanel< FacetFieldSelection> {44 public abstract class FacetPanel extends ExpandablePanel<String> { 46 45 private final static Logger logger = LoggerFactory.getLogger(FacetPanel.class); 47 48 private final IModel<ExpansionState> expansionStateModel;49 46 50 47 private final SelectedFacetPanel selectedFacetPanel; 51 48 private final FacetValuesPanel facetValuesPanel; 52 49 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); 55 52 } 56 53 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); 60 56 61 57 // panel showing values for selection 62 facetValuesPanel = createFacetValuesPanel("facetValues", subListSize);58 facetValuesPanel = createFacetValuesPanel("facetValues", facetNameModel.getObject(), facetFieldModel, selectionModel, subListSize); 63 59 add(facetValuesPanel); 64 60 65 61 // panel showing current selection, allowing for deselection 66 selectedFacetPanel = createSelectedFacetPanel("facetSelection" );62 selectedFacetPanel = createSelectedFacetPanel("facetSelection", facetNameModel.getObject(), selectionModel); 67 63 add(selectedFacetPanel); 68 64 } … … 70 66 @Override 71 67 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()))); 75 70 return label; 76 71 } … … 79 74 protected void onConfigure() { 80 75 super.onConfigure(); 81 82 final boolean valuesSelected = ! getModelObject().getFacetValues().isEmpty();76 77 final boolean valuesSelected = !selectedFacetPanel.getModelObject().isEmpty(); 83 78 facetValuesPanel.setVisible(!valuesSelected); 84 79 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); 88 84 } 85 89 86 90 87 /** … … 97 94 } 98 95 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) { 103 98 @Override 104 public void onValuesSelected( String facet, FacetSelection value, AjaxRequestTarget target) {99 public void onValuesSelected(Collection<String> values, AjaxRequestTarget target) { 105 100 // 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) { 108 104 // reload entire page for now 109 105 selectionChanged(target); … … 113 109 } 114 110 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)) { 117 113 @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); 120 117 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 135 123 if (target != null) { 136 124 // reload entire page for now
Note: See TracChangeset
for help on using the changeset viewer.