diff options
author | Artur Signell <artur.signell@itmill.com> | 2009-04-21 07:33:33 +0000 |
---|---|---|
committer | Artur Signell <artur.signell@itmill.com> | 2009-04-21 07:33:33 +0000 |
commit | 4a385e9b2e224466eda615c4aa3fbc322b86682f (patch) | |
tree | 15b2afc262d9ce39ea3d043c0add274e5bf919cf | |
parent | 01a17f302922bbdcd7ee83eca7670bd11685d5c8 (diff) | |
download | vaadin-framework-4a385e9b2e224466eda615c4aa3fbc322b86682f.tar.gz vaadin-framework-4a385e9b2e224466eda615c4aa3fbc322b86682f.zip |
Merged:
Fixed #2857 - Added checks for constructor arguments.
Added a simple test case for BeanItemContainer.
Changed BeanItemContainer to always return BeanItems instead of generic Items.
svn changeset:7468/svn branch:6.0
-rw-r--r-- | src/com/itmill/toolkit/data/util/BeanItemContainer.java | 44 | ||||
-rw-r--r-- | src/com/itmill/toolkit/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java | 75 |
2 files changed, 103 insertions, 16 deletions
diff --git a/src/com/itmill/toolkit/data/util/BeanItemContainer.java b/src/com/itmill/toolkit/data/util/BeanItemContainer.java index d4da324feb..aeb1e83c2d 100644 --- a/src/com/itmill/toolkit/data/util/BeanItemContainer.java +++ b/src/com/itmill/toolkit/data/util/BeanItemContainer.java @@ -16,7 +16,6 @@ import java.util.Map; import java.util.Set; import com.itmill.toolkit.data.Container; -import com.itmill.toolkit.data.Item; import com.itmill.toolkit.data.Property; import com.itmill.toolkit.data.Container.Filterable; import com.itmill.toolkit.data.Container.Indexed; @@ -65,23 +64,38 @@ public class BeanItemContainer<BT> implements Indexed, Sortable, Filterable, * * @param type * the class of beans to be used with this containers. + * @throws IllegalArgumentException + * If the type is null */ public BeanItemContainer(Class<BT> type) { + if (type == null) { + throw new IllegalArgumentException( + "The type passed to BeanItemContainer must not be null"); + } this.type = type; model = BeanItem.getPropertyDescriptors(type); } /** - * Constructs BeanItemContainer with given collection of beans in it. + * Constructs BeanItemContainer with given collection of beans in it. The + * collection must not be empty or an IllegalArgument is thrown. * - * @param list + * @param collection * non empty {@link Collection} of beans. + * @throws IllegalArgumentException + * If the collection is null or empty. */ - public BeanItemContainer(Collection<BT> list) { - type = (Class<BT>) list.iterator().next().getClass(); + public BeanItemContainer(Collection<BT> collection) + throws IllegalArgumentException { + if (collection == null || collection.isEmpty()) { + throw new IllegalArgumentException( + "The collection passed to BeanItemContainer must not be null or empty"); + } + + type = (Class<BT>) collection.iterator().next().getClass(); model = BeanItem.getPropertyDescriptors(type); int i = 0; - for (BT bt : list) { + for (BT bt : collection) { addItemAt(i++, bt); } } @@ -102,7 +116,7 @@ public class BeanItemContainer<BT> implements Indexed, Sortable, Filterable, * * @see com.itmill.toolkit.data.Container.Indexed#addItemAt(int, Object) */ - public Item addItemAt(int index, Object newItemId) + public BeanItem addItemAt(int index, Object newItemId) throws UnsupportedOperationException { if (index < 0 || index > size()) { return null; @@ -128,7 +142,7 @@ public class BeanItemContainer<BT> implements Indexed, Sortable, Filterable, * Id of the new item to be added. * @return Returns new item or null if the operation fails. */ - private Item addItemAtInternalIndex(int index, Object newItemId) { + private BeanItem addItemAtInternalIndex(int index, Object newItemId) { // Make sure that the Item has not been created yet if (allItems.contains(newItemId)) { return null; @@ -179,7 +193,7 @@ public class BeanItemContainer<BT> implements Indexed, Sortable, Filterable, * @see com.itmill.toolkit.data.Container.Ordered#addItemAfter(Object, * Object) */ - public Item addItemAfter(Object previousItemId, Object newItemId) + public BeanItem addItemAfter(Object previousItemId, Object newItemId) throws UnsupportedOperationException { // only add if the previous item is visible if (list.contains(previousItemId)) { @@ -256,7 +270,7 @@ public class BeanItemContainer<BT> implements Indexed, Sortable, Filterable, * * @see com.itmill.toolkit.data.Container#addItem(Object) */ - public Item addItem(Object itemId) throws UnsupportedOperationException { + public BeanItem addItem(Object itemId) throws UnsupportedOperationException { if (list.size() > 0) { // add immediately after last visible item int lastIndex = allItems.indexOf(lastItemId()); @@ -275,18 +289,16 @@ public class BeanItemContainer<BT> implements Indexed, Sortable, Filterable, return beanToItem.get(itemId).getItemProperty(propertyId); } - @SuppressWarnings("unchecked") - public Collection getContainerPropertyIds() { + public Collection<String> getContainerPropertyIds() { return model.keySet(); } - public Item getItem(Object itemId) { + public BeanItem getItem(Object itemId) { return beanToItem.get(itemId); } - @SuppressWarnings("unchecked") - public Collection getItemIds() { - return (Collection) list.clone(); + public Collection<BT> getItemIds() { + return (Collection<BT>) list.clone(); } public Class<?> getType(Object propertyId) { diff --git a/src/com/itmill/toolkit/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java b/src/com/itmill/toolkit/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java new file mode 100644 index 0000000000..b01197c759 --- /dev/null +++ b/src/com/itmill/toolkit/tests/components/beanitemcontainer/TestBeanItemContainerUsage.java @@ -0,0 +1,75 @@ +package com.itmill.toolkit.tests.components.beanitemcontainer; + +import java.util.ArrayList; +import java.util.List; + +import com.itmill.toolkit.data.util.BeanItemContainer; +import com.itmill.toolkit.tests.components.TestBase; +import com.itmill.toolkit.ui.Table; + +public class TestBeanItemContainerUsage extends TestBase { + + @Override + protected String getDescription() { + return "A test for the BeanItemContainer. The table should contain three persons and show their first and last names and their age."; + } + + @Override + protected Integer getTicketNumber() { + return 1061; + } + + @Override + protected void setup() { + Table t = new Table("Table containing Persons"); + t.setPageLength(5); + t.setWidth("100%"); + List<Person> persons = new ArrayList<Person>(); + persons.add(new Person("Jones", "Birchman", 35)); + persons.add(new Person("Marc", "Smith", 30)); + persons.add(new Person("Greg", "Sandman", 75)); + + BeanItemContainer<Person> bic = new BeanItemContainer<Person>(persons); + t.setContainerDataSource(bic); + + addComponent(t); + } + + public static class Person { + private String firstName; + private String lastName; + private int age; + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public Person(String firstName, String lastName, int age) { + super(); + this.firstName = firstName; + this.lastName = lastName; + this.age = age; + } + + } +} |