package org.vaadin.jefferson.demo.addressbook.content; import org.vaadin.jefferson.Presentation; import org.vaadin.jefferson.View; import org.vaadin.jefferson.demo.addressbook.domain.SearchFilter; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.ui.Tree; public final class TreeView extends View<Tree> { public static final Object SHOW_ALL = "Show all"; public static final Object SEARCH = "Search"; private AddressBookView root; TreeView(AddressBookView root) { super("Tree", Tree.class); this.root = root; } @Override public Tree createFallback() { return new Tree(); } @Override protected Tree accept(Presentation presentation) { Tree rendition = super.accept(presentation); rendition.addItem(SHOW_ALL); rendition.addItem(SEARCH); rendition.setChildrenAllowed(SHOW_ALL, false); /* * We want items to be selectable but do not want the user to be able to * de-select an item. */ rendition.setSelectable(true); rendition.setNullSelectionAllowed(false); rendition.setImmediate(true); rendition.addListener(new ItemClickListener() { public void itemClick(ItemClickEvent event) { Object itemId = event.getItemId(); if (itemId != null) { if (TreeView.SHOW_ALL.equals(itemId)) { // clear previous filters root.getDataSource().removeAllContainerFilters(); root.showListView(); } else if (TreeView.SEARCH.equals(itemId)) { root.showSearchView(); } else if (itemId instanceof SearchFilter) { root.search((SearchFilter) itemId, false); } } } }); return rendition; } protected void addSearch(SearchFilter searchFilter) { Tree rendition = getRendition(); rendition.addItem(searchFilter); rendition.setParent(searchFilter, SEARCH); // mark the saved search as a leaf (cannot have children) rendition.setChildrenAllowed(searchFilter, false); // make sure "Search" is expanded rendition.expandItem(SEARCH); // select the saved search rendition.setValue(searchFilter); } }