package net.lr.tutorial.karaf.vaadin; import java.util.Locale; import java.util.UUID; import net.lr.tasklist.model.Task; import net.lr.tasklist.model.TaskService; import com.vaadin.Application; import com.vaadin.data.Item; import com.vaadin.data.Property; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.util.BeanContainer; import com.vaadin.data.util.BeanItem; import com.vaadin.ui.Form; import com.vaadin.ui.GridLayout; import com.vaadin.ui.MenuBar; import com.vaadin.ui.MenuBar.Command; import com.vaadin.ui.MenuBar.MenuItem; import com.vaadin.ui.Table; import com.vaadin.ui.Window; @SuppressWarnings("serial") class ExampleApplication extends Application { private static final Object[] VISIBLE_COLUMNS = new Object[] {"title", "dueDate", "description"}; private final TaskService taskService; private final String title; ExampleApplication(TaskService taskService, String title) { this.taskService = taskService; this.title = title; } @Override public void init() { final GridLayout layout = new GridLayout(1, 3); layout.setWidth("100%"); layout.setMargin(false); setMainWindow(new Window(this.title, layout)); final BeanContainer<String, Task> beans = new BeanContainer<String, Task>(Task.class); beans.setBeanIdProperty("id"); final Form form = new Form(); form.setLocale(Locale.GERMAN); final Table table = new Table(this.title, beans); MenuBar menu = createMenuBar(beans, table); layout.addComponent(menu); table.setSelectable(true); table.setImmediate(true); table.setVisibleColumns(VISIBLE_COLUMNS); table.addListener(new Property.ValueChangeListener() { public void valueChange(ValueChangeEvent event) { Object selectedId = table.getValue(); @SuppressWarnings("unchecked") BeanItem<Task> item = (BeanItem<Task>) table.getItem(selectedId); form.setItemDataSource(item); form.setVisibleItemProperties(VISIBLE_COLUMNS); } }); update(beans); layout.addComponent(table); Object first = table.getItemIds().iterator().next(); Item item = table.getItem(first); form.setItemDataSource(item); form.setCaption("Edit Task"); form.setVisibleItemProperties(VISIBLE_COLUMNS); form.setImmediate(true); form.addListener(new Property.ValueChangeListener() { public void valueChange(ValueChangeEvent event) { @SuppressWarnings("unchecked") BeanItem<Task> item = (BeanItem<Task>) form.getItemDataSource(); taskService.updateTask(item.getBean()); } }); layout.addComponent(form); } private MenuBar createMenuBar(final BeanContainer<String, Task> beans, final Table table) { MenuBar menu = new MenuBar(); menu.setImmediate(true); menu.addItem("Reload", new Command() { public void menuSelected(MenuItem selectedItem) { update(beans); } }); menu.addItem("Add", new Command() { public void menuSelected(MenuItem selectedItem) { Task task = new Task(); task.setId(UUID.randomUUID().toString()); task.setTitle("New Task"); task.setDescription("None"); taskService.addTask(task); beans.addBean(task); } }); menu.addItem("Delete", new Command() { public void menuSelected(MenuItem selectedItem) { String id = (String) table.getValue(); taskService.deleteTask(id); table.removeItem(id); } }); return menu; } private void update(final BeanContainer<String, Task> beans) { beans.removeAllItems(); beans.addAll(taskService.getTasks()); } }