diff options
author | Teemu Suo-Anttila <teemusa@vaadin.com> | 2014-09-26 14:36:16 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2014-10-02 05:31:26 +0000 |
commit | d1e1ecef82adc47882dc5fe3636bf48c8ed6dcc1 (patch) | |
tree | c9a9a89f8aa63162cbea24e2733361575c303e2b | |
parent | 5c5d98acb55ed2a12f2de4b43f518f60ab68b058 (diff) | |
download | vaadin-framework-d1e1ecef82adc47882dc5fe3636bf48c8ed6dcc1.tar.gz vaadin-framework-d1e1ecef82adc47882dc5fe3636bf48c8ed6dcc1.zip |
Update sortable columns on property set change (#13334)
Change-Id: I01e74825e5ba68fb3a5e6f68acf8ba7fbde97cf2
3 files changed, 52 insertions, 12 deletions
diff --git a/server/src/com/vaadin/ui/components/grid/Grid.java b/server/src/com/vaadin/ui/components/grid/Grid.java index 03d21816b5..9170b712d0 100644 --- a/server/src/com/vaadin/ui/components/grid/Grid.java +++ b/server/src/com/vaadin/ui/components/grid/Grid.java @@ -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())); + } + } } }; diff --git a/uitest/src/com/vaadin/tests/components/grid/GridGeneratedProperties.java b/uitest/src/com/vaadin/tests/components/grid/GridGeneratedProperties.java index 6f834bddf1..48342647a3 100644 --- a/uitest/src/com/vaadin/tests/components/grid/GridGeneratedProperties.java +++ b/uitest/src/com/vaadin/tests/components/grid/GridGeneratedProperties.java @@ -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); } diff --git a/uitest/src/com/vaadin/tests/components/grid/GridGeneratedPropertiesTest.java b/uitest/src/com/vaadin/tests/components/grid/GridGeneratedPropertiesTest.java index 1a46736f9f..de7fa40eab 100644 --- a/uitest/src/com/vaadin/tests/components/grid/GridGeneratedPropertiesTest.java +++ b/uitest/src/com/vaadin/tests/components/grid/GridGeneratedPropertiesTest.java @@ -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")); } } |