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 package info.magnolia.poc.customer;
35
36 import info.magnolia.poc.TreeGridUI;
37
38 import com.vaadin.data.Binder;
39 import com.vaadin.event.ShortcutAction;
40 import com.vaadin.ui.Button;
41 import com.vaadin.ui.DateField;
42 import com.vaadin.ui.FormLayout;
43 import com.vaadin.ui.HorizontalLayout;
44 import com.vaadin.ui.NativeSelect;
45 import com.vaadin.ui.TextField;
46 import com.vaadin.ui.themes.ValoTheme;
47
48 public class CustomerForm extends FormLayout {
49
50 private CustomerService service = CustomerService.getInstance();
51 private Customer customer;
52 private TreeGridUI treeGridUI;
53
54 private Binder<Customer> binder = new Binder<>(Customer.class);
55
56 private TextField firstName = new TextField("First Name");
57 private TextField lastName = new TextField("Last Name");
58 private TextField email = new TextField("Email");
59 private NativeSelect<CustomerStatus> status = new NativeSelect<>("Status");
60 private DateField birthdate = new DateField("Birthday");
61 private Button save = new Button("Save");
62 private Button delete = new Button("Delete");
63
64 public CustomerForm(TreeGridUI treeGridUI) {
65 this.treeGridUI = treeGridUI;
66
67 status.setItems(CustomerStatus.values());
68
69
70 save.setStyleName(ValoTheme.BUTTON_PRIMARY);
71 save.setClickShortcut(ShortcutAction.KeyCode.ENTER);
72
73 save.addClickListener(e -> this.save());
74 delete.addClickListener(e -> this.delete());
75
76 binder.bindInstanceFields(this);
77
78 setSizeUndefined();
79 HorizontalLayout buttons = new HorizontalLayout(save, delete);
80 addComponents(firstName, lastName, email, status, birthdate, buttons);
81 }
82
83 public void setCustomer(Customer customer) {
84 this.customer = customer;
85 binder.setBean(customer);
86
87
88 delete.setVisible(customer.isPersisted());
89 setVisible(true);
90 firstName.selectAll();
91 }
92
93 private void delete() {
94 service.delete(customer);
95
96 setVisible(false);
97 }
98
99 private void save() {
100 service.save(customer);
101
102 setVisible(false);
103 }
104 }