Package org.apache.commons.beanutils

# Class BasicDynaBean

java.lang.Object
org.apache.commons.beanutils.BasicDynaBean

All Implemented Interfaces:
  `Serializable`, `DynaBean`

public class BasicDynaBean extends Object implements DynaBean, Serializable

Minimal implementation of the `DynaBean` interface. Can be used as a convenience base class for more sophisticated implementations.

IMPLEMENTATION NOTE - Instances of this class that are accessed from multiple threads simultaneously need to be synchronized.

IMPLEMENTATION NOTE - Instances of this class can be successfully serialized and deserialized ONLY if all property values are `Serializable`.

See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected DynaClass`
  `dynaClass`
  The `DynaClass` "base class" that this DynaBean is associated with.
  `protected HashMap<String,Object>`
  `values`
  The set of property values for this DynaBean, keyed by property name.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `BasicDynaBean(DynaClass dynaClass)`
  Construct a new `DynaBean` associated with the specified `DynaClass` instance.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `contains(String name, String key)`
  Does the specified mapped property contain a value for the specified key value?
  `Object`
  `get(String name)`
  Return the value of a simple property with the specified name.
  `Object`
  `get(String name, int index)`
  Return the value of an indexed property with the specified name.
  `Object`
  `get(String name, String key)`
  Return the value of a mapped property with the specified name, or `null` if there is no value for the specified key.
  `DynaClass`
  `getDynaClass()`
  Return the `DynaClass` instance that describes the set of properties available for this DynaBean.
  `protected DynaProperty`
  `getDynaProperty(String name)`
  Return the property descriptor for the specified property name.
  `Map<String,Object>`
  `getMap()`
  Return a Map representation of this DynaBean.
  `protected boolean`
  `isAssignable(Class<?> dest, Class<?> source)`
  Is an object of the source class assignable to the destination class?
  `void`
  `remove(String name, String key)`
  Remove any existing value for the specified key on the specified mapped property.
  `void`
  `set(String name, int index, Object value)`
  Set the value of an indexed property with the specified name.
  `void`
  `set(String name, Object value)`
  Set the value of a simple property with the specified name.
  `void`
  `set(String name, String key, Object value)`
  Set the value of a mapped property with the specified name.

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

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

- ## Field Details

  - ### dynaClass

    protected DynaClass dynaClass
    The `DynaClass` "base class" that this DynaBean is associated with.

  - ### values

    protected HashMap<String,Object> values
    The set of property values for this DynaBean, keyed by property name.

- ## Constructor Details

  - ### BasicDynaBean

    public BasicDynaBean(DynaClass dynaClass)
    Construct a new `DynaBean` associated with the specified `DynaClass` instance.
    Parameters:
      `dynaClass` - The DynaClass we are associated with

- ## Method Details

  - ### contains

    public boolean contains(String name, String key)
    Does the specified mapped property contain a value for the specified key value?
    Specified by:
      `contains` in interface `DynaBean`
    Parameters:
      `name` - Name of the property to check
      `key` - Name of the key to check
    Returns:
      `true` if the mapped property contains a value for the specified key, otherwise `false`
    Throws:
      `IllegalArgumentException` - if there is no property of the specified name

  - ### get

    public Object get(String name)
    Return the value of a simple property with the specified name.
    Specified by:
      `get` in interface `DynaBean`
    Parameters:
      `name` - Name of the property whose value is to be retrieved
    Returns:
      The property's value
    Throws:
      `IllegalArgumentException` - if there is no property of the specified name

  - ### get

    public Object get(String name, int index)
    Return the value of an indexed property with the specified name.
    Specified by:
      `get` in interface `DynaBean`
    Parameters:
      `name` - Name of the property whose value is to be retrieved
      `index` - Index of the value to be retrieved
    Returns:
      The indexed property's value
    Throws:
      `IllegalArgumentException` - if there is no property of the specified name
      `IllegalArgumentException` - if the specified property exists, but is not indexed
      `IndexOutOfBoundsException` - if the specified index is outside the range of the underlying property
      `NullPointerException` - if no array or List has been initialized for this property

  - ### get

    public Object get(String name, String key)
    Return the value of a mapped property with the specified name, or `null` if there is no value for the specified key.
    Specified by:
      `get` in interface `DynaBean`
    Parameters:
      `name` - Name of the property whose value is to be retrieved
      `key` - Key of the value to be retrieved
    Returns:
      The mapped property's value
    Throws:
      `IllegalArgumentException` - if there is no property of the specified name
      `IllegalArgumentException` - if the specified property exists, but is not mapped

  - ### getDynaClass

    public DynaClass getDynaClass()
    Return the `DynaClass` instance that describes the set of properties available for this DynaBean.
    Specified by:
      `getDynaClass` in interface `DynaBean`
    Returns:
      The associated DynaClass

  - ### getDynaProperty

    protected DynaProperty getDynaProperty(String name)
    Return the property descriptor for the specified property name.
    Parameters:
      `name` - Name of the property for which to retrieve the descriptor
    Returns:
      The property descriptor
    Throws:
      `IllegalArgumentException` - if this is not a valid property name for our DynaClass

  - ### getMap

    public Map<String,Object> getMap()
    Return a Map representation of this DynaBean.

    This, for example, could be used in JSTL in the following way to access a DynaBean's `fooProperty`:

    - `${myDynaBean.map.fooProperty}`
    Returns:
      a Map representation of this DynaBean
    Since:
      1.8.0

  - ### isAssignable

    protected boolean isAssignable(Class<?> dest, Class<?> source)
    Is an object of the source class assignable to the destination class?
    Parameters:
      `dest` - Destination class
      `source` - Source class
    Returns:
      `true` if the source class is assignable to the destination class, otherwise `false`

  - ### remove

    public void remove(String name, String key)
    Remove any existing value for the specified key on the specified mapped property.
    Specified by:
      `remove` in interface `DynaBean`
    Parameters:
      `name` - Name of the property for which a value is to be removed
      `key` - Key of the value to be removed
    Throws:
      `IllegalArgumentException` - if there is no property of the specified name

  - ### set

    public void set(String name, int index, Object value)
    Set the value of an indexed property with the specified name.
    Specified by:
      `set` in interface `DynaBean`
    Parameters:
      `name` - Name of the property whose value is to be set
      `index` - Index of the property to be set
      `value` - Value to which this property is to be set
    Throws:
      `ConversionException` - if the specified value cannot be converted to the type required for this property
      `IllegalArgumentException` - if there is no property of the specified name
      `IllegalArgumentException` - if the specified property exists, but is not indexed
      `IndexOutOfBoundsException` - if the specified index is outside the range of the underlying property

  - ### set

    public void set(String name, Object value)
    Set the value of a simple property with the specified name.
    Specified by:
      `set` in interface `DynaBean`
    Parameters:
      `name` - Name of the property whose value is to be set
      `value` - Value to which this property is to be set
    Throws:
      `ConversionException` - if the specified value cannot be converted to the type required for this property
      `IllegalArgumentException` - if there is no property of the specified name
      `NullPointerException` - if an attempt is made to set a primitive property to null

  - ### set

    public void set(String name, String key, Object value)
    Set the value of a mapped property with the specified name.
    Specified by:
      `set` in interface `DynaBean`
    Parameters:
      `name` - Name of the property whose value is to be set
      `key` - Key of the property to be set
      `value` - Value to which this property is to be set
    Throws:
      `ConversionException` - if the specified value cannot be converted to the type required for this property
      `IllegalArgumentException` - if there is no property of the specified name
      `IllegalArgumentException` - if the specified property exists, but is not mapped