Package groovy.util

## Class ObservableList

- java.lang.Object
- - groovy.util.ObservableList

- All Implemented Interfaces:
    `java.lang.Iterable`, `java.util.Collection`, `java.util.List`

      public class ObservableList
      extends java.lang.Object
      implements java.util.List

  List decorator that will trigger PropertyChangeEvents when a value changes.
  An optional Closure may be specified and will work as a filter, if it returns true the property will trigger an event (if the value indeed changed), otherwise it won't. The Closure may receive 1 or 2 parameters, the single one being the value, the other one both the key and value, for example:

       // skip all properties whose value is a closure
       def map = new ObservableList( {!(it instanceof Closure)} )

       // skip all properties whose name matches a regex
       def map = new ObservableList( { name, value -> !(name =˜ /[A-Z+]/) } )

  The current implementation will trigger specialized events in the following scenarios, you need not register a different listener as those events extend from PropertyChangeEvent
  - ObservableList.ElementAddedEvent - a new element is added to the list
  - ObservableList.ElementRemovedEvent - an element is removed from the list
  - ObservableList.ElementUpdatedEvent - an element changes value (same as regular PropertyChangeEvent)
  - ObservableList.ElementClearedEvent - all elements have been removed from the list
  - ObservableList.MultiElementAddedEvent - triggered by calling list.addAll()
  - ObservableList.MultiElementRemovedEvent - triggered by calling list.removeAll()/list.retainAll()

  Bound properties

  - `content` - read-only.
  - `size` - read-only.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `ObservableList.ChangeType` |
    `static class` | `ObservableList.ElementAddedEvent` |
    `static class` | `ObservableList.ElementClearedEvent` |
    `static class` | `ObservableList.ElementEvent` |
    `static class` | `ObservableList.ElementRemovedEvent` |
    `static class` | `ObservableList.ElementUpdatedEvent` |
    `static class` | `ObservableList.MultiElementAddedEvent` |
    `static class` | `ObservableList.MultiElementRemovedEvent` |
    `protected class` | `ObservableList.ObservableIterator` |
    `protected class` | `ObservableList.ObservableListIterator` |

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `CONTENT_PROPERTY` |
    `static java.lang.String` | `SIZE_PROPERTY` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ObservableList()` |
    `ObservableList​(Closure test)` |
    `ObservableList​(java.util.List delegate)` |
    `ObservableList​(java.util.List delegate, Closure test)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `add​(int index, java.lang.Object element)` |
    `boolean` | `add​(java.lang.Object o)` |
    `boolean` | `addAll​(int index, java.util.Collection c)` |
    `boolean` | `addAll​(java.util.Collection c)` |
    `void` | `addPropertyChangeListener​(java.beans.PropertyChangeListener listener)` |
    `void` | `addPropertyChangeListener​(java.lang.String propertyName, java.beans.PropertyChangeListener listener)` |
    `void` | `clear()` |
    `boolean` | `contains​(java.lang.Object o)` |
    `boolean` | `containsAll​(java.util.Collection c)` |
    `boolean` | `equals​(java.lang.Object o)` |
    `protected void` | `fireElementAddedEvent​(int index, java.lang.Object element)` |
    `protected void` | `fireElementClearedEvent​(java.util.List values)` |
    `protected void` | `fireElementEvent​(ObservableList.ElementEvent event)` |
    `protected void` | `fireElementRemovedEvent​(int index, java.lang.Object element)` |
    `protected void` | `fireElementUpdatedEvent​(int index, java.lang.Object oldValue, java.lang.Object newValue)` |
    `protected void` | `fireMultiElementAddedEvent​(int index, java.util.List values)` |
    `protected void` | `fireMultiElementRemovedEvent​(java.util.List values)` |
    `protected void` | `fireSizeChangedEvent​(int oldValue, int newValue)` |
    `java.lang.Object` | `get​(int index)` |
    `java.util.List` | `getContent()` |
    `protected java.util.List` | `getDelegateList()` |
    `java.beans.PropertyChangeListener[]` | `getPropertyChangeListeners()` |
    `java.beans.PropertyChangeListener[]` | `getPropertyChangeListeners​(java.lang.String propertyName)` |
    `int` | `getSize()` |
    `protected Closure` | `getTest()` |
    `int` | `hashCode()` |
    `boolean` | `hasListeners​(java.lang.String propertyName)` |
    `int` | `indexOf​(java.lang.Object o)` |
    `boolean` | `isEmpty()` |
    `java.util.Iterator` | `iterator()` |
    `int` | `lastIndexOf​(java.lang.Object o)` |
    `java.util.ListIterator` | `listIterator()` |
    `java.util.ListIterator` | `listIterator​(int index)` |
    `java.lang.Object` | `remove​(int index)` |
    `boolean` | `remove​(java.lang.Object o)` |
    `boolean` | `removeAll​(java.util.Collection c)` |
    `void` | `removePropertyChangeListener​(java.beans.PropertyChangeListener listener)` |
    `void` | `removePropertyChangeListener​(java.lang.String propertyName, java.beans.PropertyChangeListener listener)` |
    `boolean` | `retainAll​(java.util.Collection c)` |
    `java.lang.Object` | `set​(int index, java.lang.Object element)` |
    `int` | `size()` |
    `java.util.List` | `subList​(int fromIndex, int toIndex)` |
    `java.lang.Object[]` | `toArray()` |
    `java.lang.Object[]` | `toArray​(java.lang.Object[] a)` |

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface java.util.Collection

      `parallelStream, removeIf, stream, toArray`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach`

    - ### Methods inherited from interface java.util.List

      `replaceAll, sort, spliterator`

- - ### Field Detail

    - #### SIZE_PROPERTY

          public static final java.lang.String SIZE_PROPERTY

      See Also:
        Constant Field Values

    - #### CONTENT_PROPERTY

          public static final java.lang.String CONTENT_PROPERTY

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ObservableList

          public ObservableList()

    - #### ObservableList

          public ObservableList​(java.util.List delegate)

    - #### ObservableList

          public ObservableList​(Closure test)

    - #### ObservableList

          public ObservableList​(java.util.List delegate,
                                Closure test)

  - ### Method Detail

    - #### getContent

          public java.util.List getContent()

    - #### getDelegateList

          protected java.util.List getDelegateList()

    - #### getTest

          protected Closure getTest()

    - #### fireElementAddedEvent

          protected void fireElementAddedEvent​(int index,
                                               java.lang.Object element)

    - #### fireMultiElementAddedEvent

          protected void fireMultiElementAddedEvent​(int index,
                                                    java.util.List values)

    - #### fireElementClearedEvent

          protected void fireElementClearedEvent​(java.util.List values)

    - #### fireElementRemovedEvent

          protected void fireElementRemovedEvent​(int index,
                                                 java.lang.Object element)

    - #### fireMultiElementRemovedEvent

          protected void fireMultiElementRemovedEvent​(java.util.List values)

    - #### fireElementUpdatedEvent

          protected void fireElementUpdatedEvent​(int index,
                                                 java.lang.Object oldValue,
                                                 java.lang.Object newValue)

    - #### fireElementEvent

          protected void fireElementEvent​(ObservableList.ElementEvent event)

    - #### fireSizeChangedEvent

          protected void fireSizeChangedEvent​(int oldValue,
                                              int newValue)

    - #### add

          public void add​(int index,
                          java.lang.Object element)

      Specified by:
        `add` in interface `java.util.List`

    - #### add

          public boolean add​(java.lang.Object o)

      Specified by:
        `add` in interface `java.util.Collection`
      Specified by:
        `add` in interface `java.util.List`

    - #### addAll

          public boolean addAll​(java.util.Collection c)

      Specified by:
        `addAll` in interface `java.util.Collection`
      Specified by:
        `addAll` in interface `java.util.List`

    - #### addAll

          public boolean addAll​(int index,
                                java.util.Collection c)

      Specified by:
        `addAll` in interface `java.util.List`

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `java.util.Collection`
      Specified by:
        `clear` in interface `java.util.List`

    - #### contains

          public boolean contains​(java.lang.Object o)

      Specified by:
        `contains` in interface `java.util.Collection`
      Specified by:
        `contains` in interface `java.util.List`

    - #### containsAll

          public boolean containsAll​(java.util.Collection c)

      Specified by:
        `containsAll` in interface `java.util.Collection`
      Specified by:
        `containsAll` in interface `java.util.List`

    - #### equals

          public boolean equals​(java.lang.Object o)

      Specified by:
        `equals` in interface `java.util.Collection`
      Specified by:
        `equals` in interface `java.util.List`
      Overrides:
        `equals` in class `java.lang.Object`

    - #### get

          public java.lang.Object get​(int index)

      Specified by:
        `get` in interface `java.util.List`

    - #### hashCode

          public int hashCode()

      Specified by:
        `hashCode` in interface `java.util.Collection`
      Specified by:
        `hashCode` in interface `java.util.List`
      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### indexOf

          public int indexOf​(java.lang.Object o)

      Specified by:
        `indexOf` in interface `java.util.List`

    - #### isEmpty

          public boolean isEmpty()

      Specified by:
        `isEmpty` in interface `java.util.Collection`
      Specified by:
        `isEmpty` in interface `java.util.List`

    - #### iterator

          public java.util.Iterator iterator()

      Specified by:
        `iterator` in interface `java.util.Collection`
      Specified by:
        `iterator` in interface `java.lang.Iterable`
      Specified by:
        `iterator` in interface `java.util.List`

    - #### lastIndexOf

          public int lastIndexOf​(java.lang.Object o)

      Specified by:
        `lastIndexOf` in interface `java.util.List`

    - #### listIterator

          public java.util.ListIterator listIterator()

      Specified by:
        `listIterator` in interface `java.util.List`

    - #### listIterator

          public java.util.ListIterator listIterator​(int index)

      Specified by:
        `listIterator` in interface `java.util.List`

    - #### remove

          public java.lang.Object remove​(int index)

      Specified by:
        `remove` in interface `java.util.List`

    - #### remove

          public boolean remove​(java.lang.Object o)

      Specified by:
        `remove` in interface `java.util.Collection`
      Specified by:
        `remove` in interface `java.util.List`

    - #### removeAll

          public boolean removeAll​(java.util.Collection c)

      Specified by:
        `removeAll` in interface `java.util.Collection`
      Specified by:
        `removeAll` in interface `java.util.List`

    - #### retainAll

          public boolean retainAll​(java.util.Collection c)

      Specified by:
        `retainAll` in interface `java.util.Collection`
      Specified by:
        `retainAll` in interface `java.util.List`

    - #### set

          public java.lang.Object set​(int index,
                                      java.lang.Object element)

      Specified by:
        `set` in interface `java.util.List`

    - #### size

          public int size()

      Specified by:
        `size` in interface `java.util.Collection`
      Specified by:
        `size` in interface `java.util.List`

    - #### getSize

          public int getSize()

    - #### subList

          public java.util.List subList​(int fromIndex,
                                        int toIndex)

      Specified by:
        `subList` in interface `java.util.List`

    - #### toArray

          public java.lang.Object[] toArray()

      Specified by:
        `toArray` in interface `java.util.Collection`
      Specified by:
        `toArray` in interface `java.util.List`

    - #### toArray

          public java.lang.Object[] toArray​(java.lang.Object[] a)

      Specified by:
        `toArray` in interface `java.util.Collection`
      Specified by:
        `toArray` in interface `java.util.List`

    - #### addPropertyChangeListener

          public void addPropertyChangeListener​(java.beans.PropertyChangeListener listener)

    - #### addPropertyChangeListener

          public void addPropertyChangeListener​(java.lang.String propertyName,
                                                java.beans.PropertyChangeListener listener)

    - #### getPropertyChangeListeners

          public java.beans.PropertyChangeListener[] getPropertyChangeListeners()

    - #### getPropertyChangeListeners

          public java.beans.PropertyChangeListener[] getPropertyChangeListeners​(java.lang.String propertyName)

    - #### removePropertyChangeListener

          public void removePropertyChangeListener​(java.beans.PropertyChangeListener listener)

    - #### removePropertyChangeListener

          public void removePropertyChangeListener​(java.lang.String propertyName,
                                                   java.beans.PropertyChangeListener listener)

    - #### hasListeners

          public boolean hasListeners​(java.lang.String propertyName)