Package: groovy.util

## [Java] Class ObservableSet<E>

- groovy.util.ObservableSet

- All Implemented Interfaces and Traits:
    Set

      public class ObservableSet<E>
      extends Object
      implements Set

  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.

- - ### Nested Class Summary

    Nested classes
    Modifiers | Name | Description
    --- | --- | ---
    `enum` | `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` |

  - ### Field Summary

    Fields
    Modifiers | Name | Description
    --- | --- | ---
    `static String` | `CONTENT_PROPERTY` |
    `static String` | `SIZE_PROPERTY` |

  - ### Constructor Summary

    Constructors
    Constructor and description
    `ObservableSet()`
    `ObservableSet(Set<E> delegate)`
    `ObservableSet(Closure test)`
    `ObservableSet(Set<E> delegate, Closure test)`

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `` | `public boolean` | `add(E e)`
    `` | `public boolean` | `addAll(Collection<? extends E> c)`
    `` | `public void` | `addPropertyChangeListener(PropertyChangeListener listener)`
    `` | `public void` | `addPropertyChangeListener(String propertyName, PropertyChangeListener listener)`
    `` | `public void` | `clear()`
    `` | `public boolean` | `contains(Object o)`
    `` | `public boolean` | `containsAll(Collection<?> objects)`
    `` | `protected void` | `fireElementAddedEvent(Object element)`
    `` | `protected void` | `fireElementClearedEvent(List values)`
    `` | `protected void` | `fireElementEvent(ObservableList.ElementEvent event)`
    `` | `protected void` | `fireElementRemovedEvent(Object element)`
    `` | `protected void` | `fireMultiElementAddedEvent(List values)`
    `` | `protected void` | `fireMultiElementRemovedEvent(List values)`
    `` | `protected void` | `fireSizeChangedEvent(int oldValue, int newValue)`
    `` | `public Set<E>` | `getContent()`
    `` | `protected Set<E>` | `getDelegateSet()`
    `` | `public PropertyChangeListener[]` | `getPropertyChangeListeners()`
    `` | `public PropertyChangeListener[]` | `getPropertyChangeListeners(String propertyName)`
    `` | `protected Closure` | `getTest()`
    `` | `public boolean` | `hasListeners(String propertyName)`
    `` | `public boolean` | `isEmpty()`
    `` | `public Iterator<E>` | `iterator()`
    `` | `public boolean` | `remove(Object o)`
    `` | `public boolean` | `removeAll(Collection<?> c)`
    `` | `public void` | `removePropertyChangeListener(PropertyChangeListener listener)`
    `` | `public void` | `removePropertyChangeListener(String propertyName, PropertyChangeListener listener)`
    `` | `public boolean` | `retainAll(Collection<?> c)`
    `` | `public int` | `size()`
    `` | `public Object[]` | `toArray()`
    `<T>` | `public T[]` | `toArray(T[] ts)`

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class Object` | `equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### public static final String CONTENT_PROPERTY

    - #### public static final String SIZE_PROPERTY

  - ### Constructor Detail

    - #### public ObservableSet()

    - #### public ObservableSet(Set<E> delegate)

    - #### public ObservableSet(Closure test)

    - #### public ObservableSet(Set<E> delegate, Closure test)

  - ### Method Detail

    - #### @Override
      public boolean add(E e)

    - #### @Override
      public boolean addAll(Collection<? extends E> c)

    - #### public void addPropertyChangeListener(PropertyChangeListener listener)

    - #### public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)

    - #### @Override
      public void clear()

    - #### @Override
      public boolean contains(Object o)

    - #### @Override
      public boolean containsAll(Collection<?> objects)

    - #### protected void fireElementAddedEvent(Object element)

    - #### protected void fireElementClearedEvent(List values)

    - #### protected void fireElementEvent(ObservableList.ElementEvent event)

    - #### protected void fireElementRemovedEvent(Object element)

    - #### protected void fireMultiElementAddedEvent(List values)

    - #### protected void fireMultiElementRemovedEvent(List values)

    - #### protected void fireSizeChangedEvent(int oldValue, int newValue)

    - #### public Set<E> getContent()

    - #### protected Set<E> getDelegateSet()

    - #### public PropertyChangeListener[] getPropertyChangeListeners()

    - #### public PropertyChangeListener[] getPropertyChangeListeners(String propertyName)

    - #### protected Closure getTest()

    - #### public boolean hasListeners(String propertyName)

    - #### @Override
      public boolean isEmpty()

    - #### @Override
      public Iterator<E> iterator()

    - #### @Override
      public boolean remove(Object o)

    - #### @Override
      public boolean removeAll(Collection<?> c)

    - #### public void removePropertyChangeListener(PropertyChangeListener listener)

    - #### public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)

    - #### @Override
      public boolean retainAll(Collection<?> c)

    - #### @Override
      public int size()

    - #### @Override
      public Object[] toArray()

    - #### <T> @Override
      public T[] toArray(T[] ts)