package com.vaadin.tests.performance; import java.util.List; import java.util.Optional; import javax.servlet.annotation.WebServlet; import com.vaadin.annotations.VaadinServletConfiguration; import com.vaadin.server.VaadinRequest; import com.vaadin.server.VaadinServlet; import com.vaadin.tests.data.bean.Address; import com.vaadin.tests.data.bean.Person; import com.vaadin.v7.data.Item; import com.vaadin.v7.data.util.HierarchicalContainer; import com.vaadin.v7.ui.TreeTable; public class TreeTableMemory extends AbstractBeansMemoryTest<TreeTable> { public static final String PATH = "/tree-table-memory/"; @WebServlet(urlPatterns = PATH + "*", name = "TreeTableServlet", asyncSupported = true) @VaadinServletConfiguration(ui = TreeTableMemory.class, productionMode = false, widgetset = "com.vaadin.v7.Vaadin7WidgetSet") public static class Servlet extends VaadinServlet { } private boolean initiallyExpanded = false; @Override protected void init(VaadinRequest request) { if (request.getParameter("initiallyExpanded") != null) { initiallyExpanded = true; } super.init(request); } @Override protected TreeTable createComponent() { TreeTable treeTable = new TreeTable(); return treeTable; } @Override protected void setInMemoryContainer(TreeTable treeTable, List<Person> data) { HierarchicalContainer container = new HierarchicalContainer(); container.addContainerProperty("firstName", String.class, null); container.addContainerProperty("lastName", String.class, null); container.addContainerProperty("street", String.class, null); container.addContainerProperty("zip", String.class, null); container.addContainerProperty("city", String.class, null); treeTable.setContainerDataSource(container); if (data.size() != 0 && data.size() % 2 == 0) { createItem(0, container, data); treeTable.setCollapsed(0, false); int n = 0; while (2 * n + 2 < data.size()) { for (int i : new Integer[] { 1, 2 }) { createItem(2 * n + i, container, data); container.setParent(2 * n + i, n); if (initiallyExpanded) { treeTable.setCollapsed(2 * n + i, false); } } n++; } } else { for (int i = 0; i < data.size(); i++) { createItem(i, container, data); } } } private void createItem(int index, HierarchicalContainer container, List<Person> data) { Item item = container.addItem(index); item.getItemProperty("firstName") .setValue(data.get(index).getFirstName()); item.getItemProperty("lastName") .setValue(data.get(index).getLastName()); item.getItemProperty("street") .setValue(Optional.ofNullable(data.get(index).getAddress()) .map(Address::getStreetAddress).orElse(null)); item.getItemProperty("zip") .setValue(Optional.ofNullable(data.get(index).getAddress()) .map(Address::getPostalCode).map(Object::toString) .orElse("")); item.getItemProperty("city") .setValue(Optional.ofNullable(data.get(index).getAddress()) .map(Address::getCity).orElse(null)); } @Override protected void setBackendContainer(TreeTable component, List<Person> data) { throw new UnsupportedOperationException(); } }