Class ObservableElementList<E>

  • All Implemented Interfaces:
    ListEventListener<E>, EventList<E>, java.lang.Iterable<E>, java.util.Collection<E>, java.util.EventListener, java.util.List<E>

    public class ObservableElementList<E>
    extends TransformedList<E,​E>
    A list that fires update events whenever elements are modified in place. Changes to list elements are detected by registering an appropriate listener on every list element. Listeners are registered as elements are added to this list and unregistered as elements are removed from this list. Users must specify an implementation of a ObservableElementList.Connector in the constructor which contains the necessary logic for registering and unregistering a listener capable of detecting modifications to an observable list element.

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

    EventList Overview
    Writable:yes
    Concurrency:thread ready, not thread safe; elementChanged(), however, is thread ready
    Performance:inserts: O(1), deletes: O(1), updates: O(1), elementChanged: O(n)
    Memory:8 bytes per element
    Unit Tests:ObservableElementListTest
    Issues:N/A
    Author:
    Jesse Wilson, James Lemieux
    See Also:
    GlazedLists.beanConnector(Class), GlazedLists.beanConnector(Class, String, String), RFE 157
    • Method Detail

      • listChanged

        public void listChanged​(ListEvent<E> listChanges)
        Description copied from class: TransformedList
        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>
        Parameters:
        listChanges - a ListEvent describing the changes to the list
      • 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>
      • elementChanged

        public void elementChanged​(java.lang.Object listElement)
        Handle a listener being notified for the specified listElement. This method causes a ListEvent to be fired from this EventList indicating an update occurred at all locations of the given listElement.

        Note that listElement must be the exact object located within this list (i.e. listElement == get(i) for some i >= 0).

        This method acquires the write lock for this list before locating the listElement and broadcasting its update. It is assumed that this method may be called on any Thread, so to decrease the burdens of the caller in achieving multi-threaded correctness, this method is Thread ready.

        Parameters:
        listElement - the list element which has been modified