Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.commons.beanutils
Class LazyDynaBean

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

All Implemented Interfaces:
  Serializable, DynaBean

Direct Known Subclasses:
  LazyDynaMap

    public class LazyDynaBean

extends Object
implements DynaBean, Serializable

DynaBean which automatically adds properties to the `DynaClass` and provides Lazy List and Lazy Map features.

DynaBeans deal with three types of properties - simple, indexed and mapped and have the following `get()` and `set()` methods for each of these types:

- Simple property methods - `get(name)` and `set(name, value)`
- Indexed property methods - `get(name, index)` and `set(name, index, value)`
- Mapped property methods - `get(name, key)` and `set(name, key, value)`

Getting Property Values

Calling any of the `get()` methods, for a property which doesn't exist, returns `null` in this implementation.

Setting Simple Properties

The `LazyDynaBean` will automatically add a property to the `DynaClass` if it doesn't exist when the `set(name, value)` method is called.

`DynaBean myBean = new LazyDynaBean();` `myBean.set("myProperty", "myValue");`

Setting Indexed Properties

If the property doesn't exist, the `LazyDynaBean` will automatically add a property with an `ArrayList` type to the `DynaClass` when the `set(name, index, value)` method is called. It will also instantiate a new `ArrayList` and automatically grow the `List` so that it is big enough to accomodate the index being set. `ArrayList` is the default indexed property that LazyDynaBean uses but this can be easily changed by overriding the `defaultIndexedProperty(name)` method.

`DynaBean myBean = new LazyDynaBean();` `myBean.set("myIndexedProperty", 0, "myValue1");` `myBean.set("myIndexedProperty", 1, "myValue2");`

If the indexed property does exist in the `DynaClass` but is set to `null` in the `LazyDynaBean`, then it will instantiate a new `List` or `Array` as specified by the property's type in the `DynaClass` and automatically grow the `List` or `Array` so that it is big enough to accomodate the index being set.

`DynaBean myBean = new LazyDynaBean();` `MutableDynaClass myClass = (MutableDynaClass)myBean.getDynaClass();` `myClass.add("myIndexedProperty", int[].class);` `myBean.set("myIndexedProperty", 0, new Integer(10));` `myBean.set("myIndexedProperty", 1, new Integer(20));`

Setting Mapped Properties

If the property doesn't exist, the `LazyDynaBean` will automatically add a property with a `HashMap` type to the `DynaClass` and instantiate a new `HashMap` in the DynaBean when the `set(name, key, value)` method is called. `HashMap` is the default mapped property that LazyDynaBean uses but this can be easily changed by overriding the `defaultMappedProperty(name)` method.

`DynaBean myBean = new LazyDynaBean();` `myBean.set("myMappedProperty", "myKey", "myValue");`

If the mapped property does exist in the `DynaClass` but is set to `null` in the `LazyDynaBean`, then it will instantiate a new `Map` as specified by the property's type in the `DynaClass`.

`DynaBean myBean = new LazyDynaBean();` `MutableDynaClass myClass = (MutableDynaClass)myBean.getDynaClass();` `myClass.add("myMappedProperty", TreeMap.class);` `myBean.set("myMappedProperty", "myKey", "myValue");`

Restricted DynaClass

`MutableDynaClass` have a facility to restrict the `DynaClass` so that its properties cannot be modified. If the `MutableDynaClass` is restricted then calling any of the `set()` methods for a property which doesn't exist will result in a `IllegalArgumentException` being thrown.

Author:
  Niall Pemberton
See Also:
  `LazyDynaClass`, Serialized Form

Field Summary
`protected static BigDecimal` | `BigDecimal_ZERO` BigDecimal Zero
`protected static BigInteger` | `BigInteger_ZERO` BigInteger Zero
`protected static Byte` | `Byte_ZERO` Byte Zero
`protected static Character` | `Character_SPACE` Character Space
`protected static Double` | `Double_ZERO` Double Zero
`protected MutableDynaClass` | `dynaClass` The `MutableDynaClass` "base class" that this DynaBean is associated with.
`protected static Float` | `Float_ZERO` Float Zero
`protected static Integer` | `Integer_ZERO` Integer Zero
`protected static Long` | `Long_ZERO` Long Zero
`protected static Short` | `Short_ZERO` Short Zero
`protected Map` | `values` The `MutableDynaClass` "base class" that this DynaBean is associated with.

Constructor Summary
`LazyDynaBean()` Construct a new `LazyDynaBean` with a `LazyDynaClass` instance.
`LazyDynaBean(DynaClass dynaClass)` Construct a new `DynaBean` associated with the specified `DynaClass` instance - if its not a `MutableDynaClass` then a new `LazyDynaClass` is created and the properties copied.
`LazyDynaBean(String name)` Construct a new `LazyDynaBean` with a `LazyDynaClass` instance.

Method Summary
`boolean` | `contains(String name, String key)` Does the specified mapped property contain a value for the specified key value?
`protected Object` | `createDynaBeanProperty(String name, Class type)` Create a new Instance of a 'DynaBean' Property.
`protected Object` | `createIndexedProperty(String name, Class type)` Create a new Instance of an 'Indexed' Property
`protected Object` | `createMappedProperty(String name, Class type)` Create a new Instance of a 'Mapped' Property
`protected Object` | `createNumberProperty(String name, Class type)` Create a new Instance of a `java.lang.Number` Property.
`protected Object` | `createOtherProperty(String name, Class type)` Create a new Instance of other Property types
`protected Object` | `createPrimitiveProperty(String name, Class type)` Create a new Instance of a 'Primitive' Property.
`protected Object` | `createProperty(String name, Class type)` Create a new Instance of a Property
`protected Object` | `defaultIndexedProperty(String name)` Creates a new `ArrayList` for an 'indexed' property which doesn't exist.
`protected Map` | `defaultMappedProperty(String name)` Creates a new `HashMap` for a 'mapped' property which doesn't exist.
`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.
`DynaClass` | `getDynaClass()` Return the `DynaClass` instance that describes the set of properties available for this DynaBean.
`Map` | `getMap()` Return a Map representation of this DynaBean.
`protected Object` | `growIndexedProperty(String name, Object indexedProperty, int index)` Grow the size of an indexed property
`protected boolean` | `isAssignable(Class dest, Class source)` Is an object of the source class assignable to the destination class?
`protected boolean` | `isDynaProperty(String name)` Indicates if there is a property with the specified name.
`protected Map` | `newMap()` Creates a new instance of the `Map`.
`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.
`int` | `size(String name)` Return the size of an indexed or mapped property.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### BigInteger_ZERO

    protected static final BigInteger BigInteger_ZERO

  BigInteger Zero

### BigDecimal_ZERO

    protected static final BigDecimal BigDecimal_ZERO

  BigDecimal Zero

### Character_SPACE

    protected static final Character Character_SPACE

  Character Space

### Byte_ZERO

    protected static final Byte Byte_ZERO

  Byte Zero

### Short_ZERO

    protected static final Short Short_ZERO

  Short Zero

### Integer_ZERO

    protected static final Integer Integer_ZERO

  Integer Zero

### Long_ZERO

    protected static final Long Long_ZERO

  Long Zero

### Float_ZERO

    protected static final Float Float_ZERO

  Float Zero

### Double_ZERO

    protected static final Double Double_ZERO

  Double Zero

### values

    protected Map values

  The `MutableDynaClass` "base class" that this DynaBean is associated with.

### dynaClass

    protected MutableDynaClass dynaClass

  The `MutableDynaClass` "base class" that this DynaBean is associated with.

Constructor Detail

### LazyDynaBean

    public LazyDynaBean()

  Construct a new `LazyDynaBean` with a `LazyDynaClass` instance.

### LazyDynaBean

    public LazyDynaBean(String name)

  Construct a new `LazyDynaBean` with a `LazyDynaClass` instance.

  Parameters:
    `name` - Name of this DynaBean class

### LazyDynaBean

    public LazyDynaBean(DynaClass dynaClass)

  Construct a new `DynaBean` associated with the specified `DynaClass` instance - if its not a `MutableDynaClass` then a new `LazyDynaClass` is created and the properties copied.

  Parameters:
    `dynaClass` - The DynaClass we are associated with

Method Detail

### getMap

    public Map 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

### size

    public int size(String name)

  Return the size of an indexed or mapped property.

  Parameters:
    `name` - Name of the property
  Returns:
    The indexed or mapped property size
  Throws:
    `IllegalArgumentException` - if no property name is specified

### 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 no property name is specified

### get

    public Object get(String name)

  Return the value of a simple property with the specified name.

  N.B. Returns `null` if there is no property of 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 no property name is specified

### get

    public Object get(String name,
                      int index)

  Return the value of an indexed property with the specified name.

  N.B. Returns `null` if there is no 'indexed' property of 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 the specified property exists, but is not indexed
    `IndexOutOfBoundsException` - if the specified index is outside the range of the underlying property

### get

    public Object get(String name,
                      String key)

  Return the value of a mapped property with the specified name.

  N.B. Returns `null` if there is no 'mapped' property of the specified name.

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

### 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,
                    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:
    `IllegalArgumentException` - if this is not an existing property name for our DynaClass and the MutableDynaClass is restricted
    `ConversionException` - if the specified value cannot be converted to the type required for this property
    `NullPointerException` - if an attempt is made to set a primitive property to null

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

### growIndexedProperty

    protected Object growIndexedProperty(String name,
                                         Object indexedProperty,
                                         int index)

  Grow the size of an indexed property

  Parameters:
    `name` - The name of the property
    `indexedProperty` - The current property value
    `index` - The indexed value to grow the property to (i.e. one less than the required size)
  Returns:
    The new property value (grown to the appropriate size)

### createProperty

    protected Object createProperty(String name,
                                    Class type)

  Create a new Instance of a Property

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### createIndexedProperty

    protected Object createIndexedProperty(String name,
                                           Class type)

  Create a new Instance of an 'Indexed' Property

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### createMappedProperty

    protected Object createMappedProperty(String name,
                                          Class type)

  Create a new Instance of a 'Mapped' Property

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### createDynaBeanProperty

    protected Object createDynaBeanProperty(String name,
                                            Class type)

  Create a new Instance of a 'DynaBean' Property.

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### createPrimitiveProperty

    protected Object createPrimitiveProperty(String name,
                                             Class type)

  Create a new Instance of a 'Primitive' Property.

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### createNumberProperty

    protected Object createNumberProperty(String name,
                                          Class type)

  Create a new Instance of a `java.lang.Number` Property.

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### createOtherProperty

    protected Object createOtherProperty(String name,
                                         Class type)

  Create a new Instance of other Property types

  Parameters:
    `name` - The name of the property
    `type` - The class of the property
  Returns:
    The new value

### defaultIndexedProperty

    protected Object defaultIndexedProperty(String name)

  Creates a new `ArrayList` for an 'indexed' property which doesn't exist.

  This method shouls be overriden if an alternative `List` or `Array` implementation is required for 'indexed' properties.

  Parameters:
    `name` - Name of the 'indexed property.
  Returns:
    The default value for an indexed property (java.util.ArrayList)

### defaultMappedProperty

    protected Map defaultMappedProperty(String name)

  Creates a new `HashMap` for a 'mapped' property which doesn't exist.

  This method can be overriden if an alternative `Map` implementation is required for 'mapped' properties.

  Parameters:
    `name` - Name of the 'mapped property.
  Returns:
    The default value for a mapped property (java.util.HashMap)

### isDynaProperty

    protected boolean isDynaProperty(String name)

  Indicates if there is a property with the specified name.

  Parameters:
    `name` - The name of the property to check
  Returns:
    `true`if there is a property of the specified name, otherwise `false```

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

### newMap

    protected Map newMap()

  Creates a new instance of the `Map`.

  Returns:
    a new Map instance

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2000-2009 The Apache Software Foundation. All Rights Reserved.