]> source.dussan.org Git - vaadin-framework.git/commitdiff
Add a method for setting visible Grid columns (#17080)
authorMika Murtojarvi <mika@vaadin.com>
Tue, 21 Apr 2015 11:15:20 +0000 (14:15 +0300)
committerVaadin Code Review <review@vaadin.com>
Thu, 23 Apr 2015 11:14:01 +0000 (11:14 +0000)
Change-Id: I7ad63af87ae44021bf161d7eadc92ccf33bbd2bb

server/src/com/vaadin/ui/Grid.java
server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java

index a2487411c22697a41baa4941508f2a6752dec32c..22d6f009e47eb15748b4f8d0e56e5217897ade66 100644 (file)
@@ -3861,6 +3861,29 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
         removeExtension(column.getRenderer());
     }
 
+    /**
+     * Sets the columns and their order for the grid. Current columns whose
+     * property id is not in propertyIds are removed. Similarly, a column is
+     * added for any property id in propertyIds that has no corresponding column
+     * in this Grid.
+     * 
+     * @param propertyIds
+     *            properties in the desired column order
+     */
+    public void setColumns(Object... propertyIds) {
+        Set<?> removePids = new HashSet<Object>(columns.keySet());
+        removePids.removeAll(Arrays.asList(propertyIds));
+        for (Object removePid : removePids) {
+            removeColumn(removePid);
+        }
+        Set<?> addPids = new HashSet<Object>(Arrays.asList(propertyIds));
+        addPids.removeAll(columns.keySet());
+        for (Object propertyId : addPids) {
+            addColumn(propertyId);
+        }
+        setColumnOrder(propertyIds);
+    }
+
     /**
      * Sets a new column order for the grid. All columns which are not ordered
      * here will remain in the order they were before as the last columns of
index dbc8cfff3c6beb65abfb0e9e8a2486c7ef5c3158..35553bb406bccc185d1816379d7c80e75afc43b3 100644 (file)
@@ -25,6 +25,7 @@ import static org.junit.Assert.fail;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
@@ -311,4 +312,30 @@ public class GridColumns {
         assertEquals("Column sortability changed when re-adding", sortable,
                 grid.getColumn("column1").isSortable());
     }
+
+    @Test
+    public void testSetColumns() {
+        grid.setColumns("column7", "column0", "column9");
+        Iterator<Column> it = grid.getColumns().iterator();
+        assertEquals(it.next().getPropertyId(), "column7");
+        assertEquals(it.next().getPropertyId(), "column0");
+        assertEquals(it.next().getPropertyId(), "column9");
+        assertFalse(it.hasNext());
+    }
+
+    @Test
+    public void testAddingColumnsWithSetColumns() {
+        Grid g = new Grid();
+        g.setColumns("c1", "c2", "c3");
+        Iterator<Column> it = g.getColumns().iterator();
+        assertEquals(it.next().getPropertyId(), "c1");
+        assertEquals(it.next().getPropertyId(), "c2");
+        assertEquals(it.next().getPropertyId(), "c3");
+        assertFalse(it.hasNext());
+    }
+
+    @Test(expected = IllegalStateException.class)
+    public void testAddingColumnsWithSetColumnsNonDefaultContainer() {
+        grid.setColumns("column1", "column2", "column50");
+    }
 }