Package groovy.util

## Class ObservableMap

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

- All Implemented Interfaces:
    `java.util.Map`

      public class ObservableMap
      extends java.lang.Object
      implements java.util.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

  Bound properties

  - `content` - read-only.
  - `size` - read-only.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `ObservableMap.ChangeType` |
    `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

      `java.util.Map.Entry<K extends java.lang.Object,​V extends java.lang.Object>`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static java.lang.String` | `CLEARED_PROPERTY` |
    `static java.lang.String` | `CONTENT_PROPERTY` |
    `static java.lang.String` | `SIZE_PROPERTY` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ObservableMap()` |
    `ObservableMap​(Closure test)` |
    `ObservableMap​(java.util.Map delegate)` |
    `ObservableMap​(java.util.Map delegate, Closure test)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addPropertyChangeListener​(java.beans.PropertyChangeListener listener)` |
    `void` | `addPropertyChangeListener​(java.lang.String propertyName, java.beans.PropertyChangeListener listener)` |
    `void` | `clear()` |
    `boolean` | `containsKey​(java.lang.Object key)` |
    `boolean` | `containsValue​(java.lang.Object value)` |
    `java.util.Set` | `entrySet()` |
    `boolean` | `equals​(java.lang.Object o)` |
    `protected void` | `fireMultiPropertyEvent​(ObservableMap.PropertyEvent[] events)` |
    `protected void` | `fireMultiPropertyEvent​(java.util.List<ObservableMap.PropertyEvent> events)` |
    `protected void` | `firePropertyAddedEvent​(java.lang.Object key, java.lang.Object value)` |
    `protected void` | `firePropertyClearedEvent​(java.util.Map values)` |
    `protected void` | `firePropertyEvent​(ObservableMap.PropertyEvent event)` |
    `protected void` | `firePropertyRemovedEvent​(java.lang.Object key, java.lang.Object value)` |
    `protected void` | `firePropertyUpdatedEvent​(java.lang.Object key, java.lang.Object oldValue, java.lang.Object newValue)` |
    `protected void` | `fireSizeChangedEvent​(int oldValue, int newValue)` |
    `java.lang.Object` | `get​(java.lang.Object key)` |
    `java.util.Map` | `getContent()` |
    `protected java.util.Map` | `getMapDelegate()` |
    `java.beans.PropertyChangeListener[]` | `getPropertyChangeListeners()` |
    `java.beans.PropertyChangeListener[]` | `getPropertyChangeListeners​(java.lang.String propertyName)` |
    `int` | `getSize()` |
    `protected Closure` | `getTest()` |
    `int` | `hashCode()` |
    `boolean` | `hasListeners​(java.lang.String propertyName)` |
    `boolean` | `isEmpty()` |
    `java.util.Set` | `keySet()` |
    `java.lang.Object` | `put​(java.lang.Object key, java.lang.Object value)` |
    `void` | `putAll​(java.util.Map map)` |
    `java.lang.Object` | `remove​(java.lang.Object key)` |
    `void` | `removePropertyChangeListener​(java.beans.PropertyChangeListener listener)` |
    `void` | `removePropertyChangeListener​(java.lang.String propertyName, java.beans.PropertyChangeListener listener)` |
    `int` | `size()` |
    `java.util.Collection` | `values()` |

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

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

    - ### Methods inherited from interface java.util.Map

      `compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll`

- - ### Field Detail

    - #### SIZE_PROPERTY

          public static final java.lang.String SIZE_PROPERTY

      See Also:
        Constant Field Values

    - #### CONTENT_PROPERTY

          public static final java.lang.String CONTENT_PROPERTY

      See Also:
        Constant Field Values

    - #### CLEARED_PROPERTY

          public static final java.lang.String CLEARED_PROPERTY

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### ObservableMap

          public ObservableMap()

    - #### ObservableMap

          public ObservableMap​(Closure test)

    - #### ObservableMap

          public ObservableMap​(java.util.Map delegate)

    - #### ObservableMap

          public ObservableMap​(java.util.Map delegate,
                               Closure test)

  - ### Method Detail

    - #### getMapDelegate

          protected java.util.Map getMapDelegate()

    - #### getTest

          protected Closure getTest()

    - #### getContent

          public java.util.Map getContent()

    - #### firePropertyClearedEvent

          protected void firePropertyClearedEvent​(java.util.Map values)

    - #### firePropertyAddedEvent

          protected void firePropertyAddedEvent​(java.lang.Object key,
                                                java.lang.Object value)

    - #### firePropertyUpdatedEvent

          protected void firePropertyUpdatedEvent​(java.lang.Object key,
                                                  java.lang.Object oldValue,
                                                  java.lang.Object newValue)

    - #### fireMultiPropertyEvent

          protected void fireMultiPropertyEvent​(java.util.List<ObservableMap.PropertyEvent> events)

    - #### fireMultiPropertyEvent

          protected void fireMultiPropertyEvent​(ObservableMap.PropertyEvent[] events)

    - #### firePropertyRemovedEvent

          protected void firePropertyRemovedEvent​(java.lang.Object key,
                                                  java.lang.Object value)

    - #### firePropertyEvent

          protected void firePropertyEvent​(ObservableMap.PropertyEvent event)

    - #### fireSizeChangedEvent

          protected void fireSizeChangedEvent​(int oldValue,
                                              int newValue)

    - #### clear

          public void clear()

      Specified by:
        `clear` in interface `java.util.Map`

    - #### containsKey

          public boolean containsKey​(java.lang.Object key)

      Specified by:
        `containsKey` in interface `java.util.Map`

    - #### containsValue

          public boolean containsValue​(java.lang.Object value)

      Specified by:
        `containsValue` in interface `java.util.Map`

    - #### entrySet

          public java.util.Set entrySet()

      Specified by:
        `entrySet` in interface `java.util.Map`

    - #### equals

          public boolean equals​(java.lang.Object o)

      Specified by:
        `equals` in interface `java.util.Map`
      Overrides:
        `equals` in class `java.lang.Object`

    - #### get

          public java.lang.Object get​(java.lang.Object key)

      Specified by:
        `get` in interface `java.util.Map`

    - #### hashCode

          public int hashCode()

      Specified by:
        `hashCode` in interface `java.util.Map`
      Overrides:
        `hashCode` in class `java.lang.Object`

    - #### isEmpty

          public boolean isEmpty()

      Specified by:
        `isEmpty` in interface `java.util.Map`

    - #### keySet

          public java.util.Set keySet()

      Specified by:
        `keySet` in interface `java.util.Map`

    - #### put

          public java.lang.Object put​(java.lang.Object key,
                                      java.lang.Object value)

      Specified by:
        `put` in interface `java.util.Map`

    - #### putAll

          public void putAll​(java.util.Map map)

      Specified by:
        `putAll` in interface `java.util.Map`

    - #### remove

          public java.lang.Object remove​(java.lang.Object key)

      Specified by:
        `remove` in interface `java.util.Map`

    - #### size

          public int size()

      Specified by:
        `size` in interface `java.util.Map`

    - #### getSize

          public int getSize()

    - #### values

          public java.util.Collection values()

      Specified by:
        `values` in interface `java.util.Map`

    - #### addPropertyChangeListener

          public void addPropertyChangeListener​(java.beans.PropertyChangeListener listener)

    - #### addPropertyChangeListener

          public void addPropertyChangeListener​(java.lang.String propertyName,
                                                java.beans.PropertyChangeListener listener)

    - #### getPropertyChangeListeners

          public java.beans.PropertyChangeListener[] getPropertyChangeListeners()

    - #### getPropertyChangeListeners

          public java.beans.PropertyChangeListener[] getPropertyChangeListeners​(java.lang.String propertyName)

    - #### removePropertyChangeListener

          public void removePropertyChangeListener​(java.beans.PropertyChangeListener listener)

    - #### removePropertyChangeListener

          public void removePropertyChangeListener​(java.lang.String propertyName,
                                                   java.beans.PropertyChangeListener listener)

    - #### hasListeners

          public boolean hasListeners​(java.lang.String propertyName)