diff options
author | Teemu Suo-Anttila <teemusa@vaadin.com> | 2015-01-23 15:52:43 +0200 |
---|---|---|
committer | Teemu Suo-Anttila <teemusa@vaadin.com> | 2015-01-26 09:43:52 +0200 |
commit | 4136d84671305e96358b50b0e6d6f996444bf9a7 (patch) | |
tree | 81939c359fcbf66912059d3a703f6f893c1d35bb | |
parent | c410fa7e85e0769369cee2cebd2cea538919af2b (diff) | |
download | vaadin-framework-4136d84671305e96358b50b0e6d6f996444bf9a7.tar.gz vaadin-framework-4136d84671305e96358b50b0e6d6f996444bf9a7.zip |
Fix Grid setting non-sortable column sortable (#16483)
Change-Id: I7986ceb6ab1900bd1d5269c78c2f6b2e23c46334
-rw-r--r-- | server/src/com/vaadin/ui/Grid.java | 19 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java | 9 |
2 files changed, 23 insertions, 5 deletions
diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index d77c6411ef..ab27a141b7 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -2154,11 +2154,20 @@ public class Grid extends AbstractComponent implements SelectionNotifier, public Column setSortable(boolean sortable) { checkColumnIsAttached(); - if (sortable && !(grid.datasource instanceof Sortable)) { - throw new IllegalStateException( - "Can't set column " - + toString() - + " sortable. The Container of Grid does not implement Sortable"); + if (sortable) { + if (!(grid.datasource instanceof Sortable)) { + throw new IllegalStateException( + "Can't set column " + + toString() + + " sortable. The Container of Grid does not implement Sortable"); + } else if (!((Sortable) grid.datasource) + .getSortableContainerPropertyIds().contains(propertyId)) { + throw new IllegalStateException( + "Can't set column " + + toString() + + " sortable. Container doesn't support sorting by property " + + propertyId); + } } state.sortable = sortable; diff --git a/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java b/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java index 4501fc8e39..5e96f4eeae 100644 --- a/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java +++ b/server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java @@ -57,6 +57,7 @@ public class GridColumns { for (int c = 0; c < 10; c++) { ds.addContainerProperty("column" + c, String.class, ""); } + ds.addContainerProperty("noSort", Object.class, null); grid = new Grid(ds); getStateMethod = Grid.class.getDeclaredMethod("getState"); @@ -233,6 +234,14 @@ public class GridColumns { grid.removeColumn("banana phone"); } + @Test(expected = IllegalStateException.class) + public void testSetNonSortableColumnSortable() { + Column noSortColumn = grid.getColumn("noSort"); + assertFalse("Object property column should not be sortable.", + noSortColumn.isSortable()); + noSortColumn.setSortable(true); + } + private GridColumnState getColumnState(Object propertyId) { String columnId = columnIdMapper.key(propertyId); for (GridColumnState columnState : state.columns) { |