package com.vaadin.tests.components.treetable;
import com.vaadin.data.Container.Hierarchical;
import com.vaadin.data.util.HierarchicalContainer;
import com.vaadin.server.ExternalResource;
import com.vaadin.tests.components.TestBase;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Link;
import com.vaadin.ui.TreeTable;
public class ChangeDataSourcePageLengthZero extends TestBase {
@Override
public void setup() {
final TreeTable tt = new TreeTable();
tt.setSizeUndefined();
tt.setWidth("100%");
tt.setImmediate(true);
tt.setPageLength(0);
setupContainer(tt, 20);
addComponent(tt);
Button page1 = new Button("Set new data source (20 items)");
page1.addListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
setupContainer(tt, 20);
}
});
Button page2 = new Button("Set new data source (10 items)");
page2.addListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
setupContainer(tt, 10);
}
});
Button addButton = new Button("Add item");
addButton.addListener(new Button.ClickListener() {
private int i = 1;
@Override
public void buttonClick(ClickEvent event) {
HierarchicalContainer container = (HierarchicalContainer) tt
.getContainerDataSource();
Object itemId = container.addItem();
container.getContainerProperty(itemId, "i").setValue(i++);
container.getContainerProperty(itemId, "link").setValue(
new Link(String.valueOf(i + 1), new ExternalResource(
"http://www.google.fi")));
container.setChildrenAllowed(itemId, false);
container.setParent(itemId, null);
}
});
addComponent(page1);
addComponent(page2);
addComponent(addButton);
}
private static void setupContainer(TreeTable tt, int num) {
HierarchicalContainer container = new HierarchicalContainer();
container.addContainerProperty("i", Integer.class, null);
container.addContainerProperty("link", Link.class, null);
fillContainer(container, num);
tt.setContainerDataSource(container);
}
private static void fillContainer(Hierarchical container, int num) {
Object previous = null;
for (int i = 0; i < num; i++) {
Object item = container.addItem();
container.getContainerProperty(item, "i").setValue(i + 1);
container.getContainerProperty(item, "link").setValue(
new Link(String.valueOf(i + 1), new ExternalResource(
"http://www.google.fi")));
if (i > 0 && (i + 1) % 2 == 0) {
container.setChildrenAllowed(item, false);
container.setParent(item, previous);
} else {
container.setChildrenAllowed(item, true);
}
previous = item;
}
}
@Override
protected String getDescription() {
return "Changing the data source should update the height of a TreeTable with pagelength zero";
}
@Override
protected Integer getTicketNumber() {
return 7908;
}
}