package com.vaadin.tests.components;
import java.util.HashMap;
import java.util.Map;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.v7.data.Item;
import com.vaadin.v7.data.util.HierarchicalContainer;
import com.vaadin.v7.data.util.IndexedContainer;
import com.vaadin.v7.ui.Tree;
public class HierarchicalContainerSorting extends TestBase {
IndexedContainer hierarchicalContainer = new HierarchicalContainer();
IndexedContainer indexedContainer = new IndexedContainer();
@Override
public void setup() {
populateContainer(indexedContainer);
populateContainer(hierarchicalContainer);
sort(indexedContainer);
sort(hierarchicalContainer);
HorizontalLayout hl = new HorizontalLayout();
Tree tree1 = new Tree("Tree with IndexedContainer");
tree1.setContainerDataSource(indexedContainer);
tree1.setItemCaptionPropertyId("name");
hl.addComponent(tree1);
Tree tree2 = new Tree("Tree with HierarchicalContainer");
tree2.setContainerDataSource(hierarchicalContainer);
tree2.setItemCaptionPropertyId("name");
for (Object id : tree2.rootItemIds()) {
tree2.expandItemsRecursively(id);
}
hl.addComponent(tree2);
addComponent(hl);
}
private static void sort(IndexedContainer container) {
Object[] properties = new Object[1];
properties[0] = "name";
boolean[] ascending = new boolean[1];
ascending[0] = true;
container.sort(properties, ascending);
}
private static void populateContainer(IndexedContainer container) {
container.addContainerProperty("name", String.class, null);
addItem(container, "Games", null);
addItem(container, "Call of Duty", "Games");
addItem(container, "Might and Magic", "Games");
addItem(container, "Fallout", "Games");
addItem(container, "Red Alert", "Games");
addItem(container, "Cars", null);
addItem(container, "Toyota", "Cars");
addItem(container, "Volvo", "Cars");
addItem(container, "Audi", "Cars");
addItem(container, "Ford", "Cars");
addItem(container, "Natural languages", null);
addItem(container, "Swedish", "Natural languages");
addItem(container, "English", "Natural languages");
addItem(container, "Finnish", "Natural languages");
addItem(container, "Programming languages", null);
addItem(container, "C++", "Programming languages");
addItem(container, "PHP", "Programming languages");
addItem(container, "Java", "Programming languages");
addItem(container, "Python", "Programming languages");
}
private static int index = 0;
private static Map<String, Integer> nameToId = new HashMap<>();
public static void addItem(IndexedContainer container, String string,
String parent) {
nameToId.put(string, index);
Item item = container.addItem(index);
item.getItemProperty("name").setValue(string);
if (parent != null && container instanceof HierarchicalContainer) {
((HierarchicalContainer) container).setParent(index,
nameToId.get(parent));
}
index++;
}
@Override
protected String getDescription() {
return "The two trees contain the same data, one uses IndexedContainer, one uses HierarchicalContainer. Both should be sorted, both the root nodes and the children.";
}
@Override
protected Integer getTicketNumber() {
return 3095;
}
}