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.

Author:
  Andres Almiray

### Nested Class Summary

Nested Classes
`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
`static java.lang.String` `CONTENT_PROPERTY`
`static java.lang.String` `SIZE_PROPERTY`

### Constructor Summary

Constructors
Constructor and 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
`void` `add(int index, java.lang.Object element)`
`boolean` `add(java.lang.Object o)`
`boolean` `addAll(java.util.Collection c)`
`boolean` `addAll(int index, 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.List

`replaceAll, sort, spliterator`

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

`parallelStream, removeIf, stream`

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

`forEach`

### 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.lang.Iterable`
Specified by:
  `iterator` in interface `java.util.Collection`
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)