Package org.apache.commons.beanutils

# Class BaseDynaBeanMapDecorator<K>

java.lang.Object
org.apache.commons.beanutils.BaseDynaBeanMapDecorator<K>

Type Parameters:
  `K` - the type of the keys in the decorated map

All Implemented Interfaces:
  `Map<K,Object>`

Direct Known Subclasses:
  `DynaBeanMapDecorator`, `DynaBeanPropertyMapDecorator`

public abstract class BaseDynaBeanMapDecorator<K> extends Object implements Map<K,Object>

A base class for decorators providing `Map` behavior on `DynaBean`s.

The motivation for this implementation is to provide access to `DynaBean` properties in technologies that are unaware of BeanUtils and `DynaBean`s - such as the expression languages of JSTL and JSF.

This rather technical base class implements the methods of the `Map` interface on top of a `DynaBean`. It was introduced to handle generic parameters in a meaningful way without breaking backwards compatibility of the `DynaBeanMapDecorator` class: A map wrapping a `DynaBean` should be of type `Map<String, Object>`. However, when using these generic parameters in `DynaBeanMapDecorator` this would be an incompatible change (as method signatures would have to be adapted). To solve this problem, this generic base class is added which allows specifying the key type as parameter. This makes it easy to have a new subclass using the correct generic parameters while `DynaBeanMapDecorator` could still remain with compatible parameters.

Since:
  BeanUtils 1.9.0

- ## Nested Class Summary

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

  `Map.Entry<K extends Object,V extends Object>`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BaseDynaBeanMapDecorator(DynaBean dynaBean)`
  Constructs a read only Map for the specified `DynaBean`.
  `BaseDynaBeanMapDecorator(DynaBean dynaBean, boolean readOnly)`
  Construct a Map for the specified `DynaBean`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `clear()`
  Always throws UnsupportedOperationException because this operation is unsupported.
  `boolean`
  `containsKey(Object key)`
  Indicate whether the `DynaBean` contains a specified value for one (or more) of its properties.
  `boolean`
  `containsValue(Object value)`
  Indicates whether the decorated `DynaBean` contains a specified value.
  `protected abstract K`
  `convertKey(String propertyName)`
  Converts the name of a property to the key type of this decorator.
  `Set<Map.Entry<K,Object>>`
  `entrySet()`
  Returns the Set of the property/value mappings in the decorated `DynaBean`.
  `Object`
  `get(Object key)`
  Return the value for the specified key from the decorated `DynaBean`.
  `DynaBean`
  `getDynaBean()`
  Provide access to the underlying `DynaBean` this Map decorates.
  `boolean`
  `isEmpty()`
  Indicate whether the decorated `DynaBean` has any properties.
  `boolean`
  `isReadOnly()`
  Indicate whether the Map is read only.
  `Set<K>`
  `keySet()`
  Returns the Set of the property names in the decorated `DynaBean`.
  `Object`
  `put(K key, Object value)`
  Set the value for the specified property in the decorated `DynaBean`.
  `void`
  `putAll(Map<? extends K,? extends Object> map)`
  Copy the contents of a Map to the decorated `DynaBean`.
  `Object`
  `remove(Object key)`
  Always throws UnsupportedOperationException because this operation is unsupported.
  `int`
  `size()`
  Returns the number properties in the decorated `DynaBean`.
  `Collection<Object>`
  `values()`
  Returns the set of property values in the decorated `DynaBean`.

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

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

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

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

- ## Constructor Details

  - ### BaseDynaBeanMapDecorator

    public BaseDynaBeanMapDecorator(DynaBean dynaBean)
    Constructs a read only Map for the specified `DynaBean`.
    Parameters:
      `dynaBean` - The dyna bean being decorated
    Throws:
      `IllegalArgumentException` - if the `DynaBean` is null.

  - ### BaseDynaBeanMapDecorator

    public BaseDynaBeanMapDecorator(DynaBean dynaBean, boolean readOnly)
    Construct a Map for the specified `DynaBean`.
    Parameters:
      `dynaBean` - The dyna bean being decorated
      `readOnly` - `true` if the Map is read only otherwise `false`
    Throws:
      `IllegalArgumentException` - if the `DynaBean` is null.

- ## Method Details

  - ### clear

    public void clear()
    Always throws UnsupportedOperationException because this operation is unsupported.
    Specified by:
      `clear` in interface `Map<K,Object>`
    Throws:
      `UnsupportedOperationException` - Always thrown.

  - ### containsKey

    public boolean containsKey(Object key)
    Indicate whether the `DynaBean` contains a specified value for one (or more) of its properties.
    Specified by:
      `containsKey` in interface `Map<K,Object>`
    Parameters:
      `key` - The `DynaBean`'s property name
    Returns:
      `true` if one of the `DynaBean`'s properties contains a specified value.

  - ### containsValue

    public boolean containsValue(Object value)
    Indicates whether the decorated `DynaBean` contains a specified value.
    Specified by:
      `containsValue` in interface `Map<K,Object>`
    Parameters:
      `value` - The value to check for.
    Returns:
      `true` if one of the the `DynaBean`'s properties contains the specified value, otherwise `false`.

  - ### convertKey

    protected abstract K convertKey(String propertyName)
    Converts the name of a property to the key type of this decorator.
    Parameters:
      `propertyName` - the name of a property
    Returns:
      the converted key to be used in the decorated map

  - ### entrySet

    public Set<Map.Entry<K,Object>> entrySet()

    Returns the Set of the property/value mappings in the decorated `DynaBean`.

    Each element in the Set is a `Map.Entry` type.

    Specified by:
      `entrySet` in interface `Map<K,Object>`
    Returns:
      An unmodifiable set of the DynaBean property name/value pairs

  - ### get

    public Object get(Object key)
    Return the value for the specified key from the decorated `DynaBean`.
    Specified by:
      `get` in interface `Map<K,Object>`
    Parameters:
      `key` - The `DynaBean`'s property name
    Returns:
      The value for the specified property.

  - ### getDynaBean

    public DynaBean getDynaBean()
    Provide access to the underlying `DynaBean` this Map decorates.
    Returns:
      the decorated `DynaBean`.

  - ### isEmpty

    public boolean isEmpty()
    Indicate whether the decorated `DynaBean` has any properties.
    Specified by:
      `isEmpty` in interface `Map<K,Object>`
    Returns:
      `true` if the `DynaBean` has no properties, otherwise `false`.

  - ### isReadOnly

    public boolean isReadOnly()
    Indicate whether the Map is read only.
    Returns:
      `true` if the Map is read only, otherwise `false`.

  - ### keySet

    public Set<K> keySet()

    Returns the Set of the property names in the decorated `DynaBean`.

    N.B.For `DynaBean`s whose associated `DynaClass` is a `MutableDynaClass` a new Set is created every time, otherwise the Set is created only once and cached.

    Specified by:
      `keySet` in interface `Map<K,Object>`
    Returns:
      An unmodifiable set of the `DynaBean`s property names.

  - ### put

    public Object put(K key, Object value)
    Set the value for the specified property in the decorated `DynaBean`.
    Specified by:
      `put` in interface `Map<K,Object>`
    Parameters:
      `key` - The `DynaBean`'s property name
      `value` - The value for the specified property.
    Returns:
      The previous property's value.
    Throws:
      `UnsupportedOperationException` - if `isReadOnly()` is true.

  - ### putAll

    public void putAll(Map<? extends K,? extends Object> map)
    Copy the contents of a Map to the decorated `DynaBean`.
    Specified by:
      `putAll` in interface `Map<K,Object>`
    Parameters:
      `map` - The Map of values to copy.
    Throws:
      `UnsupportedOperationException` - if `isReadOnly()` is true.

  - ### remove

    public Object remove(Object key)
    Always throws UnsupportedOperationException because this operation is unsupported.
    Specified by:
      `remove` in interface `Map<K,Object>`
    Parameters:
      `key` - The `DynaBean`'s property name.
    Returns:
      the value removed.
    Throws:
      `UnsupportedOperationException` - Always thrown.

  - ### size

    public int size()
    Returns the number properties in the decorated `DynaBean`.
    Specified by:
      `size` in interface `Map<K,Object>`
    Returns:
      The number of properties.

  - ### values

    public Collection<Object> values()
    Returns the set of property values in the decorated `DynaBean`.
    Specified by:
      `values` in interface `Map<K,Object>`
    Returns:
      Unmodifiable collection of values.