package com.vaadin.tests.components.treegrid; import java.util.ArrayList; import java.util.List; import com.vaadin.annotations.Theme; import com.vaadin.data.TreeData; import com.vaadin.data.provider.TreeDataProvider; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractTestUI; import com.vaadin.ui.Button; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TreeGrid; @Theme("valo") public class TreeGridBigDetailsManager extends AbstractTestUI { private TreeGrid treeGrid; private TreeDataProvider treeDataProvider; private List items = new ArrayList(); private void initializeDataProvider() { TreeData data = new TreeData<>(); for (int i = 0; i < 100; i++) { String root = "Root " + i; items.add(root); data.addItem(null, root); for (int j = 0; j < 10; j++) { String branch = "Branch " + i + "/" + j; items.add(branch); data.addItem(root, branch); for (int k = 0; k < 3; k++) { String leaf = "Leaf " + i + "/" + j + "/" + k; items.add(leaf); data.addItem(branch, leaf); } } } treeDataProvider = new TreeDataProvider<>(data); } @Override protected void setup(VaadinRequest request) { initializeDataProvider(); treeGrid = new TreeGrid<>(); treeGrid.setDataProvider(treeDataProvider); treeGrid.setSizeFull(); treeGrid.addColumn(String::toString).setCaption("String") .setId("string"); treeGrid.addColumn((i) -> items.indexOf(i)).setCaption("Index"); treeGrid.setHierarchyColumn("string"); treeGrid.setDetailsGenerator( row -> new Label("details for " + row.toString())); treeGrid.addItemClickListener(event -> { treeGrid.setDetailsVisible(event.getItem(), !treeGrid.isDetailsVisible(event.getItem())); }); Button showDetails = new Button("Show all details", event -> { for (String id : items) { treeGrid.setDetailsVisible(id, true); } }); showDetails.setId("showDetails"); Button hideDetails = new Button("Hide all details", event -> { for (String id : items) { treeGrid.setDetailsVisible(id, false); } }); hideDetails.setId("hideDetails"); Button expandAll = new Button("Expand all", event -> { treeGrid.expand(items); }); expandAll.setId("expandAll"); Button collapseAll = new Button("Collapse all", event -> { treeGrid.collapse(items); }); collapseAll.setId("collapseAll"); @SuppressWarnings("deprecation") Button scrollTo55 = new Button("Scroll to 55", event -> treeGrid.scrollTo(55)); scrollTo55.setId("scrollTo55"); scrollTo55.setVisible(false); Button scrollTo3055 = new Button("Scroll to 3055", event -> treeGrid.scrollTo(3055)); scrollTo3055.setId("scrollTo3055"); scrollTo3055.setVisible(false); Button scrollToEnd = new Button("Scroll to end", event -> treeGrid.scrollToEnd()); scrollToEnd.setId("scrollToEnd"); scrollToEnd.setVisible(false); Button scrollToStart = new Button("Scroll to start", event -> treeGrid.scrollToStart()); scrollToStart.setId("scrollToStart"); scrollToStart.setVisible(false); Button toggle15 = new Button("Toggle 15", event -> treeGrid.setDetailsVisible(items.get(15), !treeGrid.isDetailsVisible(items.get(15)))); toggle15.setId("toggle15"); toggle15.setVisible(false); Button toggle3000 = new Button("Toggle 3000", event -> treeGrid.setDetailsVisible(items.get(3000), !treeGrid.isDetailsVisible(items.get(3000)))); toggle3000.setId("toggle3000"); toggle3000.setVisible(false); Button addGrid = new Button("Add grid", event -> { addComponent(treeGrid); getLayout().setExpandRatio(treeGrid, 2); scrollTo55.setVisible(true); scrollTo3055.setVisible(true); scrollToEnd.setVisible(true); scrollToStart.setVisible(true); toggle15.setVisible(true); toggle3000.setVisible(true); }); addGrid.setId("addGrid"); addComponents( new HorizontalLayout(showDetails, hideDetails, expandAll, collapseAll), new HorizontalLayout(scrollTo55, scrollTo3055, scrollToEnd, scrollToStart), new HorizontalLayout(addGrid, toggle15, toggle3000)); getLayout().getParent().setHeight("100%"); getLayout().setHeight("100%"); treeGrid.setHeight("100%"); setHeight("100%"); } @Override protected String getTestDescription() { return "Expanding and collapsing with and without open details rows shouldn't cause exceptions. " + "Details row should be reopened upon expanding if it was open before collapsing."; } @Override protected Integer getTicketNumber() { return 11288; } }