I went ahead and made this change - if we think there is still some value in 
maintaining FilteredList, maybe we can resurrect it in the "extras" project or 
something.

On Aug 27, 2010, at 2:40 PM, Greg Brown wrote:

> Now that I look at FilteredList again, I have to wonder if it is worth 
> keeping. There's a lot of code there and, realistically, not that much value. 
> Also, I believe it is the only remaining class that still has the potential 
> for memory leaks if you forget to clear the source property (we have gotten 
> rid of all the others or re-implemented them such that this isn't a problem).
> 
> I think I might advocate eliminating this class for Pivot 2.0.
> 
> G
> 
> On Aug 25, 2010, at 8:22 AM, Greg Brown wrote:
> 
>> Hi Michael,
>> Can you submit your patch via JIRA? This sounds like a bug, so you can 
>> simply file it as such.
>> Thanks!
>> Greg
>> 
>> On Aug 24, 2010, at 8:01 PM, Michael Allman wrote:
>> 
>>> There appears to be some inconsistency in FilteredList with how it behaves 
>>> when the filter is null.  I think if the filter is null, the list is 
>>> supposed to show all values.  In that case, the filter logic in the add() 
>>> and insert() methods is incorrect.  Rather than checking
>>> 
>>> filter != null && filter.include(item)
>>> 
>>> it should be checking
>>> 
>>> filter == null || filter.include(item)
>>> 
>>> 
>>> Also, the itemUpdated() method in the listListener field sometimes adds 
>>> items to the list which are already there.  The problem seems to be in the 
>>> following if block
>>> 
>>> 
>>> if (comparator == null) {
>>>  // Add the item to the view
>>>  viewIndex = view.add(item);
>>>  listListeners.itemInserted(FilteredList.this, viewIndex);
>>> }
>>> 
>>> 
>>> I modified the if statement to make a correction, but I'm not sure my patch 
>>> is correct.  Here's what I replaced the if statement with
>>> 
>>> // Update the item in the view
>>> int previousViewIndex = view.indexOf(item);
>>> 
>>> if (previousViewIndex == viewIndex) {
>>>  // Update the item in the view
>>>  view.update(viewIndex, item);
>>> } else {
>>>  // Remove the item from the view
>>>  Sequence<T> removed = view.remove(previousViewIndex, 1);
>>>  listListeners.itemsRemoved(FilteredList.this, previousViewIndex, removed);
>>> 
>>>  // Re-add the item to the view
>>>  viewIndex = view.add(item);
>>>  listListeners.itemInserted(FilteredList.this, viewIndex);
>>> }
>>> 
>>> 
>>> Again, I'm not sure this is correct but it seems to have resolved the issue 
>>> I was having with duplicate items being added to the list.
>>> 
>>> Cheers,
>>> 
>>> Michael
>> 
> 

Reply via email to