Package groovy.util

Class ObservableList

All Implemented Interfaces:
Iterable, Collection, List

public class ObservableList extends Object implements List
List 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 map = new ObservableList( {!(it instanceof Closure)} )

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

Bound properties

  • content - read-only.
  • size - read-only.