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.

Author:
  Andres Almiray

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