From 614457a95d24ee7a307f5317d8a26c9876728a6c Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Fri, 12 Feb 2016 09:35:41 +0200 Subject: Fix Grid DetailsGenerator being removed on Container change (#19593) Change-Id: Ied328804260b1a7bb35093fca1d972735559cf41 --- server/src/com/vaadin/ui/Grid.java | 15 +++++++++++++-- .../server/component/grid/GridContainerTest.java | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index 0774afd582..06ab8d1581 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -312,7 +312,7 @@ public class Grid extends AbstractFocusable implements SelectionNotifier, * * @see #setDetailsGenerator(DetailsGenerator) */ - private DetailsGenerator detailsGenerator = DetailsGenerator.NULL; + private DetailsGenerator detailsGenerator; /** * This map represents all details that are currently visible on the @@ -334,7 +334,13 @@ public class Grid extends AbstractFocusable implements SelectionNotifier, private final Set openDetails = new HashSet(); public DetailComponentManager(Grid grid) { + this(grid, DetailsGenerator.NULL); + } + + public DetailComponentManager(Grid grid, + DetailsGenerator detailsGenerator) { super(grid); + setDetailsGenerator(detailsGenerator); } /** @@ -4914,7 +4920,12 @@ public class Grid extends AbstractFocusable implements SelectionNotifier, } } - detailComponentManager = new DetailComponentManager(this); + if (detailComponentManager != null) { + detailComponentManager = new DetailComponentManager(this, + detailComponentManager.getDetailsGenerator()); + } else { + detailComponentManager = new DetailComponentManager(this); + } /* * selectionModel == null when the invocation comes from the diff --git a/server/tests/src/com/vaadin/tests/server/component/grid/GridContainerTest.java b/server/tests/src/com/vaadin/tests/server/component/grid/GridContainerTest.java index 527568eac8..079487d01f 100644 --- a/server/tests/src/com/vaadin/tests/server/component/grid/GridContainerTest.java +++ b/server/tests/src/com/vaadin/tests/server/component/grid/GridContainerTest.java @@ -19,10 +19,32 @@ import org.junit.Assert; import org.junit.Test; import com.vaadin.data.util.IndexedContainer; +import com.vaadin.ui.Component; import com.vaadin.ui.Grid; +import com.vaadin.ui.Grid.DetailsGenerator; +import com.vaadin.ui.Grid.RowReference; +import com.vaadin.ui.Label; public class GridContainerTest { + @Test + public void testDetailsGeneratorDoesNotResetOnContainerChange() { + Grid grid = new Grid(); + DetailsGenerator detGen = new DetailsGenerator() { + + @Override + public Component getDetails(RowReference rowReference) { + return new Label("Empty details"); + } + }; + grid.setDetailsGenerator(detGen); + + grid.setContainerDataSource(createContainer()); + + Assert.assertEquals("DetailsGenerator changed", detGen, + grid.getDetailsGenerator()); + } + @Test public void testSetContainerTwice() throws Exception { -- cgit v1.2.3