]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix Grid column adding to set column sortable correctly (#17446)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Mon, 13 Apr 2015 07:51:15 +0000 (10:51 +0300)
committerMarkus Koivisto <markus@vaadin.com>
Wed, 15 Apr 2015 08:59:03 +0000 (11:59 +0300)
Change-Id: I2cfc41f9fab39c387306e89fb18de75c413a7817

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

index ee7da1e36c2264e1a17d8a8122a5f20cb7ca711b..b8b5040b13b3aee9a520376c471ed9d87c6a7310 100644 (file)
@@ -31,7 +31,6 @@ import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -2840,13 +2839,15 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
                 setFrozenColumnCount(columns.size());
             }
 
-            // Update sortable columns
-            if (event.getContainer() instanceof Sortable) {
-                Collection<?> sortableProperties = ((Sortable) event
-                        .getContainer()).getSortableContainerPropertyIds();
-                for (Entry<Object, Column> columnEntry : columns.entrySet()) {
-                    columnEntry.getValue().setSortable(
-                            sortableProperties.contains(columnEntry.getKey()));
+            // Unset sortable for non-sortable columns.
+            if (datasource instanceof Sortable) {
+                Collection<?> sortables = ((Sortable) datasource)
+                        .getSortableContainerPropertyIds();
+                for (Object propertyId : columns.keySet()) {
+                    Column column = columns.get(propertyId);
+                    if (!sortables.contains(propertyId) && column.isSortable()) {
+                        column.setSortable(false);
+                    }
                 }
             }
         }
@@ -3507,6 +3508,12 @@ public class Grid extends AbstractComponent implements SelectionNotifier,
         column.setHeaderCaption(SharedUtil.propertyIdToHumanFriendly(String
                 .valueOf(datasourcePropertyId)));
 
+        if (datasource instanceof Sortable
+                && ((Sortable) datasource).getSortableContainerPropertyIds()
+                        .contains(datasourcePropertyId)) {
+            column.setSortable(true);
+        }
+
         return column;
     }
 
index fda662e4d9e9f6f59f0a47cb984b63b4d9659f3e..dbc8cfff3c6beb65abfb0e9e8a2486c7ef5c3158 100644 (file)
@@ -302,4 +302,13 @@ public class GridColumns {
         }
         return null;
     }
+
+    @Test
+    public void testAddAndRemoveSortableColumn() {
+        boolean sortable = grid.getColumn("column1").isSortable();
+        grid.removeColumn("column1");
+        grid.addColumn("column1");
+        assertEquals("Column sortability changed when re-adding", sortable,
+                grid.getColumn("column1").isSortable());
+    }
 }