package com.vaadin.tests.util; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import com.vaadin.v7.data.Container; import com.vaadin.v7.data.ContainerHelpers; import com.vaadin.v7.data.Item; import com.vaadin.v7.data.Property; import com.vaadin.v7.data.util.AbstractContainer; import com.vaadin.v7.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; } @Override public Property<?> getItemProperty(Object propertyId) { ObjectProperty<String> property = new ObjectProperty<>( containerPropertyIdDefaults.get(propertyId) + " (item " + itemId + ")"); return property; } @Override public Collection<?> getItemPropertyIds() { return getContainerPropertyIds(); } @Override @SuppressWarnings("rawtypes") public boolean addItemProperty(Object id, Property property) throws UnsupportedOperationException { throw new UnsupportedOperationException("Cannot add item property"); } @Override public boolean removeItemProperty(Object id) throws UnsupportedOperationException { throw new UnsupportedOperationException( "Cannot remove item property"); } } private int size = 1000; private Map<Object, Class<?>> containerPropertyIdTypes = new HashMap<>(); private Map<Object, Object> containerPropertyIdDefaults = new HashMap<>(); @Override public Object nextItemId(Object itemId) { Integer id = (Integer) itemId; if (id >= size() - 1) { return null; } return (id + 1); } @Override public Object prevItemId(Object itemId) { Integer id = (Integer) itemId; if (id <= 0) { return null; } return (id - 1); } @Override public Object firstItemId() { if (0 == size()) { return null; } return 0; } @Override public Object lastItemId() { if (0 == size()) { return null; } return (size() - 1); } @Override public boolean isFirstId(Object itemId) { if (null == itemId) { return false; } return itemId.equals(firstItemId()); } @Override public boolean isLastId(Object itemId) { if (null == itemId) { return false; } return itemId.equals(lastItemId()); } @Override public TestItem getItem(Object itemId) { if (!containsId(itemId)) { return null; } return new TestItem(itemId); } @Override 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); } @Override public Property<?> getContainerProperty(Object itemId, Object propertyId) { TestItem item = getItem(itemId); if (null == item) { return null; } return item.getItemProperty(propertyId); } @Override public int size() { return size; } @Override public boolean containsId(Object itemId) { if (!(itemId instanceof Integer)) { return false; } Integer id = (Integer) itemId; return (id >= 0 && id < (size() - 1)); } @Override public int indexOfId(Object itemId) { if (!containsId(itemId)) { return -1; } return (Integer) itemId; } @Override public Object getIdByIndex(int index) { return index; } public void setSize(int newSize) { size = newSize; } @Override public boolean removeAllItems() throws UnsupportedOperationException { setSize(0); return true; } @Override public Class<?> getType(Object propertyId) { return containerPropertyIdTypes.get(propertyId); } @Override public Collection<?> getContainerPropertyIds() { return containerPropertyIdTypes.keySet(); } @Override 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; } @Override public boolean removeContainerProperty(Object propertyId) throws UnsupportedOperationException { if (!containerPropertyIdTypes.containsKey(propertyId)) { return false; } containerPropertyIdTypes.remove(propertyId); containerPropertyIdDefaults.remove(propertyId); return true; } @Override public Item addItem(Object itemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } @Override public Object addItem() throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } @Override public boolean removeItem(Object itemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } @Override public Object addItemAt(int index) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } @Override public Item addItemAt(int index, Object newItemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } @Override public Object addItemAfter(Object previousItemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } @Override public Item addItemAfter(Object previousItemId, Object newItemId) throws UnsupportedOperationException { throw new UnsupportedOperationException("Not supported"); } }