Browse Source

Include components in joined cells when finding child components (#8772)

Fixes #8722
tags/8.1.0.alpha1
Artur 7 years ago
parent
commit
d1282e8734

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

@@ -97,7 +97,6 @@ import com.vaadin.ui.components.grid.DetailsGenerator;
import com.vaadin.ui.components.grid.Editor;
import com.vaadin.ui.components.grid.EditorImpl;
import com.vaadin.ui.components.grid.Footer;
import com.vaadin.ui.components.grid.FooterCell;
import com.vaadin.ui.components.grid.FooterRow;
import com.vaadin.ui.components.grid.GridSelectionModel;
import com.vaadin.ui.components.grid.Header;
@@ -2406,28 +2405,23 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
return column;
}

/**
* {@inheritDoc}
* <p>
* Note that the order of the returned components it not specified.
*/
@Override
public Iterator<Component> iterator() {
Set<Component> componentSet = new LinkedHashSet<>(extensionComponents);
Header header = getHeader();
for (int i = 0; i < header.getRowCount(); ++i) {
HeaderRow row = header.getRow(i);
getColumns().forEach(column -> {
HeaderCell cell = row.getCell(column);
if (cell.getCellType() == GridStaticCellType.WIDGET) {
componentSet.add(cell.getComponent());
}
});
componentSet.addAll(row.getComponents());
}
Footer footer = getFooter();
for (int i = 0; i < footer.getRowCount(); ++i) {
FooterRow row = footer.getRow(i);
getColumns().forEach(column -> {
FooterCell cell = row.getCell(column);
if (cell.getCellType() == GridStaticCellType.WIDGET) {
componentSet.add(cell.getComponent());
}
});
componentSet.addAll(row.getComponents());
}
return Collections.unmodifiableSet(componentSet).iterator();
}

+ 12
- 0
server/src/main/java/com/vaadin/ui/components/grid/FooterRow.java View File

@@ -16,8 +16,10 @@
package com.vaadin.ui.components.grid;

import java.io.Serializable;
import java.util.Collection;
import java.util.Set;

import com.vaadin.ui.Component;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Grid.Column;

@@ -130,4 +132,14 @@ public interface FooterRow extends Serializable {
* the style name to set or null to not use any style name
*/
public void setStyleName(String styleName);

/**
* Gets a collection of all components inside this row.
* <p>
* The order of the components in the returned collection is not specified.
*
* @return a collection of components in the row
*/
public Collection<? extends Component> getComponents();

}

+ 11
- 0
server/src/main/java/com/vaadin/ui/components/grid/HeaderRow.java View File

@@ -16,8 +16,10 @@
package com.vaadin.ui.components.grid;

import java.io.Serializable;
import java.util.Collection;
import java.util.Set;

import com.vaadin.ui.Component;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Grid.Column;

@@ -130,4 +132,13 @@ public interface HeaderRow extends Serializable {
* the style name to set or null to not use any style name
*/
public void setStyleName(String styleName);

/**
* Gets a collection of all components inside this row.
* <p>
* The order of the components in the returned collection is not specified.
*
* @return a collection of components in the row
*/
public Collection<? extends Component> getComponents();
}

+ 18
- 3
server/src/main/java/com/vaadin/ui/components/grid/StaticSection.java View File

@@ -17,6 +17,7 @@ package com.vaadin.ui.components.grid;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
@@ -405,6 +406,21 @@ public abstract class StaticSection<ROW extends StaticSection.StaticRow<?>>
void addMergedCell(CELL newCell, Set<String> columnGroup) {
rowState.cellGroups.put(newCell.getCellState(), columnGroup);
}

public Collection<? extends Component> getComponents() {
List<Component> components = new ArrayList<>();
cells.forEach((id, cell) -> {
if (cell.getCellType() == GridStaticCellType.WIDGET) {
components.add(cell.getComponent());
}
});
rowState.cellGroups.forEach((cellState, columnIds) -> {
if (cellState.connector != null) {
components.add((Component) cellState.connector);
}
});
return components;
}
}

/**
@@ -534,7 +550,7 @@ public abstract class StaticSection<ROW extends StaticSection.StaticRow<?>>
public GridStaticCellType getCellType() {
return cellState.type;
}
/**
* Returns the custom style name for this cell.
*
@@ -548,8 +564,7 @@ public abstract class StaticSection<ROW extends StaticSection.StaticRow<?>>
* Sets a custom style name for this cell.
*
* @param styleName
* the style name to set or null to not use any style
* name
* the style name to set or null to not use any style name
*/
public void setStyleName(String styleName) {
cellState.styleName = styleName;

compatibility-server/src/test/java/com/vaadin/v7/tests/server/component/grid/GridChildrenTest.java → server/src/test/java/com/vaadin/tests/server/component/grid/GridChildrenTest.java View File

@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.vaadin.v7.tests.server.component.grid;
package com.vaadin.tests.server.component.grid;

import java.util.Iterator;

@@ -21,22 +21,23 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import com.vaadin.tests.data.bean.Person;
import com.vaadin.ui.Component;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Label;
import com.vaadin.v7.ui.Grid;
import com.vaadin.v7.ui.Grid.FooterCell;
import com.vaadin.v7.ui.Grid.HeaderCell;
import com.vaadin.ui.components.grid.FooterCell;
import com.vaadin.ui.components.grid.HeaderCell;

public class GridChildrenTest {

private Grid grid;
private Grid<Person> grid;

@Before
public void createGrid() {
grid = new Grid();
grid.addColumn("foo");
grid.addColumn("bar");
grid.addColumn("baz");
grid = new Grid<>();
grid.addColumn(Person::getFirstName).setId("foo");
grid.addColumn(Person::getLastName).setId("bar");
grid.addColumn(Person::getEmail).setId("baz");

}

@@ -62,17 +63,6 @@ public class GridChildrenTest {
Assert.assertNull(label.getParent());
}

@Test
public void removeHeaderWithComponentInMergedHeaderCell() {
HeaderCell merged = grid.getDefaultHeaderRow().join("foo", "bar",
"baz");
Label label = new Label();
merged.setComponent(label);
Assert.assertEquals(grid, label.getParent());
grid.removeHeaderRow(0);
Assert.assertNull(label.getParent());
}

@Test
public void removeComponentInMergedFooterCell() {
FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz");
@@ -83,16 +73,6 @@ public class GridChildrenTest {
Assert.assertNull(label.getParent());
}

@Test
public void removeFooterWithComponentInMergedFooterCell() {
FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz");
Label label = new Label();
merged.setComponent(label);
Assert.assertEquals(grid, label.getParent());
grid.removeFooterRow(0);
Assert.assertNull(label.getParent());
}

@Test
public void componentsInMergedFooter() {
FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz");

Loading…
Cancel
Save