]> source.dussan.org Git - vaadin-framework.git/commitdiff
#2808 merged to 6.0: IndexedContainer.indexOfId() fix and an interactive test class
authorHenri Sara <henri.sara@itmill.com>
Wed, 1 Apr 2009 11:43:35 +0000 (11:43 +0000)
committerHenri Sara <henri.sara@itmill.com>
Wed, 1 Apr 2009 11:43:35 +0000 (11:43 +0000)
svn changeset:7266/svn branch:6.0

src/com/itmill/toolkit/data/util/IndexedContainer.java
src/com/itmill/toolkit/tests/containers/IndexedContainerFilteringTest.java [new file with mode: 0644]

index 27af4f5178e9350190d263cead44985c6e5caf16..0ad853c19b2da5190cdcd068298d3707defeea02 100644 (file)
@@ -16,6 +16,7 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.NoSuchElementException;
 
 import com.itmill.toolkit.data.Container;
@@ -461,13 +462,10 @@ public class IndexedContainer implements Container.Indexed,
      */
     public Object nextItemId(Object itemId) {
         if (filteredItemIds != null) {
-            if (!filteredItemIds.contains(itemId)) {
+            if (itemId == null || !filteredItemIds.contains(itemId)) {
                 return null;
             }
             final Iterator i = filteredItemIds.iterator();
-            if (itemId == null) {
-                return null;
-            }
             while (i.hasNext() && !itemId.equals(i.next())) {
                 ;
             }
@@ -629,15 +627,15 @@ public class IndexedContainer implements Container.Indexed,
             if (itemId == null) {
                 return -1;
             }
-            try {
-                for (final Iterator i = filteredItemIds.iterator(); itemId
-                        .equals(i.next());) {
-                    index++;
+            final Iterator i = filteredItemIds.iterator();
+            while (i.hasNext()) {
+                Object id = i.next();
+                if (itemId.equals(id)) {
+                    return index;
                 }
-                return index;
-            } catch (final NoSuchElementException e) {
-                return -1;
+                index++;
             }
+            return -1;
         }
         return itemIds.indexOf(itemId);
     }
@@ -655,6 +653,7 @@ public class IndexedContainer implements Container.Indexed,
             return null;
         }
 
+        // TODO should add based on a filtered index!
         // Adds the Item to container
         itemIds.add(index, newItemId);
         Hashtable t = new Hashtable();
@@ -1363,8 +1362,8 @@ public class IndexedContainer implements Container.Indexed,
     public synchronized void sort(Object[] propertyId, boolean[] ascending) {
 
         // Removes any non-sortable property ids
-        final ArrayList ids = new ArrayList();
-        final ArrayList orders = new ArrayList();
+        final List ids = new ArrayList();
+        final List<Boolean> orders = new ArrayList<Boolean>();
         final Collection sortable = getSortableContainerPropertyIds();
         for (int i = 0; i < propertyId.length; i++) {
             if (sortable.contains(propertyId[i])) {
@@ -1380,7 +1379,7 @@ public class IndexedContainer implements Container.Indexed,
         sortPropertyId = ids.toArray();
         sortDirection = new boolean[orders.size()];
         for (int i = 0; i < sortDirection.length; i++) {
-            sortDirection[i] = ((Boolean) orders.get(i)).booleanValue();
+            sortDirection[i] = (orders.get(i)).booleanValue();
         }
 
         // Sort
diff --git a/src/com/itmill/toolkit/tests/containers/IndexedContainerFilteringTest.java b/src/com/itmill/toolkit/tests/containers/IndexedContainerFilteringTest.java
new file mode 100644 (file)
index 0000000..00cb1e3
--- /dev/null
@@ -0,0 +1,139 @@
+package com.itmill.toolkit.tests.containers;\r
+\r
+import com.itmill.toolkit.data.Item;\r
+import com.itmill.toolkit.data.util.IndexedContainer;\r
+import com.itmill.toolkit.terminal.Sizeable;\r
+import com.itmill.toolkit.tests.components.TestBase;\r
+import com.itmill.toolkit.ui.Button;\r
+import com.itmill.toolkit.ui.CheckBox;\r
+import com.itmill.toolkit.ui.Label;\r
+import com.itmill.toolkit.ui.Table;\r
+import com.itmill.toolkit.ui.TextField;\r
+import com.itmill.toolkit.ui.VerticalLayout;\r
+import com.itmill.toolkit.ui.Button.ClickEvent;\r
+\r
+public class IndexedContainerFilteringTest extends TestBase {\r
+\r
+    private Table table;\r
+    private IndexedContainer container;\r
+    private TextField filterString;\r
+    private TextField position;\r
+    private int nextToAdd = 1;\r
+    private Label nextLabel;\r
+\r
+    @Override\r
+    protected String getDescription() {\r
+        return "Adding items to a filtered IndexedContainer inserts the items at the wrong location.";\r
+    }\r
+\r
+    @Override\r
+    protected Integer getTicketNumber() {\r
+        return new Integer(2809);\r
+    }\r
+\r
+    @Override\r
+    protected void setup() {\r
+        table = new Table();\r
+        container = (IndexedContainer) table.getContainerDataSource();\r
+\r
+        table.setWidth(300, Sizeable.UNITS_PIXELS);\r
+        table.setSelectable(true);\r
+        table.setMultiSelect(false);\r
+        table.addContainerProperty("column1", String.class, "test");\r
+\r
+        for (int i = 0; i < 25; ++i) {\r
+            table.addItem(new Object[] { "Item " + i }, "Item " + i);\r
+        }\r
+\r
+        VerticalLayout vl = new VerticalLayout();\r
+\r
+        // activate & deactivate filtering\r
+        filterString = new TextField("Filter string:", "1");\r
+        vl.addComponent(filterString);\r
+\r
+        final CheckBox cb = new CheckBox("Filter", new Button.ClickListener() {\r
+            public void buttonClick(ClickEvent event) {\r
+                container.removeAllContainerFilters();\r
+                if (((CheckBox) event.getSource()).booleanValue()) {\r
+                    container.addContainerFilter("column1", filterString\r
+                            .getValue().toString(), false, false);\r
+                }\r
+            }\r
+        });\r
+        cb.setImmediate(true);\r
+        vl.addComponent(cb);\r
+\r
+        nextLabel = new Label();\r
+        nextLabel.setCaption("Next id: " + nextToAdd);\r
+        vl.addComponent(nextLabel);\r
+\r
+        // addItemAt(idx), addItemAfter(selection), addItem()\r
+\r
+        final Button addItemButton = new Button("addItem()",\r
+                new Button.ClickListener() {\r
+                    public void buttonClick(ClickEvent event) {\r
+                        Item item = container.addItem("addItem() " + nextToAdd);\r
+                        if (item != null) {\r
+                            item.getItemProperty("column1").setValue(\r
+                                    "addItem() " + nextToAdd);\r
+                        }\r
+                        nextToAdd++;\r
+                        nextLabel.setCaption("Next id: " + nextToAdd);\r
+                    }\r
+                });\r
+        addItemButton.setImmediate(true);\r
+        vl.addComponent(addItemButton);\r
+\r
+        final Button addItemAfterButton = new Button("addItemAfter()",\r
+                new Button.ClickListener() {\r
+                    public void buttonClick(ClickEvent event) {\r
+                        Object selection = table.getValue();\r
+                        if (selection == null) {\r
+                            return;\r
+                        }\r
+                        String id = "addItemAfter() " + nextToAdd;\r
+                        Item item = container.addItemAfter(selection, id);\r
+                        if (item != null) {\r
+                            item.getItemProperty("column1").setValue(id);\r
+                            table.setValue(id);\r
+                        } else {\r
+                            getMainWindow().showNotification(\r
+                                    "Adding item after " + selection\r
+                                            + " failed");\r
+                        }\r
+                        nextToAdd++;\r
+                        nextLabel.setCaption("Next id: " + nextToAdd);\r
+                    }\r
+                });\r
+        addItemAfterButton.setImmediate(true);\r
+        vl.addComponent(addItemAfterButton);\r
+\r
+        position = new TextField("Position:", "0");\r
+        vl.addComponent(position);\r
+\r
+        final Button addItemAtButton = new Button("addItemAt()",\r
+                new Button.ClickListener() {\r
+                    public void buttonClick(ClickEvent event) {\r
+                        int index = Integer.parseInt(position.getValue()\r
+                                .toString());\r
+                        String id = "addItemAt() " + nextToAdd;\r
+                        Item item = container.addItemAt(index, id);\r
+                        if (item != null) {\r
+                            item.getItemProperty("column1").setValue(id);\r
+                            table.setValue(id);\r
+                        } else {\r
+                            getMainWindow().showNotification(\r
+                                    "Adding item at index "\r
+                                            + position.getValue() + " failed");\r
+                        }\r
+                        nextToAdd++;\r
+                        nextLabel.setCaption("Next id: " + nextToAdd);\r
+                    }\r
+                });\r
+        addItemAtButton.setImmediate(true);\r
+        vl.addComponent(addItemAtButton);\r
+\r
+        getLayout().addComponent(table);\r
+        getLayout().addComponent(vl);\r
+    }\r
+}\r