]> source.dussan.org Git - vaadin-framework.git/commitdiff
Make GeneratedPropertyItem addItem return null when appropriate (#18685)
authorArtur Signell <artur@vaadin.com>
Wed, 30 Dec 2015 06:13:26 +0000 (08:13 +0200)
committerArtur Signell <artur@vaadin.com>
Mon, 4 Jan 2016 11:17:00 +0000 (11:17 +0000)
Change-Id: I08f05bee9bf0c82f5767c63654046285c85f233a

server/src/com/vaadin/data/util/GeneratedPropertyContainer.java
server/tests/src/com/vaadin/data/util/AbstractContainerTestBase.java

index cea1e27ee943be81ee38152905904bd3e5181530..e0b2bb7c19606ec4c46c36a9baf6e54d6eb81506 100644 (file)
@@ -564,12 +564,18 @@ public class GeneratedPropertyContainer extends AbstractContainer implements
     public Item addItemAfter(Object previousItemId, Object newItemId)
             throws UnsupportedOperationException {
         Item item = wrappedContainer.addItemAfter(previousItemId, newItemId);
+        if (item == null) {
+            return null;
+        }
         return createGeneratedPropertyItem(newItemId, item);
     }
 
     @Override
     public Item addItem(Object itemId) throws UnsupportedOperationException {
         Item item = wrappedContainer.addItem(itemId);
+        if (item == null) {
+            return null;
+        }
         return createGeneratedPropertyItem(itemId, item);
     }
 
@@ -577,6 +583,9 @@ public class GeneratedPropertyContainer extends AbstractContainer implements
     public Item addItemAt(int index, Object newItemId)
             throws UnsupportedOperationException {
         Item item = wrappedContainer.addItemAt(index, newItemId);
+        if (item == null) {
+            return null;
+        }
         return createGeneratedPropertyItem(newItemId, item);
     }
 
index 55dccc64559f6c624984fffa40b1920836fcb478..52acc5ab76719225224ddc16e4d739470eee8826 100644 (file)
@@ -1,6 +1,7 @@
 package com.vaadin.data.util;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import junit.framework.TestCase;
@@ -164,6 +165,14 @@ public abstract class AbstractContainerTestBase extends TestCase {
                 sampleData.length);
 
         validateRemovingItems(container);
+        validateAddItem(container);
+        if (container instanceof Container.Indexed) {
+            validateAddItemAt((Container.Indexed) container);
+        }
+        if (container instanceof Container.Ordered) {
+            validateAddItemAfter((Container.Ordered) container);
+        }
+
     }
 
     protected void validateRemovingItems(Container container) {
@@ -186,6 +195,95 @@ public abstract class AbstractContainerTestBase extends TestCase {
         assertEquals(0, container.size());
     }
 
+    protected void validateAddItem(Container container) {
+        try {
+            container.removeAllItems();
+
+            Object id = container.addItem();
+            Assert.assertTrue(container.containsId(id));
+            Assert.assertNotNull(container.getItem(id));
+
+            Item item = container.addItem("foo");
+            Assert.assertNotNull(item);
+            Assert.assertTrue(container.containsId("foo"));
+            Assert.assertEquals(item, container.getItem("foo"));
+
+            // Add again
+            Item item2 = container.addItem("foo");
+            Assert.assertNull(item2);
+        } catch (UnsupportedOperationException e) {
+            // Ignore contains which do not support addItem*
+        }
+    }
+
+    protected void validateAddItemAt(Container.Indexed container) {
+        try {
+            container.removeAllItems();
+
+            Object id = container.addItemAt(0);
+            Assert.assertTrue(container.containsId(id));
+            Assert.assertEquals(id, container.getIdByIndex(0));
+            Assert.assertNotNull(container.getItem(id));
+
+            Item item = container.addItemAt(0, "foo");
+            Assert.assertNotNull(item);
+            Assert.assertTrue(container.containsId("foo"));
+            Assert.assertEquals(item, container.getItem("foo"));
+            Assert.assertEquals("foo", container.getIdByIndex(0));
+
+            Item itemAtEnd = container.addItemAt(2, "atend");
+            Assert.assertNotNull(itemAtEnd);
+            Assert.assertTrue(container.containsId("atend"));
+            Assert.assertEquals(itemAtEnd, container.getItem("atend"));
+            Assert.assertEquals("atend", container.getIdByIndex(2));
+
+            // Add again
+            Item item2 = container.addItemAt(0, "foo");
+            Assert.assertNull(item2);
+        } catch (UnsupportedOperationException e) {
+            // Ignore contains which do not support addItem*
+        }
+    }
+
+    protected void validateAddItemAfter(Container.Ordered container) {
+        if (container instanceof AbstractBeanContainer) {
+            // Doesn't work as bean container requires beans
+            return;
+        }
+        if (container instanceof ContainerOrderedWrapper) {
+            // Doesn't work because of #19427
+            return;
+        }
+
+        try {
+            container.removeAllItems();
+
+            Assert.assertNotNull(container.addItem(0));
+
+            Item item = container.addItemAfter(null, "foo");
+            Assert.assertNotNull(item);
+            Assert.assertTrue(container.containsId("foo"));
+            Assert.assertEquals(item, container.getItem("foo"));
+            Assert.assertEquals("foo", container.getItemIds().iterator().next());
+
+            Item itemAtEnd = container.addItemAfter(0, "atend");
+            Assert.assertNotNull(itemAtEnd);
+            Assert.assertTrue(container.containsId("atend"));
+            Assert.assertEquals(itemAtEnd, container.getItem("atend"));
+            Iterator<?> i = container.getItemIds().iterator();
+            i.next();
+            i.next();
+            Assert.assertEquals("atend", i.next());
+
+            // Add again
+            Assert.assertNull(container.addItemAfter(null, "foo"));
+            Assert.assertNull(container.addItemAfter("atend", "foo"));
+            Assert.assertNull(container.addItemAfter("nonexistant", "123123"));
+        } catch (UnsupportedOperationException e) {
+            // Ignore contains which do not support addItem*
+        }
+    }
+
     protected void testContainerOrdered(Container.Ordered container) {
         // addItem with empty container
         Object id = container.addItem();