diff options
author | Artur Signell <artur@vaadin.com> | 2015-05-19 19:47:43 +0300 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2015-05-20 08:37:53 +0000 |
commit | c778f5b859b05f8c9c89322147b4f78b3454d493 (patch) | |
tree | 5a7e45e9cab0ec411a2bef589b77413477677d32 /server | |
parent | 6834d65caec655b2d0c20ec599f9d90302d1e4a9 (diff) | |
download | vaadin-framework-c778f5b859b05f8c9c89322147b4f78b3454d493.tar.gz vaadin-framework-c778f5b859b05f8c9c89322147b4f78b3454d493.zip |
Return components in merged header/footer cells only once (#17904)
Change-Id: I763ff330f20e50c43d352524058fa8993401bf43
Diffstat (limited to 'server')
-rw-r--r-- | server/src/com/vaadin/ui/Grid.java | 4 | ||||
-rw-r--r-- | server/tests/src/com/vaadin/tests/server/component/grid/GridChildren.java | 59 |
2 files changed, 62 insertions, 1 deletions
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<Component> iterator() { - List<Component> componentList = new ArrayList<Component>(); + // This is a hash set to avoid adding header/footer components inside + // merged cells multiple times + LinkedHashSet<Component> componentList = new LinkedHashSet<Component>(); 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<Component> 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<Component> i = grid.iterator(); + Assert.assertEquals(label, i.next()); + Assert.assertFalse(i.hasNext()); + } +} |