package com.mycompany; import com.mycompany.entity.User; import com.vaadin.addon.jpacontainer.JPAContainer; import com.vaadin.addon.jpacontainer.JPAContainerFactory; import com.vaadin.data.Property; import com.vaadin.data.util.BeanItem; import com.vaadin.event.FieldEvents; import com.vaadin.event.ItemClickEvent; import com.vaadin.navigator.View; import com.vaadin.navigator.ViewChangeListener; import com.vaadin.ui.*; /** * Created by ziqew on 12/5/13. */ public class UserListView extends VerticalLayout implements View { private Table userTable; private TextField searchField; private Button newButton; private Button deleteButton; private Button editButton; private JPAContainer<User> users; private String textFilter; public UserListView(){ users = JPAContainerFactory.make(User.class, MyVaadinUI.PERSISTENCE_UNIT); } @Override public void enter(ViewChangeListener.ViewChangeEvent event) { userTable = new Table(null, users); userTable.setSelectable(true); userTable.setImmediate(true); userTable.addListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent event) { setModificationsEnabled(event.getProperty().getValue() != null); } private void setModificationsEnabled(boolean b) { deleteButton.setEnabled(b); editButton.setEnabled(b); } }); userTable.setSizeFull(); // personTable.setSelectable(true); userTable.addListener(new ItemClickEvent.ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { if (event.isDoubleClick()) { userTable.select(event.getItemId()); } } }); userTable.setVisibleColumns(new Object[] { "id", "name", "passwordDigest", "createdAt", "updatedAt"}); HorizontalLayout toolbar = new HorizontalLayout(); newButton = new Button("Add"); newButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { final BeanItem<User> newPersonItem = new BeanItem<User>( new User()); UserEditor personEditor = new UserEditor(newPersonItem); personEditor.addListener(new UserEditor.EditorSavedListener() { @Override public void editorSaved(UserEditor.EditorSavedEvent event) { users.addEntity(newPersonItem.getBean()); } }); UI.getCurrent().addWindow(personEditor); } }); deleteButton = new Button("Delete"); deleteButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { users.removeItem(userTable.getValue()); } }); deleteButton.setEnabled(false); editButton = new Button("Edit"); editButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { UI.getCurrent().addWindow( new UserEditor(userTable.getItem(userTable .getValue()))); } }); editButton.setEnabled(false); searchField = new TextField(); searchField.setInputPrompt("Search by name"); searchField.addTextChangeListener(new FieldEvents.TextChangeListener() { @Override public void textChange(FieldEvents.TextChangeEvent event) { textFilter = event.getText(); updateFilters(); } }); toolbar.addComponent(newButton); toolbar.addComponent(deleteButton); toolbar.addComponent(editButton); toolbar.addComponent(searchField); toolbar.setWidth("100%"); toolbar.setExpandRatio(searchField, 1); toolbar.setComponentAlignment(searchField, Alignment.TOP_RIGHT); this.addComponent(toolbar); this.addComponent(userTable); this.setExpandRatio(userTable, 1); this.setSizeFull(); } private void updateFilters() { // persons.setApplyFiltersImmediately(false); // persons.removeAllContainerFilters(); // if (departmentFilter != null) { // // two level hierarchy at max in our demo // if (departmentFilter.getParent() == null) { // persons.addContainerFilter(new Equal("department.parent", // departmentFilter)); // } else { // persons.addContainerFilter(new Equal("department", // departmentFilter)); // } // } // if (textFilter != null && !textFilter.equals("")) { // Or or = new Or(new Like("firstName", textFilter + "%", false), // new Like("lastName", textFilter + "%", false)); // persons.addContainerFilter(or); // } // persons.applyFilters(); } }