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.

Author:
  Andres Almiray

### Nested Class Summary

Nested Classes
`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,V>`

### Field Summary

Fields
`static java.lang.String` `CLEARED_PROPERTY`
`static java.lang.String` `CONTENT_PROPERTY`
`static java.lang.String` `SIZE_PROPERTY`

### Constructor Summary

Constructors
Constructor and 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
`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(java.util.List<ObservableMap.PropertyEvent> events)`
`protected void` `fireMultiPropertyEvent(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)