aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2015-01-23 15:52:43 +0200
committerTeemu Suo-Anttila <teemusa@vaadin.com>2015-01-26 09:43:52 +0200
commit4136d84671305e96358b50b0e6d6f996444bf9a7 (patch)
tree81939c359fcbf66912059d3a703f6f893c1d35bb
parentc410fa7e85e0769369cee2cebd2cea538919af2b (diff)
downloadvaadin-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.java19
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/grid/GridColumns.java9
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) {