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

Commit 74ee38e

Browse files
committed
Selection panel
1 parent 01d361e commit 74ee38e

File tree

7 files changed

+130
-3
lines changed

7 files changed

+130
-3
lines changed

pom.xml

+4
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@
123123
<groupId>com.vaadin</groupId>
124124
<artifactId>vaadin-date-picker-flow</artifactId>
125125
</dependency>
126+
<dependency>
127+
<groupId>com.vaadin</groupId>
128+
<artifactId>vaadin-form-layout-flow</artifactId>
129+
</dependency>
126130
<!-- external -->
127131
<!-- <dependency>-->
128132
<!-- <groupId>com.github.appreciated</groupId>-->

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

+7-3
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,25 @@
55
import org.openherbarium.webapp.views.searchgrid.FilterPanel;
66
import org.openherbarium.webapp.views.searchgrid.MetadataDataProvider;
77
import org.openherbarium.webapp.views.searchgrid.SearchGrid;
8+
import org.openherbarium.webapp.views.selection.SelectionPanel;
89
import com.vaadin.flow.component.html.Div;
10+
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
911
import com.vaadin.flow.router.Route;
1012

1113
@Route(value = "search", layout = MainView.class)
12-
public class SearchView extends Div {
14+
public class SearchView extends HorizontalLayout {
1315
private static final MetadataService METADATA_SERVICE = new MetadataServiceMockImpl();
1416
private SearchGrid searchGrid = new SearchGrid();
1517
private FilterPanel filterPanel = new FilterPanel();
1618
private MetadataDataProvider dataProvider = new MetadataDataProvider(METADATA_SERVICE);
19+
private SelectionPanel selectionPanel = new SelectionPanel();
1720

1821
public SearchView() {
1922
setHeight("100%");
2023
searchGrid.setDataProvider(dataProvider);
2124
filterPanel.addValueChangeListener(event -> searchGrid.setFilter(event.getValue()));
22-
add(filterPanel);
23-
add(searchGrid);
25+
add(new Div(filterPanel, searchGrid));
26+
searchGrid.setAddMetadataListener(selectionPanel);
27+
add(selectionPanel);
2428
}
2529
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.openherbarium.webapp.views.searchgrid;
2+
3+
import org.openherbarium.webapp.model.Metadata;
4+
5+
@FunctionalInterface
6+
public interface AddMetatadaToSelectionEventListener {
7+
void addMetadataToSelection(Metadata metadata);
8+
}

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

+19
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import org.openherbarium.webapp.model.Metadata;
44
import org.openherbarium.webapp.model.MetadataFilter;
55
import com.vaadin.flow.component.Composite;
6+
import com.vaadin.flow.component.button.Button;
67
import com.vaadin.flow.component.grid.Grid;
78
import com.vaadin.flow.data.provider.ConfigurableFilterDataProvider;
9+
import com.vaadin.flow.data.renderer.ComponentRenderer;
810
import com.vaadin.flow.data.renderer.LocalDateRenderer;
911

1012
public class SearchGrid extends Composite<Grid<Metadata>> {
@@ -15,6 +17,7 @@ public class SearchGrid extends Composite<Grid<Metadata>> {
1517
public static final String COLUMN_TAXON = "taxon";
1618
private Grid<Metadata> grid = new Grid<>(Metadata.class, false);
1719
private ConfigurableFilterDataProvider<Metadata, Void, MetadataFilter> filterDataProvider;
20+
private AddMetatadaToSelectionEventListener addMetadataListener;
1821

1922
@Override
2023
protected Grid<Metadata> initContent() {
@@ -25,15 +28,31 @@ protected Grid<Metadata> initContent() {
2528
.setHeader("Finder");
2629
grid.addColumn(new LocalDateRenderer<>(Metadata::getDate, "dd.MM.yyyy"))
2730
.setSortProperty(COLUMN_DATE).setHeader("Datum");
31+
grid.addColumn(new ComponentRenderer<>(
32+
metadata -> new Button("Zum vergleich", event -> addToCompare(metadata))));
2833
grid.setHeight("100%");
2934
return grid;
3035
}
3136

37+
private void addToCompare(Metadata metadata) {
38+
if (addMetadataListener != null) {
39+
addMetadataListener.addMetadataToSelection(metadata);
40+
}
41+
}
42+
3243
public void setDataProvider(MetadataDataProvider dataProvider) {
3344
filterDataProvider = dataProvider.withConfigurableFilter();
3445
grid.setDataProvider(filterDataProvider);
3546
}
3647

48+
public AddMetatadaToSelectionEventListener getAddMetadataListener() {
49+
return addMetadataListener;
50+
}
51+
52+
public void setAddMetadataListener(AddMetatadaToSelectionEventListener addMetadataListener) {
53+
this.addMetadataListener = addMetadataListener;
54+
}
55+
3756
public void setFilter(MetadataFilter filter) {
3857
if (filterDataProvider != null) {
3958
filterDataProvider.setFilter(filter);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.openherbarium.webapp.views.selection;
2+
3+
import org.openherbarium.webapp.model.Metadata;
4+
import org.openherbarium.webapp.views.searchgrid.PersonFormatter;
5+
import com.vaadin.flow.component.Composite;
6+
import com.vaadin.flow.component.button.Button;
7+
import com.vaadin.flow.component.datepicker.DatePicker;
8+
import com.vaadin.flow.component.formlayout.FormLayout;
9+
import com.vaadin.flow.component.textfield.TextField;
10+
11+
public class PreviewComponent extends Composite<FormLayout> {
12+
13+
private final Metadata metadata;
14+
private RemoveMetadataFromSelectionListener listener;
15+
16+
public PreviewComponent(Metadata metadata, RemoveMetadataFromSelectionListener listener) {
17+
super();
18+
this.metadata = metadata;
19+
this.listener = listener;
20+
TextField taxonField = new TextField("Taxon", metadata.getTaxonName(), "");
21+
taxonField.setReadOnly(true);
22+
TextField recorderField =
23+
new TextField("Finder", PersonFormatter.format(metadata.getRecorder()), "");
24+
recorderField.setReadOnly(true);
25+
26+
TextField determinerField =
27+
new TextField("Bestimmer", PersonFormatter.format(metadata.getDeterminer()), "");
28+
determinerField.setReadOnly(true);
29+
30+
DatePicker dateField = new DatePicker(metadata.getDate());
31+
dateField.setLabel("Datum");
32+
dateField.setReadOnly(true);
33+
Button removeButton = new Button("Entfernen", event -> remove());
34+
getContent().add(taxonField, recorderField, determinerField, dateField, removeButton);
35+
}
36+
37+
private void remove() {
38+
if (listener != null) {
39+
listener.removeMetadata(metadata);
40+
}
41+
}
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.openherbarium.webapp.views.selection;
2+
3+
import org.openherbarium.webapp.model.Metadata;
4+
5+
@FunctionalInterface
6+
public interface RemoveMetadataFromSelectionListener {
7+
8+
void removeMetadata(Metadata metadata);
9+
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.openherbarium.webapp.views.selection;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import org.openherbarium.webapp.model.Metadata;
6+
import org.openherbarium.webapp.views.searchgrid.AddMetatadaToSelectionEventListener;
7+
import com.vaadin.flow.component.Composite;
8+
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
9+
10+
public class SelectionPanel extends Composite<VerticalLayout>
11+
implements AddMetatadaToSelectionEventListener, RemoveMetadataFromSelectionListener {
12+
private static final int MAX_METADATA = 2;
13+
private List<Metadata> metadatas = new ArrayList<>();
14+
15+
16+
private void render() {
17+
getContent().removeAll();
18+
for (Metadata metadata : metadatas) {
19+
getContent().add(new PreviewComponent(metadata, this));
20+
}
21+
22+
}
23+
24+
@Override
25+
public void addMetadataToSelection(Metadata metadata) {
26+
if (metadatas.size() >= MAX_METADATA) {
27+
metadatas.remove(0);
28+
}
29+
metadatas.add(metadata);
30+
render();
31+
32+
}
33+
34+
@Override
35+
public void removeMetadata(Metadata metadata) {
36+
metadatas.remove(metadata);
37+
render();
38+
39+
}
40+
}

0 commit comments

Comments
 (0)