package com.vaadin.v7.tests.components.grid;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import com.vaadin.server.VaadinRequest;
import com.vaadin.tests.components.AbstractTestUI;
import com.vaadin.v7.data.Property;
import com.vaadin.v7.data.util.AbstractInMemoryContainer;
import com.vaadin.v7.data.util.BeanItem;
import com.vaadin.v7.ui.Grid;
public class GridMissingProperty extends AbstractTestUI {
@Override
protected void setup(VaadinRequest request) {
final Grid grid = new Grid();
final Folder folder = new Folder("Folder name");
final BeanItem<Entry> folderItem = new BeanItem<>(folder);
final File file = new File("File name", "10kB");
final BeanItem<Entry> fileItem = new BeanItem<>(file);
@SuppressWarnings("unchecked")
TestContainer container = new TestContainer(
Arrays.asList(folderItem, fileItem),
Arrays.asList("name", "size"));
grid.setContainerDataSource(container);
grid.setSelectionMode(Grid.SelectionMode.SINGLE);
grid.setEditorEnabled(true);
addComponent(grid);
}
@Override
protected String getTestDescription() {
return "Grid Editor should not throw exception even when items are missing properties.";
}
private class TestContainer
extends AbstractInMemoryContainer<Object, String, BeanItem> {
private final List<BeanItem<Entry>> items;
private final List<String> pids;
public TestContainer(List<BeanItem<Entry>> items, List<String> pids) {
this.items = items;
this.pids = pids;
}
@Override
protected List<Object> getAllItemIds() {
List<Object> ids = new ArrayList<>();
for (BeanItem<Entry> item : items) {
ids.add(item.getBean());
}
return ids;
}
@Override
protected BeanItem<Entry> getUnfilteredItem(Object itemId) {
for (BeanItem<Entry> item : items) {
if (item.getBean().equals(itemId)) {
return item;
}
}
return null;
}
@Override
public Collection<?> getContainerPropertyIds() {
return pids;
}
@Override
public Property getContainerProperty(Object itemId, Object propertyId) {
return getItem(itemId).getItemProperty(propertyId);
}
@Override
public Class<?> getType(Object propertyId) {
return String.class;
}
}
public class Entry {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Entry(String name) {
this.name = name;
}
}
public class Folder extends Entry {
public Folder(String name) {
super(name);
}
}
public class File extends Entry {
private String size;
public File(String name, String size) {
super(name);
this.size = size;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
}
}