groovy.util

## Class ObservableMap

- java.lang.Object
- - groovy.util.ObservableMap

- All Implemented Interfaces:
    Map

      public class ObservableMap
      extends Object
      implements Map

  Map 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 ObservableMap( {!(it instanceof Closure)} )

       // skip all properties whose name matches a regex
       def map = new ObservableMap( { 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

  - ObservableMap.PropertyAddedEvent - a new property is added to the map
  - ObservableMap.PropertyRemovedEvent - a property is removed from the map
  - ObservableMap.PropertyUpdatedEvent - a property changes value (same as regular PropertyChangeEvent)
  - ObservableMap.PropertyClearedEvent - all properties have been removed from the map
  - ObservableMap.MultiPropertyEvent - triggered by calling map.putAll(), contains Added|Updated events
  Author:
    Andres Almiray

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `ObservableMap.MultiPropertyEvent`
    `static class` | `ObservableMap.PropertyAddedEvent`
    `static class` | `ObservableMap.PropertyClearedEvent`
    `static class` | `ObservableMap.PropertyEvent`
    `static class` | `ObservableMap.PropertyRemovedEvent`
    `static class` | `ObservableMap.PropertyUpdatedEvent`

    - ### Nested classes/interfaces inherited from interface java.util.Map

      `Map.Entry<K,V>`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ObservableMap()`
    `ObservableMap(Closure test)`
    `ObservableMap(Map delegate)`
    `ObservableMap(Map delegate, Closure test)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addPropertyChangeListener(PropertyChangeListener listener)`
    `void` | `addPropertyChangeListener(String propertyName, PropertyChangeListener listener)`
    `void` | `clear()`
    `boolean` | `containsKey(Object key)`
    `boolean` | `containsValue(Object value)`
    `Set` | `entrySet()`
    `boolean` | `equals(Object o)`
    `Object` | `get(Object key)`
    `PropertyChangeListener[]` | `getPropertyChangeListeners()`
    `PropertyChangeListener[]` | `getPropertyChangeListeners(String propertyName)`
    `int` | `hashCode()`
    `boolean` | `hasListeners(String propertyName)`
    `boolean` | `isEmpty()`
    `Set` | `keySet()`
    `Object` | `put(Object key, Object value)`
    `void` | `putAll(Map map)`
    `Object` | `remove(Object key)`
    `void` | `removePropertyChangeListener(PropertyChangeListener listener)`
    `void` | `removePropertyChangeListener(String propertyName, PropertyChangeListener listener)`
    `int` | `size()`
    `Collection` | `values()`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### ObservableMap

          public ObservableMap()

    - #### ObservableMap

          public ObservableMap(Closure test)

    - #### ObservableMap

          public ObservableMap(Map delegate)

    - #### ObservableMap

          public ObservableMap(Map delegate,
                       Closure test)

  - ### Method Detail

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `Map`

    - #### containsKey

          public boolean containsKey(Object key)

      Specified by:
        `containsKey` in interface `Map`

    - #### containsValue

          public boolean containsValue(Object value)

      Specified by:
        `containsValue` in interface `Map`

    - #### entrySet

          public Set entrySet()

      Specified by:
        `entrySet` in interface `Map`

    - #### equals

          public boolean equals(Object o)

      Specified by:
        `equals` in interface `Map`
      Overrides:
        `equals` in class `Object`

    - #### get

          public Object get(Object key)

      Specified by:
        `get` in interface `Map`

    - #### hashCode

          public int hashCode()

      Specified by:
        `hashCode` in interface `Map`
      Overrides:
        `hashCode` in class `Object`

    - #### isEmpty

          public boolean isEmpty()

      Specified by:
        `isEmpty` in interface `Map`

    - #### keySet

          public Set keySet()

      Specified by:
        `keySet` in interface `Map`

    - #### put

          public Object put(Object key,
                   Object value)

      Specified by:
        `put` in interface `Map`

    - #### putAll

          public void putAll(Map map)

      Specified by:
        `putAll` in interface `Map`

    - #### remove

          public Object remove(Object key)

      Specified by:
        `remove` in interface `Map`

    - #### size

          public int size()

      Specified by:
        `size` in interface `Map`

    - #### values

          public Collection values()

      Specified by:
        `values` in interface `Map`

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