From 3df4bbbe0199146286a2d00345116584e6daf886 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 6 Jun 2011 15:13:14 +0000 Subject: [PATCH] #7129 Properly clean up "filteredParent" when removing an item from a filtered container svn changeset:19245/svn branch:6.6 --- .../data/util/HierarchicalContainer.java | 8 ++++++++ .../container/TestHierarchicalContainer.java | 20 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/com/vaadin/data/util/HierarchicalContainer.java b/src/com/vaadin/data/util/HierarchicalContainer.java index d671dbc833..e208d07dc6 100644 --- a/src/com/vaadin/data/util/HierarchicalContainer.java +++ b/src/com/vaadin/data/util/HierarchicalContainer.java @@ -471,6 +471,9 @@ public class HierarchicalContainer extends IndexedContainer implements if (filteredChildren != null) { filteredChildren = null; } + if (filteredParent != null) { + filteredParent = null; + } } enableAndFireContentsChangeEvents(); return success; @@ -528,6 +531,11 @@ public class HierarchicalContainer extends IndexedContainer implements } } parent.remove(itemId); + if (filteredParent != null) { + // Item id no longer has a parent as the item id is not in the + // container. + filteredParent.remove(itemId); + } noChildrenAllowed.remove(itemId); } diff --git a/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java b/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java index 67ad4fe45f..12255ad835 100644 --- a/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java +++ b/tests/src/com/vaadin/tests/server/container/TestHierarchicalContainer.java @@ -29,6 +29,26 @@ public class TestHierarchicalContainer extends testContainerSortingAndFiltering(new HierarchicalContainer()); } + public void testRemovingItemsFromFilteredContainer() { + HierarchicalContainer container = new HierarchicalContainer(); + initializeContainer(container); + container.setIncludeParentsWhenFiltering(true); + container.addContainerFilter(FULLY_QUALIFIED_NAME, "ab", false, false); + Object p1 = container.getParent("com.vaadin.ui.TabSheet"); + assertEquals("com.vaadin.ui", p1); + + container.removeItem("com.vaadin.ui.TabSheet"); + // Parent for the removed item must be null because the item is no + // longer in the container + p1 = container.getParent("com.vaadin.ui.TabSheet"); + assertNull("Parent should be null, is " + p1, p1); + + container.removeAllItems(); + p1 = container.getParent("com.vaadin.terminal.gwt.client.Focusable"); + assertNull("Parent should be null, is " + p1, p1); + + } + public void testHierarchicalFilteringWithParents() { HierarchicalContainer container = new HierarchicalContainer(); initializeContainer(container); -- 2.39.5