2 * To change this license header, choose License Headers in Project Properties.
3 * To change this template file, choose Tools | Templates
4 * and open the template in the editor.
6 package net.korabo.app.vaadin01;
8 import com.vaadin.annotations.Theme;
9 import com.vaadin.annotations.Title;
10 import com.vaadin.annotations.VaadinServletConfiguration;
11 import com.vaadin.annotations.Widgetset;
12 import com.vaadin.data.util.BeanItemContainer;
13 import com.vaadin.server.VaadinRequest;
14 import com.vaadin.server.VaadinServlet;
15 import com.vaadin.ui.Button;
16 import com.vaadin.ui.Grid;
17 import com.vaadin.ui.HorizontalLayout;
18 import com.vaadin.ui.TextField;
19 import com.vaadin.ui.UI;
20 import com.vaadin.ui.VerticalLayout;
21 import javax.servlet.annotation.WebServlet;
22 import net.korabo.app.vaadin01.ent.Contact;
23 import net.korabo.app.vaadin01.srv.ContactService;
32 @Widgetset("net.korabo.app.vaadin01.MyAppWidgetset")
33 public class AddressbookUI extends UI{
36 TextField filter = new TextField();
37 Grid contactList = new Grid();
38 Button newContact = new Button("New contact");
40 // ContactForm is an example of a custom component class
41 ContactForm contactForm = new ContactForm();
43 // ContactService is a in-memory mock DAO that mimics
44 // a real-world datasource. Typically implemented for
45 // example as EJB or Spring Data based service.
46 ContactService service = ContactService.createDemoService();
50 protected void init(VaadinRequest request) {
51 configureComponents();
56 private void configureComponents() {
58 newContact.addClickListener(e -> contactForm.edit(new Contact()));
60 filter.setInputPrompt("Filter contacts...");
61 filter.addTextChangeListener(e -> refreshContacts(e.getText()));
63 contactList.setContainerDataSource(new BeanItemContainer<>(Contact.class));
64 contactList.setColumnOrder("firstName", "lastName", "email");
65 contactList.removeColumn("id");
66 contactList.removeColumn("birthDate");
67 contactList.removeColumn("phone");
68 contactList.setSelectionMode(Grid.SelectionMode.SINGLE);
69 contactList.addSelectionListener(e
70 -> contactForm.edit((Contact) contactList.getSelectedRow()));
74 private void buildLayout() {
75 HorizontalLayout actions = new HorizontalLayout(filter, newContact);
76 actions.setWidth("100%");
77 filter.setWidth("100%");
78 actions.setExpandRatio(filter, 1);
80 VerticalLayout left = new VerticalLayout(actions, contactList);
82 contactList.setSizeFull();
83 left.setExpandRatio(contactList, 1);
85 HorizontalLayout mainLayout = new HorizontalLayout(left, contactForm);
86 mainLayout.setSizeFull();
87 mainLayout.setExpandRatio(left, 1);
89 // Split and allow resizing
90 setContent(mainLayout);
93 void refreshContacts() {
94 refreshContacts(filter.getValue());
97 private void refreshContacts(String stringFilter) {
98 contactList.setContainerDataSource(new BeanItemContainer<>(
99 Contact.class, service.findAll(stringFilter)));
100 contactForm.setVisible(false);
106 @WebServlet(urlPatterns = "/*")
107 @VaadinServletConfiguration(ui = AddressbookUI.class, productionMode = false)
108 public static class MyUIServlet extends VaadinServlet {