Skip to content
This repository was archived by the owner on Dec 15, 2023. It is now read-only.

Commit c8a6e81

Browse files
committed
Filter table
1 parent 381a996 commit c8a6e81

File tree

5 files changed

+157
-4
lines changed

5 files changed

+157
-4
lines changed

pom.xml

+8
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@
116116
<groupId>com.vaadin</groupId>
117117
<artifactId>vaadin-grid-flow</artifactId>
118118
</dependency>
119+
<dependency>
120+
<groupId>com.vaadin</groupId>
121+
<artifactId>vaadin-text-field-flow</artifactId>
122+
</dependency>
123+
<dependency>
124+
<groupId>com.vaadin</groupId>
125+
<artifactId>vaadin-date-picker-flow</artifactId>
126+
</dependency>
119127
<!-- external -->
120128
<!-- <dependency>-->
121129
<!-- <groupId>com.github.appreciated</groupId>-->

src/main/java/org/openherbarium/webapp/model/MetadataFilter.java

+60
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ public class MetadataFilter {
99
private LocalDate from;
1010
private LocalDate to;
1111

12+
public MetadataFilter() {
13+
super();
14+
}
15+
1216
public MetadataFilter(String taxon, String determiner, String recorder, LocalDate from,
1317
LocalDate to) {
18+
super();
1419
this.taxon = taxon;
1520
this.determiner = determiner;
1621
this.recorder = recorder;
@@ -57,4 +62,59 @@ public void setTaxon(String taxon) {
5762
public void setTo(LocalDate to) {
5863
this.to = to;
5964
}
65+
66+
@Override
67+
public String toString() {
68+
return "MetadataFilter [taxon=" + taxon + ", determiner=" + determiner + ", recorder="
69+
+ recorder + ", from=" + from + ", to=" + to + "]";
70+
}
71+
72+
@Override
73+
public int hashCode() {
74+
final int prime = 31;
75+
int result = 1;
76+
result = prime * result + ((determiner == null) ? 0 : determiner.hashCode());
77+
result = prime * result + ((from == null) ? 0 : from.hashCode());
78+
result = prime * result + ((recorder == null) ? 0 : recorder.hashCode());
79+
result = prime * result + ((taxon == null) ? 0 : taxon.hashCode());
80+
result = prime * result + ((to == null) ? 0 : to.hashCode());
81+
return result;
82+
}
83+
84+
@Override
85+
public boolean equals(Object obj) {
86+
if (this == obj)
87+
return true;
88+
if (obj == null)
89+
return false;
90+
if (getClass() != obj.getClass())
91+
return false;
92+
MetadataFilter other = (MetadataFilter) obj;
93+
if (determiner == null) {
94+
if (other.determiner != null)
95+
return false;
96+
} else if (!determiner.equals(other.determiner))
97+
return false;
98+
if (from == null) {
99+
if (other.from != null)
100+
return false;
101+
} else if (!from.equals(other.from))
102+
return false;
103+
if (recorder == null) {
104+
if (other.recorder != null)
105+
return false;
106+
} else if (!recorder.equals(other.recorder))
107+
return false;
108+
if (taxon == null) {
109+
if (other.taxon != null)
110+
return false;
111+
} else if (!taxon.equals(other.taxon))
112+
return false;
113+
if (to == null) {
114+
if (other.to != null)
115+
return false;
116+
} else if (!to.equals(other.to))
117+
return false;
118+
return true;
119+
}
60120
}

src/main/java/org/openherbarium/webapp/views/SearchView.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@
22

33
import org.openherbarium.webapp.model.MetadataService;
44
import org.openherbarium.webapp.model.impl.MetadataServiceMockImpl;
5+
import org.openherbarium.webapp.views.searchgrid.FilterPanel;
56
import org.openherbarium.webapp.views.searchgrid.MetadataDataProvider;
67
import org.openherbarium.webapp.views.searchgrid.SearchGrid;
78
import com.vaadin.flow.component.html.Div;
8-
import com.vaadin.flow.component.html.Span;
99
import com.vaadin.flow.router.Route;
1010

1111
@Route(value = "search", layout = MainView.class)
1212
public class SearchView extends Div {
1313
private static final MetadataService METADATA_SERVICE = new MetadataServiceMockImpl();
1414
private SearchGrid searchGrid = new SearchGrid();
15+
private FilterPanel filterPanel = new FilterPanel();
1516
private MetadataDataProvider dataProvider = new MetadataDataProvider(METADATA_SERVICE);
1617

1718
public SearchView() {
1819
setHeight("100%");
1920
searchGrid.setDataProvider(dataProvider);
20-
21-
add(new Span("Filter view"));
21+
filterPanel.addValueChangeListener(event -> searchGrid.setFilter(event.getValue()));
22+
add(filterPanel);
2223
add(searchGrid);
2324
}
2425
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package org.openherbarium.webapp.views.searchgrid;
2+
3+
import org.openherbarium.webapp.model.MetadataFilter;
4+
import com.vaadin.flow.component.AbstractCompositeField;
5+
import com.vaadin.flow.component.button.Button;
6+
import com.vaadin.flow.component.datepicker.DatePicker;
7+
import com.vaadin.flow.component.orderedlayout.FlexComponent.Alignment;
8+
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
9+
import com.vaadin.flow.component.textfield.TextField;
10+
import com.vaadin.flow.data.binder.Binder;
11+
import com.vaadin.flow.data.binder.ValidationException;
12+
import com.vaadin.flow.data.value.ValueChangeMode;
13+
14+
public class FilterPanel
15+
extends AbstractCompositeField<HorizontalLayout, FilterPanel, MetadataFilter> {
16+
17+
private TextField taxonField = new TextField("Taxon");
18+
private TextField recorderField = new TextField("Finder");
19+
private TextField determinerField = new TextField("Bestimmer");
20+
private DatePicker fromDateField = new DatePicker("Von");
21+
private DatePicker toDateField = new DatePicker("Bis");
22+
private Button resetButton = new Button("Filter zurücksetzen");
23+
private Binder<MetadataFilter> binder = new Binder<>(MetadataFilter.class);
24+
25+
public FilterPanel() {
26+
super(new MetadataFilter());
27+
getContent().setDefaultVerticalComponentAlignment(Alignment.BASELINE);
28+
getContent().add(taxonField, recorderField, determinerField, fromDateField, toDateField,
29+
resetButton);
30+
resetButton.addClickListener(event -> resetFilter());
31+
32+
binder.forField(taxonField).bind(MetadataFilter::getTaxon, MetadataFilter::setTaxon);
33+
binder.forField(recorderField).bind(MetadataFilter::getRecorder, MetadataFilter::setRecorder);
34+
binder.forField(determinerField).bind(MetadataFilter::getDeterminer,
35+
MetadataFilter::setDeterminer);
36+
binder.forField(fromDateField).bind(MetadataFilter::getFrom, MetadataFilter::setFrom);
37+
binder.forField(toDateField).bind(MetadataFilter::getTo, MetadataFilter::setTo);
38+
39+
taxonField.setValueChangeMode(ValueChangeMode.EAGER);
40+
taxonField.addInputListener(event -> updateFilter());
41+
42+
recorderField.setValueChangeMode(ValueChangeMode.EAGER);
43+
recorderField.addInputListener(event -> updateFilter());
44+
45+
determinerField.setValueChangeMode(ValueChangeMode.EAGER);
46+
determinerField.addInputListener(event -> updateFilter());
47+
48+
fromDateField.addValueChangeListener(event -> updateFilter());
49+
toDateField.addValueChangeListener(event -> updateFilter());
50+
51+
}
52+
53+
private void updateFilter() {
54+
MetadataFilter metadataFilter = new MetadataFilter();
55+
try {
56+
binder.writeBean(metadataFilter);
57+
} catch (ValidationException e) {
58+
// TODO Auto-generated catch block
59+
e.printStackTrace();
60+
}
61+
setModelValue(metadataFilter, true);
62+
}
63+
64+
private void resetFilter() {
65+
binder.readBean(new MetadataFilter());
66+
setModelValue(new MetadataFilter(), false);
67+
}
68+
69+
@Override
70+
protected void setPresentationValue(MetadataFilter metadataFilter) {
71+
binder.readBean(metadataFilter);
72+
}
73+
74+
}

src/main/java/org/openherbarium/webapp/views/searchgrid/SearchGrid.java

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.openherbarium.webapp.views.searchgrid;
22

33
import org.openherbarium.webapp.model.Metadata;
4+
import org.openherbarium.webapp.model.MetadataFilter;
45
import com.vaadin.flow.component.Composite;
56
import com.vaadin.flow.component.grid.Grid;
7+
import com.vaadin.flow.data.provider.ConfigurableFilterDataProvider;
68
import com.vaadin.flow.data.renderer.LocalDateRenderer;
79

810
public class SearchGrid extends Composite<Grid<Metadata>> {
@@ -12,6 +14,7 @@ public class SearchGrid extends Composite<Grid<Metadata>> {
1214
public static final String COLUMN_DETERMINER = "determiner";
1315
public static final String COLUMN_TAXON = "taxon";
1416
private Grid<Metadata> grid = new Grid<>(Metadata.class, false);
17+
private ConfigurableFilterDataProvider<Metadata, Void, MetadataFilter> filterDataProvider;
1518

1619
@Override
1720
protected Grid<Metadata> initContent() {
@@ -27,6 +30,13 @@ protected Grid<Metadata> initContent() {
2730
}
2831

2932
public void setDataProvider(MetadataDataProvider dataProvider) {
30-
grid.setDataProvider(dataProvider);
33+
filterDataProvider = dataProvider.withConfigurableFilter();
34+
grid.setDataProvider(filterDataProvider);
35+
}
36+
37+
public void setFilter(MetadataFilter filter) {
38+
if (filterDataProvider != null) {
39+
filterDataProvider.setFilter(filter);
40+
}
3141
}
3242
}

0 commit comments

Comments
 (0)