com.levigo.util.base.glazedlists
Class SequenceList<E>

java.lang.Object
  extended by com.levigo.util.base.glazedlists.AbstractEventList<E>
      extended by com.levigo.util.base.glazedlists.TransformedList<E,E>
          extended by com.levigo.util.base.glazedlists.SequenceList<E>
All Implemented Interfaces:
ListEventListener<E>, EventList<E>, Iterable<E>, Collection<E>, EventListener, List<E>, RandomAccess

public final class SequenceList<E>
extends TransformedList<E,E>
implements RandomAccess

A SequenceList contains values in adjacent indices which occur at predictable intervals from each other. A simple SequenceList could be:

 {
     -10, -5, 0, 5, 10, 15
 }
 
while a more sophisticated example could be:
 {Jun 1, Jul 1, Aug 1, Sep 1, Oct 1}
 
As long as the values can be ordered via a Comparator and a SequenceList.Sequencer can be implemented to reliably produce the next or previous value in a sequence using only some value from the source list.

SequenceList is a readonly list; calling any write method on this list will produce an UnsupportedOperationException.

The start and end values of the sequence are the smallest sequence values which maintain the invariant that: sequence start <= each value in the source list <= sequence end

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

Overview
EventList Overview
Writable: no
Concurrency: thread ready, not thread safe
Performance: reads: O(1)
Memory: O(N)
Unit Tests: SequenceListTest
Issues: N/A

Author:
James Lemieux

Nested Class Summary
static interface SequenceList.Sequencer<E>
          A Sequencer defines the logic required to calculate the previous and next sequence values given any value.
 
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
SequenceList(EventList<E> source, SequenceList.Sequencer<E> sequencer)
          Constructs a SequenceList containing a sequence of values produced by the sequencer which cover the range of values contained within the source.
SequenceList(EventList<E> source, SequenceList.Sequencer<E> sequencer, Comparator<? super E> comparator)
          Constructs a SequenceList containing a sequence of values produced by the sequencer which cover the range of values contained within the source.
 
Method Summary
 E get(int index)
          Returns the element at the specified position in this list.
 E getNextSequenceValue(E value)
          Returns the next value in the sequence defined by this list or value itself if it is a sequence value.
 E getPreviousSequenceValue(E value)
          Returns the previous value in the sequence defined by this list or value itself if it is a sequence value.
protected  boolean isWritable()
          Gets whether the source EventList is writable via this API.
 void listChanged(ListEvent<E> listChanges)
          When the underlying list changes, this notification allows the object to repaint itself or update itself as necessary.
 int size()
          Returns the number of elements in this list.
 
Methods inherited from class com.levigo.util.base.glazedlists.TransformedList
add, addAll, clear, dispose, getSourceIndex, remove, removeAll, retainAll, set
 
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

SequenceList

public SequenceList(EventList<E> source,
                    SequenceList.Sequencer<E> sequencer)
Constructs a SequenceList containing a sequence of values produced by the sequencer which cover the range of values contained within the source.

Parameters:
source - the raw values to build a sequence around
sequencer - the logic to produce sequence values relative to a value

SequenceList

public SequenceList(EventList<E> source,
                    SequenceList.Sequencer<E> sequencer,
                    Comparator<? super E> comparator)
Constructs a SequenceList containing a sequence of values produced by the sequencer which cover the range of values contained within the source. The given comparator determines the order of the sequence values.

Parameters:
source - the raw values to build a sequence around
sequencer - the logic to produce sequence values relative to a value
comparator - determines the order of the sequence values
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<E,E>
Returns:
false; SequenceList is readonly

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<E,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<E,E>
Parameters:
index - index of element to return.
Returns:
the element at the specified position in this list.

getPreviousSequenceValue

public E getPreviousSequenceValue(E value)
Returns the previous value in the sequence defined by this list or value itself if it is a sequence value.

Parameters:
value - the value relative to which the previous sequence value is returned
Returns:
the previous sequence value relative to the given value

getNextSequenceValue

public E getNextSequenceValue(E value)
Returns the next value in the sequence defined by this list or value itself if it is a sequence value.

Parameters:
value - the value relative to which the next sequence value is returned
Returns:
the next sequence value relative to the given value

listChanged

public void listChanged(ListEvent<E> listChanges)
When the underlying list changes, this notification allows the object to repaint itself or update itself as necessary.

It is mandatory that the calling thread has obtained the write lock on the source list. This is because the calling thread will have written to the source list to cause this event. This condition guarantees that no writes can occur while the listener is handling this event. It is an error to write to the source list while processing an event.

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


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