summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/data/util
diff options
context:
space:
mode:
authorHenri Sara <henri.sara@itmill.com>2011-03-03 11:04:47 +0000
committerHenri Sara <henri.sara@itmill.com>2011-03-03 11:04:47 +0000
commit23291fe0b7b28a7eddcf4fdd83da40586915cd0b (patch)
treed894432d547bb16cb7066ae2efc712e438e2f19f /src/com/vaadin/data/util
parent885ffd388b36e86dca68d2bb23b364994595065d (diff)
downloadvaadin-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.java11
-rw-r--r--src/com/vaadin/data/util/IndexedContainer.java29
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();
}
/**