summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/demo/SimpleAddressBook.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/vaadin/demo/SimpleAddressBook.java')
-rw-r--r--src/com/vaadin/demo/SimpleAddressBook.java137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/com/vaadin/demo/SimpleAddressBook.java b/src/com/vaadin/demo/SimpleAddressBook.java
new file mode 100644
index 0000000000..d9a687feff
--- /dev/null
+++ b/src/com/vaadin/demo/SimpleAddressBook.java
@@ -0,0 +1,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;
+ }
+
+}