Browse Source

Fix Grid DetailsGenerator being removed on Container change (#19593)

Change-Id: Ied328804260b1a7bb35093fca1d972735559cf41
tags/7.7.0.alpha1
Teemu Suo-Anttila 8 years ago
parent
commit
614457a95d

+ 13
- 2
server/src/com/vaadin/ui/Grid.java View File

@@ -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<Object> openDetails = new HashSet<Object>();

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

+ 22
- 0
server/tests/src/com/vaadin/tests/server/component/grid/GridContainerTest.java View File

@@ -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 {


Loading…
Cancel
Save