/
CrudBasic.java
93 lines (77 loc) · 3.33 KB
/
CrudBasic.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.vaadin.demo.component.crud;
import com.vaadin.demo.DemoExporter; // hidden-source-line
import com.vaadin.demo.domain.Person;
import com.vaadin.flow.component.crud.BinderCrudEditor;
import com.vaadin.flow.component.crud.Crud;
import com.vaadin.flow.component.crud.CrudEditor;
import com.vaadin.flow.component.formlayout.FormLayout;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.html.Div;
import com.vaadin.flow.component.textfield.EmailField;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.binder.Binder;
import com.vaadin.flow.router.Route;
import java.util.Arrays;
import java.util.List;
@Route("crud-basic")
public class CrudBasic extends Div {
private Crud<Person> crud;
private String FIRST_NAME = "firstName";
private String LAST_NAME = "lastName";
private String EMAIL = "email";
private String PROFESSION = "profession";
private String EDIT_COLUMN = "vaadin-crud-edit-column";
public CrudBasic() {
// tag::snippet[]
crud = new Crud<>(Person.class, createEditor());
setupGrid();
setupDataProvider();
add(crud);
// end::snippet[]
}
private CrudEditor<Person> createEditor() {
TextField firstName = new TextField("First name");
TextField lastName = new TextField("Last name");
EmailField email = new EmailField("Email");
TextField profession = new TextField("Profession");
FormLayout form = new FormLayout(firstName, lastName, email,
profession);
Binder<Person> binder = new Binder<>(Person.class);
binder.forField(firstName).asRequired().bind(Person::getFirstName,
Person::setFirstName);
binder.forField(lastName).asRequired().bind(Person::getLastName,
Person::setLastName);
binder.forField(email).asRequired().bind(Person::getEmail,
Person::setEmail);
binder.forField(profession).asRequired().bind(Person::getProfession,
Person::setProfession);
return new BinderCrudEditor<>(binder, form);
}
private void setupGrid() {
Grid<Person> grid = crud.getGrid();
// Only show these columns (all columns shown by default):
List<String> visibleColumns = Arrays.asList(FIRST_NAME, LAST_NAME,
EMAIL, PROFESSION, EDIT_COLUMN);
grid.getColumns().forEach(column -> {
String key = column.getKey();
if (!visibleColumns.contains(key)) {
grid.removeColumn(column);
}
});
// Reorder the columns (alphabetical by default)
grid.setColumnOrder(grid.getColumnByKey(FIRST_NAME),
grid.getColumnByKey(LAST_NAME), grid.getColumnByKey(EMAIL),
grid.getColumnByKey(PROFESSION),
grid.getColumnByKey(EDIT_COLUMN));
}
private void setupDataProvider() {
PersonDataProvider dataProvider = new PersonDataProvider();
crud.setDataProvider(dataProvider);
crud.addDeleteListener(
deleteEvent -> dataProvider.delete(deleteEvent.getItem()));
crud.addSaveListener(
saveEvent -> dataProvider.persist(saveEvent.getItem()));
}
public static class Exporter extends DemoExporter<CrudBasic> { // hidden-source-line
} // hidden-source-line
}