org.apache.commons.beanutils

Class LazyDynaList


public class LazyDynaList
extends ArrayList

Lazy DynaBean List.

There are two main purposes for this class:

All elements added to the List are stored as DynaBean's:

toArray()

The toArray() method returns an array of the elements of the appropriate type. If the LazyDynaList is populated with java.util.Map objects a Map[] array is returned. If the list is populated with POJO Beans an appropriate array of the POJO Beans is returned. Otherwise a DynaBean[] array is returned.

toDynaBeanArray()

The toDynaBeanArray() method returns a DynaBean[] array of the elements in the List.

N.B.All the elements in the List must be the same type. If the DynaClass or Class of the LazyDynaList's elements is not specified, then it will be automatically set to the type of the first element populated.

Example 1

If you have an array of java.util.Map[] - you can put that into a LazyDynaList.


    TreeMap[] myArray = .... // your Map[]
    List lazyList = new LazyDynaList(myArray);
 

New elements of the appropriate Map type are automatically populated:


    // get(index) automatically grows the list
    DynaBean newElement = (DynaBean)lazyList.get(lazyList.size());
    newElement.put("someProperty", "someValue");
 

Once you've finished you can get back an Array of the elements of the appropriate type:


    // Retrieve the array from the list
    TreeMap[] myArray = (TreeMap[])lazyList.toArray());
 

Example 2

Alternatively you can create an empty List and specify the Class for List's elements. The LazyDynaList uses the Class to automatically populate elements:


    // e.g. For Maps
    List lazyList = new LazyDynaList(TreeMap.class);
 
    // e.g. For POJO Beans
    List lazyList = new LazyDynaList(MyPojo.class);
 
    // e.g. For DynaBeans
    List lazyList = new LazyDynaList(MyDynaBean.class);
 

Example 3

Alternatively you can create an empty List and specify the DynaClass for List's elements. The LazyDynaList uses the DynaClass to automatically populate elements:


    // e.g. For Maps
    DynaClass dynaClass = new LazyDynaMap(new HashMap());
    List lazyList = new LazyDynaList(dynaClass);
 
    // e.g. For POJO Beans
    DynaClass dynaClass = (new WrapDynaBean(myPojo)).getDynaClass();
    List lazyList = new LazyDynaList(dynaClass);
 
    // e.g. For DynaBeans
    DynaClass dynaClass = new BasicDynaClass(properties);
    List lazyList = new LazyDynaList(dynaClass);
 

N.B. You may wonder why control the type using a DynaClass rather than the Class as in the previous example - the reason is that some DynaBean implementations don't have a default empty constructor and therefore need to be instantiated using the DynaClass.newInstance() method.

Example 4

A slight variation - set the element type using either the setElementType(Class) method or the setElementDynaClass(DynaClass) method - then populate with the normal java.util.List methods(i.e. add(), addAll() or set()).


    // Create a new LazyDynaList (100 element capacity)
    LazyDynaList lazyList = new LazyDynaList(100);
 
    // Either Set the element type...
    lazyList.setElementType(TreeMap.class);
 
    // ...or the element DynaClass...
    lazyList.setElementDynaClass(new MyCustomDynaClass());
 
    // Populate from a collection
    lazyList.addAll(myCollection);

 
Version:
$Revision: 555824 $ $Date: 2007-07-13 01:27:15 +0100 (Fri, 13 Jul 2007) $
Author:
Niall Pemberton

Field Summary

private Class
elementDynaBeanType
The DynaBean type of the List's elements.
private DynaClass
elementDynaClass
The DynaClass of the List's elements.
private Class
elementType
The type of the List's elements.
private WrapDynaClass
wrapDynaClass
The WrapDynaClass if the List's contains POJO Bean elements.

Constructor Summary

LazyDynaList()
Default Constructor.
LazyDynaList(Class elementType)
Construct a LazyDynaList with a specified type for its elements.
LazyDynaList(Collection collection)
Construct a LazyDynaList populated with the elements of a Collection.
LazyDynaList(Object[] array)
Construct a LazyDynaList populated with the elements of an Array.
LazyDynaList(int capacity)
Construct a LazyDynaList with the specified capacity.
LazyDynaList(DynaClass elementDynaClass)
Construct a LazyDynaList with a specified DynaClass for its elements.

Method Summary

boolean
add(Object element)
Add an element to the List.
void
add(int index, Object element)
Insert an element at the specified index position.
boolean
addAll(Collection collection)
Add all the elements from a Collection to the list.
boolean
addAll(int index, Collection collection)
Insert all the elements from a Collection into the list at a specified position.
Object
get(int index)
Return the element at the specified position.
private void
growList(int requiredSize)
Automatically grown the List to the appropriate size, populating with DynaBeans.
Object
set(int index, Object element)
Set the element at the specified position.
void
setElementDynaClass(DynaClass elementDynaClass)
Set the element Type and DynaClass.
void
setElementType(Class elementType)
Set the element Type and DynaClass.
Object[]
toArray()
Converts the List to an Array.
Object[]
toArray(Object[] model)
Converts the List to an Array of the specified type.
DynaBean[]
toDynaBeanArray()
Converts the List to an DynaBean Array.
private DynaBean
transform(Object element)
Transform the element into a DynaBean:
  • Map elements are turned into LazyDynaMap's.
  • POJO Beans are "wrapped" in a WrapDynaBean.
  • DynaBeans are unchanged.

Field Details

elementDynaBeanType

private Class elementDynaBeanType
The DynaBean type of the List's elements.

elementDynaClass

private DynaClass elementDynaClass
The DynaClass of the List's elements.

elementType

private Class elementType
The type of the List's elements.

wrapDynaClass

private WrapDynaClass wrapDynaClass
The WrapDynaClass if the List's contains POJO Bean elements. N.B. WrapDynaClass isn't serlializable, which is why its stored separately in a transient instance variable.

Constructor Details

LazyDynaList

public LazyDynaList()
Default Constructor.

LazyDynaList

public LazyDynaList(Class elementType)
Construct a LazyDynaList with a specified type for its elements.
Parameters:
elementType - The Type of the List's elements.

LazyDynaList

public LazyDynaList(Collection collection)
Construct a LazyDynaList populated with the elements of a Collection.
Parameters:
collection - The Collection to poulate the List from.

LazyDynaList

public LazyDynaList(Object[] array)
Construct a LazyDynaList populated with the elements of an Array.
Parameters:
array - The Array to poulate the List from.

LazyDynaList

public LazyDynaList(int capacity)
Construct a LazyDynaList with the specified capacity.
Parameters:
capacity - The initial capacity of the list.

LazyDynaList

public LazyDynaList(DynaClass elementDynaClass)
Construct a LazyDynaList with a specified DynaClass for its elements.
Parameters:
elementDynaClass - The DynaClass of the List's elements.

Method Details

add

public boolean add(Object element)
Add an element to the List.
Parameters:
element - The new element to add.
Returns:
true.

add

public void add(int index,
                Object element)
Insert an element at the specified index position.

If the index position is greater than the current size of the List, then the List is automatically grown to the appropriate size.

Parameters:
index - The index position to insert the new element.
element - The new element to add.

addAll

public boolean addAll(Collection collection)
Add all the elements from a Collection to the list.
Parameters:
collection - The Collection of new elements.
Returns:
true if elements were added.

addAll

public boolean addAll(int index,
                      Collection collection)
Insert all the elements from a Collection into the list at a specified position.

If the index position is greater than the current size of the List, then the List is automatically grown to the appropriate size.

Parameters:
index - The index position to insert the new elements at.
collection - The Collection of new elements.
Returns:
true if elements were added.

get

public Object get(int index)
Return the element at the specified position.

If the position requested is greater than the current size of the List, then the List is automatically grown (and populated) to the appropriate size.

Parameters:
index - The index position to insert the new elements at.
Returns:
The element at the specified position.

growList

private void growList(int requiredSize)
Automatically grown the List to the appropriate size, populating with DynaBeans.
Parameters:
requiredSize - the required size of the List.

set

public Object set(int index,
                  Object element)
Set the element at the specified position.

If the position requested is greater than the current size of the List, then the List is automatically grown (and populated) to the appropriate size.

Parameters:
index - The index position to insert the new element at.
element - The new element.
Returns:
The new element.

setElementDynaClass

public void setElementDynaClass(DynaClass elementDynaClass)
Set the element Type and DynaClass.
Parameters:
elementDynaClass - The DynaClass of the elements.

setElementType

public void setElementType(Class elementType)
Set the element Type and DynaClass.
Parameters:
elementType - The type of the elements.

toArray

public Object[] toArray()
Converts the List to an Array.

The type of Array created depends on the contents of the List:

  • If the List contains only LazyDynaMap type elements then a java.util.Map[] array will be created.
  • If the List contains only elements which are "wrapped" DynaBeans then an Object[] of the most suitable type will be created.
  • ...otherwise a DynaBean[] will be created.
Returns:
An Array of the elements in this List.

toArray

public Object[] toArray(Object[] model)
Converts the List to an Array of the specified type.
Parameters:
model - The model for the type of array to return
Returns:
An Array of the elements in this List.

toDynaBeanArray

public DynaBean[] toDynaBeanArray()
Converts the List to an DynaBean Array.
Returns:
A DynaBean[] of the elements in this List.

transform

private DynaBean transform(Object element)
Transform the element into a DynaBean:
  • Map elements are turned into LazyDynaMap's.
  • POJO Beans are "wrapped" in a WrapDynaBean.
  • DynaBeans are unchanged.
Parameters:
element - The element to transformt.

Copyright (c) 2001-2007 - Apache Software Foundation