com.levigo.util.base.glazedlists
Class CollectionList<S,E>

java.lang.Object
  extended by com.levigo.util.base.glazedlists.AbstractEventList<E>
      extended by com.levigo.util.base.glazedlists.TransformedList<S,E>
          extended by com.levigo.util.base.glazedlists.CollectionList<S,E>
All Implemented Interfaces:
ListEventListener<S>, EventList<E>, Iterable<E>, Collection<E>, EventListener, List<E>
Direct Known Subclasses:
CompositeList

public class CollectionList<S,E>
extends TransformedList<S,E>
implements ListEventListener<S>

A list that acts like a tree in that it contains child elements to nodes contained in another list. An example usage would be to wrap a parent list containing albums and use the CollectionList to display the songs on the album.

The actual mapping from the parent list to the child list (album to songs in the above example) is done by a CollectionList.Model that is provided to the constructor.

Note that any EventLists returned by the CollectionList.Model must use the same ListEventPublisher and ReadWriteLock as this CollectionList. This is necessary in order for CollectionList to operate correctly under mult-threaded conditions. An IllegalArgumentException will be raised if this invariant is violated.

Warning: This class is thread ready but not thread safe. See EventList for an example of thread safe code.

Overview
EventList Overview
Writable: only set(int,Object) and remove(int)
Concurrency: thread ready, not thread safe
Performance: reads: O(log N), writes O(log N)
Memory: 96 bytes per element
Unit Tests: N/A
Issues: 96 162 257 265

Author:
Rob Eden, Jesse Wilson
See Also:
CollectionList.Model

Nested Class Summary
static interface CollectionList.Model<E,S>
          Provides the logic to map a parent object (e.g.
 
Field Summary
 
Fields inherited from class com.levigo.util.base.glazedlists.TransformedList
source
 
Fields inherited from class com.levigo.util.base.glazedlists.AbstractEventList
publisher, readWriteLock, updates
 
Constructor Summary
CollectionList(EventList<S> source, CollectionList.Model<S,E> model)
          Create a CollectionList with its contents being the children of the elements in the specified source EventList.
 
Method Summary
 int childEndingIndex(int parentIndex)
          Return the index of the last child in the CollectionList for the given parent index.
 int childStartingIndex(int parentIndex)
          Return the index of the first child in the CollectionList for the given parent index.
 void dispose()
          Releases the resources consumed by this TransformedList so that it may eventually be garbage collected.
 E get(int index)
          Returns the element at the specified position in this list.
protected  boolean isWritable()
          Gets whether the source EventList is writable via this API.
 void listChanged(ListEvent<S> listChanges)
          Handle changes in the parent list.
 E remove(int index)
          Removes the element at the specified position in this list (optional operation).
 E set(int index, E value)
          Replaces the element at the specified position in this list with the specified element (optional operation).
 int size()
          Returns the number of elements in this list.
 
Methods inherited from class com.levigo.util.base.glazedlists.TransformedList
add, addAll, clear, getSourceIndex, removeAll, retainAll
 
Methods inherited from class com.levigo.util.base.glazedlists.AbstractEventList
add, addAll, addListEventListener, contains, containsAll, equals, getPublisher, getReadWriteLock, hashCode, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, remove, removeListEventListener, subList, toArray, toArray, toString
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CollectionList

public CollectionList(EventList<S> source,
                      CollectionList.Model<S,E> model)
Create a CollectionList with its contents being the children of the elements in the specified source EventList.

Parameters:
source - an EventList of Objects from each of which the model can extract child elements
model - the logic for extracting children from each source element
Method Detail

isWritable

protected boolean isWritable()
Description copied from class: TransformedList
Gets whether the source EventList is writable via this API.

Extending classes must override this method in order to make themselves writable.

Specified by:
isWritable in class TransformedList<S,E>
Returns:
false because we cannot support TransformedList.add(int, Object); though we do support set(int, Object) and remove(int)

size

public int size()
Returns the number of elements in this list. If this list contains more than Integer.MAX_VALUE elements, returns Integer.MAX_VALUE.

Specified by:
size in interface Collection<E>
Specified by:
size in interface List<E>
Overrides:
size in class TransformedList<S,E>
Returns:
the number of elements in this list.

get

public E get(int index)
Returns the element at the specified position in this list.

Specified by:
get in interface List<E>
Overrides:
get in class TransformedList<S,E>
Parameters:
index - index of element to return.
Returns:
the element at the specified position in this list.

set

public E set(int index,
             E value)
Replaces the element at the specified position in this list with the specified element (optional operation).

Specified by:
set in interface List<E>
Overrides:
set in class TransformedList<S,E>
Parameters:
index - index of element to replace.
value - element to be stored at the specified position.
Returns:
the element previously at the specified position.

remove

public E remove(int index)
Removes the element at the specified position in this list (optional operation). Shifts any subsequent elements to the left (subtracts one from their indices). Returns the element that was removed from the list.

Specified by:
remove in interface List<E>
Overrides:
remove in class TransformedList<S,E>
Parameters:
index - the index of the element to removed.
Returns:
the element previously at the specified position.

childStartingIndex

public int childStartingIndex(int parentIndex)
Return the index of the first child in the CollectionList for the given parent index. This can be very useful for things like selecting the children in a CollectionList when the parent is selected in another list.

See Also:
childEndingIndex(int)

childEndingIndex

public int childEndingIndex(int parentIndex)
Return the index of the last child in the CollectionList for the given parent index. This can be very useful for things like selecting the children in a CollectionList when the parent is selected in another list.

See Also:
childStartingIndex(int)

listChanged

public void listChanged(ListEvent<S> listChanges)
Handle changes in the parent list. We'll need to update our node list sizes.

Specified by:
listChanged in interface ListEventListener<S>
Specified by:
listChanged in class TransformedList<S,E>

dispose

public void dispose()
Releases the resources consumed by this TransformedList so that it may eventually be garbage collected.

A TransformedList will be garbage collected without a call to TransformedList.dispose(), but not before its source EventList is garbage collected. By calling TransformedList.dispose(), you allow the TransformedList to be garbage collected before its source EventList. This is necessary for situations where a TransformedList is short-lived but its source EventList is long-lived.

Warning: It is an error to call any method on a TransformedList after it has been disposed.

Specified by:
dispose in interface EventList<E>
Overrides:
dispose in class TransformedList<S,E>


Copyright © 1995-2020 levigo holding gmbh. All Rights Reserved.