package com.vaadin.tests.components.tree; import java.util.Arrays; import java.util.List; import com.vaadin.annotations.Theme; import com.vaadin.annotations.Widgetset; import com.vaadin.data.HierarchyData; import com.vaadin.data.provider.InMemoryHierarchicalDataProvider; import com.vaadin.icons.VaadinIcons; import com.vaadin.server.ClassResource; import com.vaadin.server.ThemeResource; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUIWithLog; import com.vaadin.tests.data.bean.HierarchicalTestBean; import com.vaadin.ui.Component; import com.vaadin.ui.IconGenerator; import com.vaadin.ui.MenuBar; import com.vaadin.ui.MenuBar.MenuItem; import com.vaadin.ui.Tree; import com.vaadin.ui.VerticalLayout; @Theme("tests-valo-disabled-animations") @Widgetset("com.vaadin.DefaultWidgetSet") public class TreeBasicFeatures extends AbstractTestUIWithLog { private Tree<HierarchicalTestBean> tree; private InMemoryHierarchicalDataProvider<HierarchicalTestBean> inMemoryDataProvider; private IconGenerator<HierarchicalTestBean> iconGenerator = i -> { switch (i.getDepth()) { case 0: return new ThemeResource("../reindeer/common/icons/bullet.png"); case 1: return VaadinIcons.FLIGHT_TAKEOFF; case 2: return new ClassResource("/com/vaadin/tests/m.gif"); default: return null; } }; @Override protected void setup(VaadinRequest request) { VerticalLayout layout = new VerticalLayout(); tree = new Tree<>(); setupDataProvider(); tree.setDataProvider(inMemoryDataProvider); tree.addSelectionListener( e -> log("SelectionEvent: " + e.getAllSelectedItems())); tree.addExpandListener(e -> log("ExpandEvent: " + e.getExpandedItem())); tree.addCollapseListener( e -> log("ExpandEvent: " + e.getCollapsedItem())); layout.addComponents(createMenu(), tree); addComponent(layout); } private Component createMenu() { MenuBar menu = new MenuBar(); menu.setErrorHandler(error -> log("Exception occured, " + error.getThrowable().getClass().getName() + ": " + error.getThrowable().getMessage())); MenuItem componentMenu = menu.addItem("Component", null); createIconMenu(componentMenu.addItem("Icons", null)); createCaptionMenu(componentMenu.addItem("Captions", null)); return menu; } private void createCaptionMenu(MenuItem captionMenu) { captionMenu.addItem("String.valueOf", menu -> tree.setItemCaptionGenerator(String::valueOf)); captionMenu .addItem("Custom caption", menu -> tree.setItemCaptionGenerator(i -> "Id: " + i.getId() + ", Depth: " + i.getDepth() + ", Index: " + i.getIndex())); } private void createIconMenu(MenuItem iconMenu) { iconMenu.addItem("No icons", menu -> tree.setItemIconGenerator(t -> null)); iconMenu.addItem("By Depth", menu -> tree.setItemIconGenerator(iconGenerator)); } private void setupDataProvider() { HierarchyData<HierarchicalTestBean> data = new HierarchyData<>(); List<Integer> ints = Arrays.asList(0, 1, 2); ints.stream().forEach(index -> { HierarchicalTestBean bean = new HierarchicalTestBean(null, 0, index); data.addItem(null, bean); ints.stream().forEach(childIndex -> { HierarchicalTestBean childBean = new HierarchicalTestBean( bean.getId(), 1, childIndex); data.addItem(bean, childBean); ints.stream() .forEach(grandChildIndex -> data.addItem(childBean, new HierarchicalTestBean(childBean.getId(), 2, grandChildIndex))); }); }); inMemoryDataProvider = new InMemoryHierarchicalDataProvider<>(data); } }