OSDN Git Service

(no commit message)
[spiga-app/vaadin.git] / src / main / java / net / korabo / app / vaadin01 / AddressbookUI.java
1 /*
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.
5  */
6 package net.korabo.app.vaadin01;
7
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;
24
25
26 /**
27  *
28  * @author cintake
29  */
30 @Title("Addressbook")
31 @Theme("valo")
32 @Widgetset("net.korabo.app.vaadin01.MyAppWidgetset")
33 public class AddressbookUI extends UI{
34   
35   
36   TextField filter = new TextField();
37     Grid contactList = new Grid();
38     Button newContact = new Button("New contact");
39
40     // ContactForm is an example of a custom component class
41     ContactForm contactForm = new ContactForm();
42
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();
47
48     
49     @Override
50     protected void init(VaadinRequest request) {
51         configureComponents();
52         buildLayout();
53     }
54
55
56     private void configureComponents() {
57          
58         newContact.addClickListener(e -> contactForm.edit(new Contact()));
59
60         filter.setInputPrompt("Filter contacts...");
61         filter.addTextChangeListener(e -> refreshContacts(e.getText()));
62
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()));
71         refreshContacts();
72     }
73     
74     private void buildLayout() {
75         HorizontalLayout actions = new HorizontalLayout(filter, newContact);
76         actions.setWidth("100%");
77         filter.setWidth("100%");
78         actions.setExpandRatio(filter, 1);
79
80         VerticalLayout left = new VerticalLayout(actions, contactList);
81         left.setSizeFull();
82         contactList.setSizeFull();
83         left.setExpandRatio(contactList, 1);
84
85         HorizontalLayout mainLayout = new HorizontalLayout(left, contactForm);
86         mainLayout.setSizeFull();
87         mainLayout.setExpandRatio(left, 1);
88
89         // Split and allow resizing
90         setContent(mainLayout);
91     }
92     
93     void refreshContacts() {
94         refreshContacts(filter.getValue());
95     }
96
97     private void refreshContacts(String stringFilter) {
98         contactList.setContainerDataSource(new BeanItemContainer<>(
99                 Contact.class, service.findAll(stringFilter)));
100         contactForm.setVisible(false);
101     }
102
103
104
105     
106     @WebServlet(urlPatterns = "/*")
107     @VaadinServletConfiguration(ui = AddressbookUI.class, productionMode = false)
108     public static class MyUIServlet extends VaadinServlet {
109
110     }
111
112   
113 }