Package groovy.util

Class 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.