From: Artur Signell Date: Tue, 19 May 2015 16:47:43 +0000 (+0300) Subject: Return components in merged header/footer cells only once (#17904) X-Git-Tag: 7.5.0.beta2~24 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c778f5b859b05f8c9c89322147b4f78b3454d493;p=vaadin-framework.git Return components in merged header/footer cells only once (#17904) Change-Id: I763ff330f20e50c43d352524058fa8993401bf43 --- diff --git a/server/src/com/vaadin/ui/Grid.java b/server/src/com/vaadin/ui/Grid.java index 282711aa92..902098e8d0 100644 --- a/server/src/com/vaadin/ui/Grid.java +++ b/server/src/com/vaadin/ui/Grid.java @@ -5371,7 +5371,9 @@ public class Grid extends AbstractComponent implements SelectionNotifier, @Override public Iterator iterator() { - List componentList = new ArrayList(); + // This is a hash set to avoid adding header/footer components inside + // merged cells multiple times + LinkedHashSet componentList = new LinkedHashSet(); Header header = getHeader(); for (int i = 0; i < header.getRowCount(); ++i) { diff --git a/server/tests/src/com/vaadin/tests/server/component/grid/GridChildren.java b/server/tests/src/com/vaadin/tests/server/component/grid/GridChildren.java new file mode 100644 index 0000000000..7af1cfef69 --- /dev/null +++ b/server/tests/src/com/vaadin/tests/server/component/grid/GridChildren.java @@ -0,0 +1,59 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.server.component.grid; + +import java.util.Iterator; + +import org.junit.Assert; +import org.junit.Test; + +import com.vaadin.ui.Component; +import com.vaadin.ui.Grid; +import com.vaadin.ui.Grid.FooterCell; +import com.vaadin.ui.Grid.HeaderCell; +import com.vaadin.ui.Label; + +public class GridChildren { + + @Test + public void componentsInMergedHeader() { + Grid grid = new Grid(); + grid.addColumn("foo"); + grid.addColumn("bar"); + grid.addColumn("baz"); + HeaderCell merged = grid.getDefaultHeaderRow() + .join("foo", "bar", "baz"); + Label label = new Label(); + merged.setComponent(label); + Iterator i = grid.iterator(); + Assert.assertEquals(label, i.next()); + Assert.assertFalse(i.hasNext()); + } + + @Test + public void componentsInMergedFooter() { + Grid grid = new Grid(); + grid.addColumn("foo"); + grid.addColumn("bar"); + grid.addColumn("baz"); + FooterCell merged = grid.addFooterRowAt(0).join("foo", "bar", "baz"); + Label label = new Label(); + merged.setComponent(label); + Iterator i = grid.iterator(); + Assert.assertEquals(label, i.next()); + Assert.assertFalse(i.hasNext()); + } +}