FilteredList/SortedList

Martin Sladecek martin.sladecek at oracle.com
Wed Jan 9 01:01:09 PST 2013


On 01/08/2013 11:47 PM, Richard Bair wrote:
>>> TransformationList is not modifiable. We had a big discussion about this (together with Micheal Heinrichs) about 2 years ago a decided we have to make all TransformationList subclasses unmodifiable as otherwise it would break the List contract. We'd have to have special implementation of sort for the WrappedList.
>> Oh dear. That is a problem!
> I'd like a little more detail on this:
>
> 	- If the user attempts to add a row to a TransformationList or remove a row from the TransformationList or move rows on the TransformationList, you propose to throw an unmodifiable exception?
Yes, Transformation list should be clearly marked as unmodifiable in the 
javadoc. JDK8 will have annotations on types, I have to look if there's 
some Unmodifiable annotation for lists, maybe we can use that as well.

> 		- Note this impacts TableView, ListView, TreeView, and TreeTableView. Drag and drop cannot work (well) if a transformation list is used by any of these views (since they will not be able to drop items into the list in any case) -- at least, not out of the box. Developers will have to always manage this by hand.
Based on the last discussion, we'd either have to introduce special API 
for insertion or have TableView find the original list and add the item 
to the current position (by converting the index) or design the API 
differently, like some callback or something...

> 	- If the user adds an item to the source list, is the transformation list automatically updated?
Yes.
> 	- If the state on an item changes that was used in the transformation list predicate / comparator for filtering / sorting, is the filter / sort recalculated?
Now this depends on the original list. We have ObservableLists that also 
fire "update" notifications for the list items. The original list would 
have to fire such notifications, otherwise sorted/filtered wrapped would 
have no way to know that some item changed. I have a wrapper lists in a 
com.sun. package that fires this notifications in case the original list 
doesn't. Maybe we can make this one also public (or maybe it's also a 
good candidate for a new defender method).
> 	- If my filter is based on criteria which changes (such as text in a TextBox), can I update the TransformedList or does it have to be replaced? That is, are the filter criteria / sort criteria state on the TransformationList that can be modified?
Yes, you can update them. I wanted to add filtered(ObservableValue<? 
extends Predicate<? super E>>) and sorted(ObservableValue<? extends 
Comparator<? super E>>) for this cases. I've proposed them later in the 
discussion.

-Martin


More information about the openjfx-dev mailing list