Package groovy.util

# Class ObservableSet<E>

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

All Implemented Interfaces:
  `Iterable<E>`, `Collection<E>`, `Set<E>`

public class ObservableSet<E> extends Object implements 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.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static 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<E>`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final String`
  `CONTENT_PROPERTY`
  `static final String`
  `SIZE_PROPERTY`

- ## Constructor Summary

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

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `add(E e)`
  `boolean`
  `addAll(Collection<? extends E> c)`
  `void`
  `addPropertyChangeListener(PropertyChangeListener listener)`
  `void`
  `addPropertyChangeListener(String propertyName, PropertyChangeListener listener)`
  `void`
  `clear()`
  `boolean`
  `contains(Object o)`
  `boolean`
  `containsAll(Collection<?> objects)`
  `protected void`
  `fireElementAddedEvent(Object element)`
  `protected void`
  `fireElementClearedEvent(List values)`
  `protected void`
  `fireElementEvent(ObservableSet.ElementEvent event)`
  `protected void`
  `fireElementRemovedEvent(Object element)`
  `protected void`
  `fireMultiElementAddedEvent(List values)`
  `protected void`
  `fireMultiElementRemovedEvent(List values)`
  `protected void`
  `fireSizeChangedEvent(int oldValue, int newValue)`
  `Set<E>`
  `getContent()`
  `protected Set<E>`
  `getDelegateSet()`
  `PropertyChangeListener[]`
  `getPropertyChangeListeners()`
  `PropertyChangeListener[]`
  `getPropertyChangeListeners(String propertyName)`
  `protected Closure`
  `getTest()`
  `boolean`
  `hasListeners(String propertyName)`
  `boolean`
  `isEmpty()`
  `Iterator<E>`
  `iterator()`
  `boolean`
  `remove(Object o)`
  `boolean`
  `removeAll(Collection<?> c)`
  `void`
  `removePropertyChangeListener(PropertyChangeListener listener)`
  `void`
  `removePropertyChangeListener(String propertyName, PropertyChangeListener listener)`
  `boolean`
  `retainAll(Collection<?> c)`
  `int`
  `size()`
  `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.Collection

  `parallelStream, removeIf, stream, toArray`

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

  `forEach`

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

  `equals, hashCode, spliterator`

- ## Field Details

  - ### SIZE_PROPERTY

    public static final String SIZE_PROPERTY
    See Also:
      - Constant Field Values

  - ### CONTENT_PROPERTY

    public static final String CONTENT_PROPERTY
    See Also:
      - Constant Field Values

- ## Constructor Details

  - ### ObservableSet

    public ObservableSet()

  - ### ObservableSet

    public ObservableSet(Set<E> delegate)

  - ### ObservableSet

    public ObservableSet(Closure test)

  - ### ObservableSet

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

- ## Method Details

  - ### getContent

    public Set<E> getContent()

  - ### getDelegateSet

    protected Set<E> getDelegateSet()

  - ### getTest

    protected Closure getTest()

  - ### fireElementAddedEvent

    protected void fireElementAddedEvent(Object element)

  - ### fireMultiElementAddedEvent

    protected void fireMultiElementAddedEvent(List values)

  - ### fireElementClearedEvent

    protected void fireElementClearedEvent(List values)

  - ### fireElementRemovedEvent

    protected void fireElementRemovedEvent(Object element)

  - ### fireMultiElementRemovedEvent

    protected void fireMultiElementRemovedEvent(List values)

  - ### fireElementEvent

    protected void fireElementEvent(ObservableSet.ElementEvent event)

  - ### fireSizeChangedEvent

    protected void fireSizeChangedEvent(int oldValue, int newValue)

  - ### addPropertyChangeListener

    public void addPropertyChangeListener(PropertyChangeListener listener)

  - ### addPropertyChangeListener

    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)

  - ### getPropertyChangeListeners

    public PropertyChangeListener[] getPropertyChangeListeners()

  - ### getPropertyChangeListeners

    public PropertyChangeListener[] getPropertyChangeListeners(String propertyName)

  - ### removePropertyChangeListener

    public void removePropertyChangeListener(PropertyChangeListener listener)

  - ### removePropertyChangeListener

    public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener)

  - ### hasListeners

    public boolean hasListeners(String propertyName)

  - ### size

    public int size()
    Specified by:
      `size` in interface `Collection<E>`
    Specified by:
      `size` in interface `Set<E>`

  - ### isEmpty

    public boolean isEmpty()
    Specified by:
      `isEmpty` in interface `Collection<E>`
    Specified by:
      `isEmpty` in interface `Set<E>`

  - ### contains

    public boolean contains(Object o)
    Specified by:
      `contains` in interface `Collection<E>`
    Specified by:
      `contains` in interface `Set<E>`

  - ### iterator

    public Iterator<E> iterator()
    Specified by:
      `iterator` in interface `Collection<E>`
    Specified by:
      `iterator` in interface `Iterable<E>`
    Specified by:
      `iterator` in interface `Set<E>`

  - ### toArray

    public Object[] toArray()
    Specified by:
      `toArray` in interface `Collection<E>`
    Specified by:
      `toArray` in interface `Set<E>`

  - ### toArray

    public <T> T[] toArray(T[] ts)
    Specified by:
      `toArray` in interface `Collection<E>`
    Specified by:
      `toArray` in interface `Set<E>`

  - ### add

    public boolean add(E e)
    Specified by:
      `add` in interface `Collection<E>`
    Specified by:
      `add` in interface `Set<E>`

  - ### remove

    public boolean remove(Object o)
    Specified by:
      `remove` in interface `Collection<E>`
    Specified by:
      `remove` in interface `Set<E>`

  - ### containsAll

    public boolean containsAll(Collection<?> objects)
    Specified by:
      `containsAll` in interface `Collection<E>`
    Specified by:
      `containsAll` in interface `Set<E>`

  - ### addAll

    public boolean addAll(Collection<? extends E> c)
    Specified by:
      `addAll` in interface `Collection<E>`
    Specified by:
      `addAll` in interface `Set<E>`

  - ### retainAll

    public boolean retainAll(Collection<?> c)
    Specified by:
      `retainAll` in interface `Collection<E>`
    Specified by:
      `retainAll` in interface `Set<E>`

  - ### removeAll

    public boolean removeAll(Collection<?> c)
    Specified by:
      `removeAll` in interface `Collection<E>`
    Specified by:
      `removeAll` in interface `Set<E>`

  - ### clear

    public void clear()
    Specified by:
      `clear` in interface `Collection<E>`
    Specified by:
      `clear` in interface `Set<E>`