/* * Copyright 2000-2013 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 com.vaadin.tests; import com.vaadin.event.Action; import com.vaadin.event.Action.Handler; import com.vaadin.ui.AbstractOrderedLayout; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.Panel; import com.vaadin.ui.Tree; import com.vaadin.ui.VerticalLayout; /** * Some test cases for trees. Events panel logs events that happen server side. * * @author Vaadin Ltd. */ public class TestForTrees extends CustomComponent implements Handler { private static final String[] firstnames = new String[] { "John", "Mary", "Joe", "Sarah", "Jeff", "Jane", "Peter", "Marc", "Josie", "Linus" }; private static final String[] lastnames = new String[] { "Torvalds", "Smith", "Jones", "Beck", "Sheridan", "Picard", "Hill", "Fielding", "Einstein" }; private final VerticalLayout main = new VerticalLayout(); private final Action[] actions = new Action[] { new Action("edit"), new Action("delete") }; private VerticalLayout al; private Tree contextTree; public TestForTrees() { setCompositionRoot(main); createNewView(); } public void createNewView() { main.removeAllComponents(); main.addComponent(new Label( "Some test cases for trees. Events panel logs events that happen server side.")); main.addComponent(new Button("commit")); Tree t; t = createTestTree(); t.setCaption("Default settings"); main.addComponent(createTestBench(t)); t = createTestTree(); t.setCaption("Multiselect settings"); t.setMultiSelect(true); main.addComponent(createTestBench(t)); t = createTestTree(); t.setCaption("Multiselect and immediate"); t.setImmediate(true); t.setMultiSelect(true); main.addComponent(createTestBench(t)); t = createTestTree(); t.setCaption("immediate"); t.setImmediate(true); main.addComponent(createTestBench(t)); t = createTestTree(); t.setCaption("with actions"); t.setImmediate(true); t.addActionHandler(this); final AbstractOrderedLayout ol = (AbstractOrderedLayout) createTestBench(t); al = new VerticalLayout(); al.setMargin(true); ol.addComponent(new Panel("action log", al)); main.addComponent(ol); contextTree = t; final Button b = new Button("refresh view", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { createNewView(); } }); main.addComponent(b); } public Tree createTestTree() { Tree t = new Tree("Tree"); final String[] names = new String[100]; for (int i = 0; i < names.length; i++) { names[i] = firstnames[(int) (Math.random() * (firstnames.length - 1))] + " " + lastnames[(int) (Math.random() * (lastnames.length - 1))]; } // Create tree t = new Tree("Organization Structure"); for (int i = 0; i < 100; i++) { t.addItem(names[i]); final String parent = names[(int) (Math.random() * (names.length - 1))]; if (t.containsId(parent)) { t.setParent(names[i], parent); } } // Forbid childless people to have children (makes them leaves) for (int i = 0; i < 100; i++) { if (!t.hasChildren(names[i])) { t.setChildrenAllowed(names[i], false); } } return t; } public Component createTestBench(Tree t) { final HorizontalLayout ol = new HorizontalLayout(); ol.addComponent(t); final VerticalLayout statusLayout = new VerticalLayout(); statusLayout.setMargin(true); final Panel status = new Panel("Events", statusLayout); final Button clear = new Button("c"); clear.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { statusLayout.removeAllComponents(); statusLayout.addComponent(clear); } }); statusLayout.addComponent(clear); status.setHeight("300px"); status.setWidth("400px"); ol.addComponent(status); t.addListener(new Listener() { @Override public void componentEvent(Event event) { statusLayout .addComponent(new Label(event.getClass().getName())); // TODO should not use Field.toString() statusLayout.addComponent(new Label("selected: " + event.getSource().toString())); } }); return ol; } @Override public Action[] getActions(Object target, Object sender) { return actions; } @Override public void handleAction(Action action, Object sender, Object target) { if (action == actions[1]) { al.addComponent(new Label("Delete selected on " + target)); contextTree.removeItem(target); } else { al.addComponent(new Label("Edit selected on " + target)); } } }