package com.vaadin.tests.util; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import com.vaadin.data.Container; import com.vaadin.data.ContainerHelpers; import com.vaadin.data.Item; import com.vaadin.data.Property; import com.vaadin.data.util.AbstractContainer; import com.vaadin.data.util.ObjectProperty; public class LargeContainer extends AbstractContainer implements Container.Indexed { public class TestItem implements Item { private final Object itemId; public TestItem(Object itemId) { this.itemId = itemId; } public Property getItemProperty(Object propertyId) { ObjectProperty property = new ObjectProperty( containerPropertyIdDefaults.get(propertyId) + " (item " + itemId + ")"); return property; } public Collection getItemPropertyIds() { return getContainerPropertyIds(); } @SuppressWarnings("rawtypes") public boolean addItemProperty(Object id, Property property) throws UnsupportedOperationException { throw new UnsupportedOperationException("Cannot add item property"); } public boolean removeItemProperty(Object id) throws UnsupportedOperationException { throw new UnsupportedOperationException( "Cannot remove item property"); } } private int size = 1000; private Map> containerPropertyIdTypes = new HashMap>(); private Map containerPropertyIdDefaults = new HashMap(); public Object nextItemId(Object itemId) { Integer id = (Integer) itemId; if (id >= size() - 1) { return null; } return (id + 1); } public Object prevItemId(Object itemId) { Integer id = (Integer) itemId; if (id <= 0) { return null; } return (id - 1); } public Object firstItemId() { if (0 == size()) { return null; } return 0; } public Object lastItemId() { if (0 == size()) { return null; } return (size() - 1); } public boolean isFirstId(Object itemId) { if (null == itemId) { return false; } return itemId.equals(firstItemId()); } public boolean isLastId(Object itemId) { if (null == itemId) { return false; } return itemId.equals(lastItemId()); } public TestItem getItem(Object itemId) { if (!containsId(itemId)) { return null; } return new TestItem(itemId); } public Collection getItemIds() { return new RangeCollection(size()); } @Override public List getItemIds(int startIndex, int numberOfIds) { // TODO use a lazy list for better performance return ContainerHelpers.getItemIdsUsingGetIdByIndex(startIndex, numberOfIds, this); } public Property getContainerProperty(Object itemId, Object propertyId) { TestItem item = getItem(itemId); if (null == item) { return null; } return item.getItemProperty(propertyId); } public int size() { return size; } public boolean containsId(Object itemId) { if (!(itemId instanceof Integer)) { return false; } Integer id = (Integer) itemId; return (id >= 0 && id < (size() - 1)); } public int indexOfId(Object itemId) { if (!containsId(itemId)) { return -1; } return (Integer) itemId; } public Object getIdByIndex(int index) { return index; } public void setSize(int newSize) { size = newSize; } public boolean removeAllItems() throws UnsupportedOperationException { setSize(0); return true; } public Class getType(Object propertyId) { return containerPropertyIdTypes.get(propertyId); } public Collection getContainerPropertyIds() { return containerPropertyIdTypes.keySet(); } public boolean addContainerProperty(Object propertyId, Class type, Object defaultValue) throws UnsupportedOperationException { if (containerPropertyIdTypes.containsKey(propertyId) || null == type) { return false; } containerPropertyIdTypes.put(propertyId, type); containerPropertyIdDefaults.put(propertyId, defaultValue); return true; } public boolean removeContainerProperty(Object propertyId) throws UnsupportedOperationException { if (!containerPropertyIdTypes.containsKey(propertyId)) { return false; } containerPropertyIdTypes.remove(propertyId); containerPropertyIdDefaults.remove(propertyId); return true; } public Item addItem(Object itemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } public Object addItem() throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } public boolean removeItem(Object itemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } public Object addItemAt(int index) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } public Item addItemAt(int index, Object newItemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } public Object addItemAfter(Object previousItemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } public Item addItemAfter(Object previousItemId, Object newItemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } }