Package 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

Bound properties

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

Author:
  Andres Almiray

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static enum`
`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

`Map.Entry<K,V>`

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`CLEARED_PROPERTY`
`static final String`
`CONTENT_PROPERTY`
`static final String`
`SIZE_PROPERTY`

## Constructor Summary

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

## Method Summary

Modifier and Type
Method
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)`
`protected void`
`fireMultiPropertyEvent(ObservableMap.PropertyEvent[] events)`
`protected void`
`fireMultiPropertyEvent(List<ObservableMap.PropertyEvent> events)`
`protected void`
`firePropertyAddedEvent(Object key, Object value)`
`protected void`
`firePropertyClearedEvent(Map values)`
`protected void`
`firePropertyEvent(ObservableMap.PropertyEvent event)`
`protected void`
`firePropertyRemovedEvent(Object key, Object value)`
`protected void`
`firePropertyUpdatedEvent(Object key, Object oldValue, Object newValue)`
`protected void`
`fireSizeChangedEvent(int oldValue, int newValue)`
`Object`
`get(Object key)`
`Map`
`getContent()`
`protected Map`
`getMapDelegate()`
`PropertyChangeListener[]`
`getPropertyChangeListeners()`
`PropertyChangeListener[]`
`getPropertyChangeListeners(String propertyName)`
`int`
`getSize()`
`protected Closure`
`getTest()`
`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`

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

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

## Field Details

### SIZE_PROPERTY

public static final String SIZE_PROPERTY

See Also:
  - Constant Field Values

### CONTENT_PROPERTY

public static final String CONTENT_PROPERTY

See Also:
  - Constant Field Values

### CLEARED_PROPERTY

public static final String CLEARED_PROPERTY

See Also:
  - Constant Field Values

## Constructor Details

### ObservableMap

public ObservableMap()

### ObservableMap

public ObservableMap(Closure test)

### ObservableMap

public ObservableMap(Map delegate)

### ObservableMap

public ObservableMap(Map delegate, Closure test)

## Method Details

### getMapDelegate

protected Map getMapDelegate()

### getTest

protected Closure getTest()

### getContent

public Map getContent()

### firePropertyClearedEvent

protected void firePropertyClearedEvent(Map values)

### firePropertyAddedEvent

protected void firePropertyAddedEvent(Object key, Object value)

### firePropertyUpdatedEvent

protected void firePropertyUpdatedEvent(Object key, Object oldValue, Object newValue)

### fireMultiPropertyEvent

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

### fireMultiPropertyEvent

protected void fireMultiPropertyEvent(ObservableMap.PropertyEvent[] events)

### firePropertyRemovedEvent

protected void firePropertyRemovedEvent(Object key, 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 `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`

### getSize

public int getSize()

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