ObservableSet (Groovy 2.4.15)
Date: 2018-03-23

groovy.util

## Class ObservableSet<E>

- java.lang.Object
- - groovy.util.ObservableSet<E>

- All Implemented Interfaces:
    java.lang.Iterable<E>, java.util.Collection<E>, java.util.Set<E>

      public class ObservableSet<E>
      extends java.lang.Object
      implements java.util.Set<E>

  Set 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 set = new ObservableSet( {!(it instanceof Closure)} )
       <p/>
       // skip all properties whose name matches a regex
       def set = new ObservableSet( { 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
  - ObservableSet.ElementAddedEvent - a new element is added to the set
  - ObservableSet.ElementRemovedEvent - an element is removed from the set
  - ObservableSet.ElementUpdatedEvent - an element changes value (same as regular PropertyChangeEvent)
  - ObservableSet.ElementClearedEvent - all elements have been removed from the list
  - ObservableSet.MultiElementAddedEvent - triggered by calling set.addAll()
  - ObservableSet.MultiElementRemovedEvent - triggered by calling set.removeAll()/set.retainAll()

  Bound properties

  - `content` - read-only.
  - `size` - read-only.
  Author:
    Andres Almiray

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `ObservableSet.ChangeType`
    `static class` | `ObservableSet.ElementAddedEvent`
    `static class` | `ObservableSet.ElementClearedEvent`
    `static class` | `ObservableSet.ElementEvent`
    `static class` | `ObservableSet.ElementRemovedEvent`
    `static class` | `ObservableSet.MultiElementAddedEvent`
    `static class` | `ObservableSet.MultiElementRemovedEvent`
    `protected class` | `ObservableSet.ObservableIterator<E>`

  - ### Field Summary

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

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ObservableSet()`
    `ObservableSet(Closure test)`
    `ObservableSet(java.util.Set<E> delegate)`
    `ObservableSet(java.util.Set<E> delegate, Closure test)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `boolean` | `add(E e)`
    `boolean` | `addAll(java.util.Collection<? extends E> 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<?> objects)`
    `protected void` | `fireElementAddedEvent(java.lang.Object element)`
    `protected void` | `fireElementClearedEvent(java.util.List values)`
    `protected void` | `fireElementEvent(ObservableSet.ElementEvent event)`
    `protected void` | `fireElementRemovedEvent(java.lang.Object element)`
    `protected void` | `fireMultiElementAddedEvent(java.util.List values)`
    `protected void` | `fireMultiElementRemovedEvent(java.util.List values)`
    `protected void` | `fireSizeChangedEvent(int oldValue, int newValue)`
    `java.util.Set<E>` | `getContent()`
    `protected java.util.Set<E>` | `getDelegateSet()`
    `java.beans.PropertyChangeListener[]` | `getPropertyChangeListeners()`
    `java.beans.PropertyChangeListener[]` | `getPropertyChangeListeners(java.lang.String propertyName)`
    `protected Closure` | `getTest()`
    `boolean` | `hasListeners(java.lang.String propertyName)`
    `boolean` | `isEmpty()`
    `java.util.Iterator<E>` | `iterator()`
    `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)`
    `int` | `size()`
    `java.lang.Object[]` | `toArray()`
    `<T> T[]` | `toArray(T[] ts)`

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

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

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

      `equals, hashCode, 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

    - #### ObservableSet

          public ObservableSet()

    - #### ObservableSet

          public ObservableSet(java.util.Set<E> delegate)

    - #### ObservableSet

          public ObservableSet(Closure test)

    - #### ObservableSet

          public ObservableSet(java.util.Set<E> delegate,
                               Closure test)

  - ### Method Detail

    - #### getContent

          public java.util.Set<E> getContent()

    - #### getDelegateSet

          protected java.util.Set<E> getDelegateSet()

    - #### getTest

          protected Closure getTest()

    - #### fireElementAddedEvent

          protected void fireElementAddedEvent(java.lang.Object element)

    - #### fireMultiElementAddedEvent

          protected void fireMultiElementAddedEvent(java.util.List values)

    - #### fireElementClearedEvent

          protected void fireElementClearedEvent(java.util.List values)

    - #### fireElementRemovedEvent

          protected void fireElementRemovedEvent(java.lang.Object element)

    - #### fireMultiElementRemovedEvent

          protected void fireMultiElementRemovedEvent(java.util.List values)

    - #### fireElementEvent

          protected void fireElementEvent(ObservableSet.ElementEvent event)

    - #### fireSizeChangedEvent

          protected void fireSizeChangedEvent(int oldValue,
                                              int newValue)

    - #### 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)

    - #### size

          public int size()

      Specified by:
        `size` in interface `java.util.Collection<E>`
      Specified by:
        `size` in interface `java.util.Set<E>`

    - #### isEmpty

          public boolean isEmpty()

      Specified by:
        `isEmpty` in interface `java.util.Collection<E>`
      Specified by:
        `isEmpty` in interface `java.util.Set<E>`

    - #### contains

          public boolean contains(java.lang.Object o)

      Specified by:
        `contains` in interface `java.util.Collection<E>`
      Specified by:
        `contains` in interface `java.util.Set<E>`

    - #### iterator

          public java.util.Iterator<E> iterator()

      Specified by:
        `iterator` in interface `java.lang.Iterable<E>`
      Specified by:
        `iterator` in interface `java.util.Collection<E>`
      Specified by:
        `iterator` in interface `java.util.Set<E>`

    - #### toArray

          public java.lang.Object[] toArray()

      Specified by:
        `toArray` in interface `java.util.Collection<E>`
      Specified by:
        `toArray` in interface `java.util.Set<E>`

    - #### toArray

          public <T> T[] toArray(T[] ts)

      Specified by:
        `toArray` in interface `java.util.Collection<E>`
      Specified by:
        `toArray` in interface `java.util.Set<E>`

    - #### add

          public boolean add(E e)

      Specified by:
        `add` in interface `java.util.Collection<E>`
      Specified by:
        `add` in interface `java.util.Set<E>`

    - #### remove

          public boolean remove(java.lang.Object o)

      Specified by:
        `remove` in interface `java.util.Collection<E>`
      Specified by:
        `remove` in interface `java.util.Set<E>`

    - #### containsAll

          public boolean containsAll(java.util.Collection<?> objects)

      Specified by:
        `containsAll` in interface `java.util.Collection<E>`
      Specified by:
        `containsAll` in interface `java.util.Set<E>`

    - #### addAll

          public boolean addAll(java.util.Collection<? extends E> c)

      Specified by:
        `addAll` in interface `java.util.Collection<E>`
      Specified by:
        `addAll` in interface `java.util.Set<E>`

    - #### retainAll

          public boolean retainAll(java.util.Collection<?> c)

      Specified by:
        `retainAll` in interface `java.util.Collection<E>`
      Specified by:
        `retainAll` in interface `java.util.Set<E>`

    - #### removeAll

          public boolean removeAll(java.util.Collection<?> c)

      Specified by:
        `removeAll` in interface `java.util.Collection<E>`
      Specified by:
        `removeAll` in interface `java.util.Set<E>`

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `java.util.Collection<E>`
      Specified by:
        `clear` in interface `java.util.Set<E>`