]> source.dussan.org Git - vaadin-framework.git/commitdiff
Update sortable columns on property set change (#13334)
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Fri, 26 Sep 2014 11:36:16 +0000 (14:36 +0300)
committerVaadin Code Review <review@vaadin.com>
Thu, 2 Oct 2014 05:31:26 +0000 (05:31 +0000)
Change-Id: I01e74825e5ba68fb3a5e6f68acf8ba7fbde97cf2

server/src/com/vaadin/ui/components/grid/Grid.java
uitest/src/com/vaadin/tests/components/grid/GridGeneratedProperties.java
uitest/src/com/vaadin/tests/components/grid/GridGeneratedPropertiesTest.java

index 03d21816b5cbffec86c89e2aa6930ff3433f378d..9170b712d0ee7a0b58a9e516e37b09cb9aff81c5 100644 (file)
@@ -26,6 +26,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import com.google.gwt.thirdparty.guava.common.collect.Sets;
 import com.google.gwt.thirdparty.guava.common.collect.Sets.SetView;
@@ -239,6 +240,16 @@ public class Grid extends AbstractComponent implements SelectionChangeNotifier,
             if (!columns.containsKey(frozenPropertyId)) {
                 setLastFrozenPropertyId(null);
             }
+
+            // Update sortable columns
+            if (event.getContainer() instanceof Sortable) {
+                Collection<?> sortableProperties = ((Sortable) event
+                        .getContainer()).getSortableContainerPropertyIds();
+                for (Entry<Object, GridColumn> columnEntry : columns.entrySet()) {
+                    columnEntry.getValue().setSortable(
+                            sortableProperties.contains(columnEntry.getKey()));
+                }
+            }
         }
     };
 
index 6f834bddf1776d8c7b8b4174d942040339187cb3..48342647a3384d1e5b5b0e9666bb4708f637e4b6 100644 (file)
@@ -106,6 +106,21 @@ public class GridGeneratedProperties extends AbstractTestUI {
                     public Class<String> getType() {
                         return String.class;
                     }
+                });
+        container.removeContainerProperty("bar");
+        container.addGeneratedProperty("baz",
+                new PropertyValueGenerator<Integer>() {
+
+                    @Override
+                    public Integer getValue(Item item, Object itemId,
+                            Object propertyId) {
+                        return (Integer) item.getItemProperty("bar").getValue();
+                    }
+
+                    @Override
+                    public Class<Integer> getType() {
+                        return Integer.class;
+                    }
 
                     @Override
                     public SortOrder[] getSortProperties(SortOrder order) {
@@ -113,7 +128,6 @@ public class GridGeneratedProperties extends AbstractTestUI {
                                 .toArray(new SortOrder[1]);
                     }
                 });
-        container.removeContainerProperty("bar");
 
         addComponent(filterButton);
     }
index 1a46736f9fdf04714d896a345788db7e35052179..de7fa40eab64f2d6c6d64b52fa6055787eaf6f44 100644 (file)
@@ -35,20 +35,35 @@ public class GridGeneratedPropertiesTest extends MultiBrowserTest {
     }
 
     @Test
-    public void testSortingGeneratedPropertyColumns() {
+    public void testUnsortableGeneratedProperty() {
         openTestURL();
         GridElement grid = $(GridElement.class).first();
+
+        // Overwritten foo property should not be sortable
         GridCellElement fooHeader = grid.getHeaderCell(0, 1);
         fooHeader.click();
-        assertTrue(fooHeader.getAttribute("class").contains("sort-asc"));
-        fooHeader.click();
-        assertTrue(fooHeader.getAttribute("class").contains("sort-desc"));
-        GridCellElement kmHeader = grid.getHeaderCell(0, 2);
-        kmHeader.click();
-        assertTrue(kmHeader.getAttribute("class").contains("sort-asc"));
-        assertFalse(fooHeader.getAttribute("class").contains("sort"));
-        grid.getHeaderCell(0, 3).click();
-        assertTrue(kmHeader.getAttribute("class").contains("sort-asc"));
-        assertFalse(fooHeader.getAttribute("class").contains("sort"));
+        assertFalse("Column foo was unexpectedly sorted.", fooHeader
+                .getAttribute("class").contains("sort"));
+
+        // Generated property miles is not sortable
+        GridCellElement milesHeader = grid.getHeaderCell(0, 3);
+        milesHeader.click();
+        assertFalse("Column miles was unexpectedly sorted.", milesHeader
+                .getAttribute("class").contains("sort"));
+    }
+
+    @Test
+    public void testSortableGeneratedProperty() {
+        openTestURL();
+        GridElement grid = $(GridElement.class).first();
+
+        // Generated property baz is sortable
+        GridCellElement bazHeader = grid.getHeaderCell(0, 4);
+        bazHeader.click();
+        assertTrue("Column baz was not sorted ascending", bazHeader
+                .getAttribute("class").contains("sort-asc"));
+        bazHeader.click();
+        assertTrue("Column baz was not sorted descending", bazHeader
+                .getAttribute("class").contains("sort-desc"));
     }
 }