]> source.dussan.org Git - vaadin-framework.git/commitdiff
Return short list instead of exception if less items available (#8028)
authorHenri Sara <hesara@vaadin.com>
Fri, 7 Sep 2012 08:07:57 +0000 (11:07 +0300)
committerHenri Sara <hesara@vaadin.com>
Fri, 7 Sep 2012 08:07:57 +0000 (11:07 +0300)
Container.Indexed.getItemIds(int, int) does not throw an exception if
too few items are available in the container.

server/src/com/vaadin/data/Container.java
server/src/com/vaadin/data/ContainerHelpers.java
server/src/com/vaadin/data/util/AbstractInMemoryContainer.java
server/tests/src/com/vaadin/data/util/TestIndexedContainer.java

index 28d6cad18d7651720f7971d44bfc24fde8d24433..47a0f9e7c82b2a1d15a84c72533db699316284a0 100644 (file)
@@ -503,17 +503,13 @@ public interface Container extends Serializable {
          * container, starting with the item id at <code>startIndex</code>. <br>
          * <br>
          * 
-         * Implementations should return the exact number of item ids given by
-         * <code>numberOfItems</code>. The returned list must hence contain all
-         * of the item ids from the range: <br>
+         * Implementations should return at most <code>numberOfItems</code> item
+         * ids, but can contain less if the container has less items than
+         * required to fulfill the request. The returned list must hence contain
+         * all of the item ids from the range: <br>
          * <br>
          * <code>startIndex</code> to
-         * <code>startIndex + (numberOfItems-1)</code>. <br>
-         * <br>
-         * 
-         * The returned list must contain all of the requested item ids or throw
-         * a {@link RangeOutOfContainerBoundsException} to indicate that the
-         * container does not contain all the requested item ids.<br>
+         * <code>max(startIndex + (numberOfItems-1), container.size()-1)</code>. <br>
          * <br>
          * For quick migration to new API see:
          * {@link ContainerHelpers#getItemIdsUsingGetIdByIndex(int, int, Indexed)}
@@ -521,8 +517,6 @@ public interface Container extends Serializable {
          * <br>
          * <b>Throws:</b> {@link IllegalArgumentException} if
          * <code>numberOfItems</code> is < 0 <br>
-         * <b>Throws:</b> {@link RangeOutOfContainerBoundsException} if all of
-         * the requested item ids cannot be fetched <br>
          * <b>Throws:</b> {@link IndexOutOfBoundsException} if
          * <code>startIndex</code> is outside the range of the container. (i.e.
          * <code>startIndex &lt; 0 || container.size()-1 &lt; startIndex</code>)
@@ -532,8 +526,8 @@ public interface Container extends Serializable {
          * @param numberOfItems
          *            the number of consecutive item ids to get from the given
          *            start index, must be >= 0
-         * @return List containing all of the requested item ids or empty list
-         *         if <code>numberOfItems</code> == 0; not null
+         * @return List containing the requested item ids or empty list if
+         *         <code>numberOfItems</code> == 0; not null
          * 
          * @since 7.0
          */
index 9ec2da4362c0e6f9ee052c32b1f792eabb147f88..866fe97141e3462d98ce63bf6a6fbf8af1fd4775 100644 (file)
@@ -64,11 +64,7 @@ public class ContainerHelpers {
         int endIndex = startIndex + numberOfIds;
 
         if (endIndex > container.size()) {
-            throw new RangeOutOfContainerBoundsException(
-                    "Cannot get all requested item ids from container. "
-                            + "Container size might have changed, recalculate numberOfIds "
-                            + "based on the actual container size!",
-                    startIndex, numberOfIds, container.size());
+            endIndex = container.size();
         }
 
         ArrayList<Object> rangeOfIds = new ArrayList<Object>();
index dbfcad39829fcd139ecc9879d10dd7e1af6b0d70..be8abe0c75a167aaa76eaef78094316852f6c39b 100644 (file)
@@ -26,7 +26,6 @@ import java.util.Set;
 import com.vaadin.data.Container;
 import com.vaadin.data.Container.ItemSetChangeNotifier;
 import com.vaadin.data.Item;
-import com.vaadin.data.RangeOutOfContainerBoundsException;
 import com.vaadin.data.util.filter.SimpleStringFilter;
 import com.vaadin.data.util.filter.UnsupportedFilterException;
 
@@ -278,11 +277,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
         int endIndex = startIndex + numberOfIds;
 
         if (endIndex > getVisibleItemIds().size()) {
-            throw new RangeOutOfContainerBoundsException(
-                    "Cannot get all requested item ids from container. "
-                            + "Container size might have changed, recalculate numberOfIds "
-                            + "based on the actual container size!",
-                    startIndex, numberOfIds, getVisibleItemIds().size());
+            endIndex = getVisibleItemIds().size();
         }
 
         return Collections.unmodifiableList(getVisibleItemIds().subList(
index da2e2feac712a5a292c9306a73be48c8c562a07f..20aadfcb8b4fa0cf7587db9693370790d22c135b 100644 (file)
@@ -2,8 +2,9 @@ package com.vaadin.data.util;
 
 import java.util.List;
 
+import junit.framework.Assert;
+
 import com.vaadin.data.Item;
-import com.vaadin.data.RangeOutOfContainerBoundsException;
 
 public class TestIndexedContainer extends AbstractInMemoryContainerTest {
 
@@ -342,22 +343,9 @@ public class TestIndexedContainer extends AbstractInMemoryContainerTest {
     public void testGetItemIdsRangeIndexOutOfBoundsDueToSizeChange() {
         IndexedContainer ic = new IndexedContainer();
         ic.addItem(new Object());
-        try {
-            ic.getItemIds(0, 10);
-            fail("Container returned items when the range was >> container size");
-        } catch (RangeOutOfContainerBoundsException e) {
-            // This is expected...
-            assertTrue(e.isAdditionalParametersSet());
-            assertEquals(0, e.getStartIndex());
-            assertEquals(10, e.getNumberOfIds());
-            assertEquals(1, e.getContainerCurrentSize());
-
-        } catch (IndexOutOfBoundsException e) {
-            fail("Container threw wrong exception when the range exceeded container size... ");
-        } catch (Exception e) {
-            // Should not happen!
-            fail("Container threw unspecified exception when fetching a range of items and the range started from -1");
-        }
+        Assert.assertEquals(
+                "Container returned too many items when the range was >> container size",
+                1, ic.getItemIds(0, 10).size());
     }
 
     // Ticket 8028