diff options
author | Henri Sara <henri.sara@itmill.com> | 2011-03-03 11:04:47 +0000 |
---|---|---|
committer | Henri Sara <henri.sara@itmill.com> | 2011-03-03 11:04:47 +0000 |
commit | 23291fe0b7b28a7eddcf4fdd83da40586915cd0b (patch) | |
tree | d894432d547bb16cb7066ae2efc712e438e2f19f /src/com/vaadin/data/util | |
parent | 885ffd388b36e86dca68d2bb23b364994595065d (diff) | |
download | vaadin-framework-23291fe0b7b28a7eddcf4fdd83da40586915cd0b.tar.gz vaadin-framework-23291fe0b7b28a7eddcf4fdd83da40586915cd0b.zip |
#6572 Eliminate some extraneous container item set change notifications
svn changeset:17574/svn branch:6.6
Diffstat (limited to 'src/com/vaadin/data/util')
-rw-r--r-- | src/com/vaadin/data/util/AbstractBeanContainer.java | 11 | ||||
-rw-r--r-- | src/com/vaadin/data/util/IndexedContainer.java | 29 |
2 files changed, 29 insertions, 11 deletions
diff --git a/src/com/vaadin/data/util/AbstractBeanContainer.java b/src/com/vaadin/data/util/AbstractBeanContainer.java index c71bf565a5..dbd9cbc42c 100644 --- a/src/com/vaadin/data/util/AbstractBeanContainer.java +++ b/src/com/vaadin/data/util/AbstractBeanContainer.java @@ -260,6 +260,8 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends * @see com.vaadin.data.Container#removeAllItems() */ public boolean removeAllItems() { + int origSize = size(); + internalRemoveAllItems(); // detach listeners from all Items @@ -268,7 +270,9 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends } itemIdToItem.clear(); - fireItemSetChange(); + if (origSize != 0) { + fireItemSetChange(); + } return true; } @@ -314,6 +318,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends * @see com.vaadin.data.Container#removeItem(java.lang.Object) */ public boolean removeItem(Object itemId) { + int origSize = size(); Item item = getItem(itemId); if (internalRemoveItem(itemId)) { @@ -323,7 +328,9 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends // remove item itemIdToItem.remove(itemId); - fireItemSetChange(); + if (size() != origSize) { + fireItemSetChange(); + } return true; } else { diff --git a/src/com/vaadin/data/util/IndexedContainer.java b/src/com/vaadin/data/util/IndexedContainer.java index 79cad195b3..e1c8c87859 100644 --- a/src/com/vaadin/data/util/IndexedContainer.java +++ b/src/com/vaadin/data/util/IndexedContainer.java @@ -225,12 +225,16 @@ public class IndexedContainer extends * @see com.vaadin.data.Container#removeAllItems() */ public boolean removeAllItems() { + int origSize = size(); + internalRemoveAllItems(); items.clear(); - // Sends a change event - fireContentsChange(-1); + if (origSize != 0) { + // Sends a change event + fireContentsChange(-1); + } return true; } @@ -307,8 +311,11 @@ public class IndexedContainer extends if (itemId == null || items.remove(itemId) == null) { return false; } + int origSize = size(); if (internalRemoveItem(itemId)) { - fireContentsChange(-1); + if (size() != origSize) { + fireContentsChange(-1); + } return true; } else { @@ -1253,23 +1260,27 @@ public class IndexedContainer extends return false; } + // Reset filtered list - if (getFilteredItemIds() == null) { - setFilteredItemIds(new ListSet<Object>()); - } else { - getFilteredItemIds().clear(); + List<Object> originalFilteredItemIds = getFilteredItemIds(); + if (originalFilteredItemIds == null) { + originalFilteredItemIds = Collections.emptyList(); } + setFilteredItemIds(new ListSet<Object>()); // Filter + boolean equal = true; + Iterator<?> origIt = originalFilteredItemIds.iterator(); for (final Iterator<?> i = allItemIds.iterator(); i.hasNext();) { final Object id = i.next(); if (passesFilters(id)) { + // filtered list comes from the full list, can use == + equal = equal && origIt.hasNext() && origIt.next() == id; getFilteredItemIds().add(id); } } - return true; - + return !equal || origIt.hasNext(); } /** |