diff options
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")); } } |