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