Java tutorial
/** * Copyright 2009-2013 Oy Vaadin Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pl.alburnus.testcaseapp; import pl.alburnus.testcaseapp.PersonEditor.EditorSavedEvent; import pl.alburnus.testcaseapp.PersonEditor.EditorSavedListener; import pl.alburnus.testcaseapp.domain.Department; import pl.alburnus.testcaseapp.domain.Person; import com.vaadin.addon.jpacontainer.JPAContainer; import com.vaadin.addon.jpacontainer.JPAContainerFactory; import com.vaadin.data.Property; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.util.BeanItem; import com.vaadin.data.util.filter.Compare.Equal; import com.vaadin.data.util.filter.Like; import com.vaadin.data.util.filter.Or; import com.vaadin.event.FieldEvents.TextChangeEvent; import com.vaadin.event.FieldEvents.TextChangeListener; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.ComponentContainer; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalSplitPanel; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.Tree; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; /* * Klasa odpowiadajca za stworzenie widoku */ public class AddressBookMainView extends HorizontalSplitPanel implements ComponentContainer { private Tree groupTree; private Table personTable; private TextField searchField; private Button newButton; private Button deleteButton; private Button editButton; private JPAContainer<Department> departments; private JPAContainer<Person> persons; private Department departmentFilter; private String textFilter; public AddressBookMainView() { departments = new HierarchicalDepartmentContainer(); //static make tworzy nowy JPAContainer wspierany przez CachingMutableLocalEntityprovider uywajc nazwy Persistanceunit persons = JPAContainerFactory.make(Person.class, JpaAddressbookUI.PERSISTENCE_UNIT); buildTree(); buildMainArea(); setSplitPosition(30); } private void buildMainArea() { VerticalLayout verticalLayout = new VerticalLayout(); setSecondComponent(verticalLayout); personTable = new Table(null, persons);//Biding Person tabel z JPAContainer personTable.setSelectable(true); personTable.setImmediate(true); personTable.addListener(new Property.ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { setModificationsEnabled(event.getProperty().getValue() != null); } private void setModificationsEnabled(boolean b) { deleteButton.setEnabled(b); editButton.setEnabled(b); } }); personTable.setSizeFull(); // personTable.setSelectable(true); /* personTable.addListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { if (event.isDoubleClick()) { personTable.select(event.getItemId()); } } }); */ //OK personTable.setVisibleColumns( new Object[] { "firstName", "lastName", "department", "phoneNumber", "street", "city", "zipCode" }); HorizontalLayout toolbar = new HorizontalLayout(); newButton = new Button("Add"); newButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { //Tworzony jest nowy obiekt opakowany w BeanItem, ktory umozliwa jego polaczenie z FORM final BeanItem<Person> newPersonItem = new BeanItem<Person>(new Person()); PersonEditor personEditor = new PersonEditor(newPersonItem); personEditor.addListener(new EditorSavedListener() { @Override public void editorSaved(EditorSavedEvent event) { persons.addEntity(newPersonItem.getBean()); } }); UI.getCurrent().addWindow(personEditor); //Dodanie okienka do dodania adresu } }); deleteButton = new Button("Delete"); deleteButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { persons.removeItem(personTable.getValue()); } }); deleteButton.setEnabled(false); editButton = new Button("Edit"); editButton.addClickListener(new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { UI.getCurrent().addWindow(new PersonEditor(personTable.getItem(personTable.getValue()))); } }); editButton.setEnabled(false); searchField = new TextField(); searchField.setInputPrompt("Search by name"); searchField.addTextChangeListener(new TextChangeListener() { @Override public void textChange(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); verticalLayout.addComponent(toolbar); verticalLayout.addComponent(personTable); verticalLayout.setExpandRatio(personTable, 1); verticalLayout.setSizeFull(); } private void buildTree() { groupTree = new Tree(null, departments); groupTree.setItemCaptionPropertyId("name"); groupTree.setImmediate(true); groupTree.setSelectable(true); groupTree.addListener(new Property.ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { Object id = event.getProperty().getValue(); if (id != null) { Department entity = departments.getItem(id).getEntity(); departmentFilter = entity; } else if (departmentFilter != null) { departmentFilter = null; } updateFilters(); } }); setFirstComponent(groupTree); } 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(); } }