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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
package com.vaadin.demo;
import com.vaadin.Application;
import com.vaadin.data.Property;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.util.IndexedContainer;
import com.vaadin.ui.Button;
import com.vaadin.ui.Form;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.SplitPanel;
import com.vaadin.ui.Table;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Button.ClickEvent;
public class SimpleAddressBook extends Application {
private static String[] fields = { "First Name", "Last Name", "Company",
"Mobile Phone", "Work Phone", "Home Phone", "Work Email",
"Home Email", "Street", "Zip", "City", "State", "Country" };
private static String[] visibleCols = new String[] { "Last Name", "First Name",
"Company" };
private Table contactList = new Table();
private Form contactEditor = new Form();
private HorizontalLayout bottomLeftCorner = new HorizontalLayout();
private Button contactRemovalButton;
private IndexedContainer addressBookData = createDummyData();
public void init() {
initLayout();
initContactAddRemoveButtons();
initAddressList();
initFilteringControls();
}
private void initLayout() {
SplitPanel splitPanel = new SplitPanel(
SplitPanel.ORIENTATION_HORIZONTAL);
setMainWindow(new Window("Address Book", splitPanel));
VerticalLayout left = new VerticalLayout();
left.setSizeFull();
left.addComponent(contactList);
contactList.setSizeFull();
left.setExpandRatio(contactList, 1);
splitPanel.addComponent(left);
splitPanel.addComponent(contactEditor);
contactEditor.setSizeFull();
contactEditor.getLayout().setMargin(true);
contactEditor.setImmediate(true);
bottomLeftCorner.setWidth("100%");
left.addComponent(bottomLeftCorner);
}
private void initContactAddRemoveButtons() {
// New item button
bottomLeftCorner.addComponent(new Button("+", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
Object id = contactList.addItem();
contactList.setValue(id);
}
}));
// Remove item button
contactRemovalButton = new Button("-", new Button.ClickListener() {
public void buttonClick(ClickEvent event) {
contactList.removeItem(contactList.getValue());
contactList.select(null);
}
});
contactRemovalButton.setVisible(false);
bottomLeftCorner.addComponent(contactRemovalButton);
}
private String[] initAddressList() {
contactList.setContainerDataSource(addressBookData);
contactList.setVisibleColumns(visibleCols);
contactList.setSelectable(true);
contactList.setImmediate(true);
contactList.addListener(new Property.ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
Object id = contactList.getValue();
contactEditor.setItemDataSource(id == null ? null : contactList
.getItem(id));
contactRemovalButton.setVisible(id != null);
}
});
return visibleCols;
}
private void initFilteringControls() {
for (final String pn : visibleCols) {
final TextField sf = new TextField();
bottomLeftCorner.addComponent(sf);
sf.setWidth("100%");
sf.setValue(pn);
sf.setImmediate(true);
bottomLeftCorner.setExpandRatio(sf, 1);
sf.addListener(new Property.ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
addressBookData.removeContainerFilters(pn);
if (sf.toString().length() > 0 && !pn.equals(sf.toString()))
addressBookData.addContainerFilter(pn, sf.toString(),
true, false);
getMainWindow().showNotification(
"" + addressBookData.size() + " matches found");
}
});
}
}
private static IndexedContainer createDummyData() {
String[] fnames = { "Peter", "Alice", "Joshua", "Mike", "Olivia",
"Nina", "Alex", "Rita", "Dan", "Umberto", "Henrik", "Rene",
"Lisa", "Marge" };
String[] lnames = { "Smith", "Gordon", "Simpson", "Brown", "Clavel",
"Simons", "Verne", "Scott", "Allison", "Gates", "Rowling",
"Barks", "Ross", "Schneider", "Tate" };
IndexedContainer ic = new IndexedContainer();
for (String p : fields)
ic.addContainerProperty(p, String.class, "");
for (int i = 0; i < 1000; i++) {
Object id = ic.addItem();
ic.getContainerProperty(id, "First Name").setValue(
fnames[(int) (fnames.length * Math.random())]);
ic.getContainerProperty(id, "Last Name").setValue(
lnames[(int) (lnames.length * Math.random())]);
}
return ic;
}
}
|