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

The motivation for this implementation is to provide access to DynaBean properties in technologies that are unaware of BeanUtils and DynaBeans - 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
Version:
$Id$
  • Field Details

    • dynaBean

      private final DynaBean dynaBean
    • readOnly

      private final boolean readOnly
    • keySet

      private transient Set<K> keySet
  • 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

    • isReadOnly

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

      public void clear()
      clear() operation is not supported.
      Specified by:
      clear in interface Map<K,Object>
      Throws:
      UnsupportedOperationException
    • 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.
    • 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.
    • 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.
    • keySet

      public Set<K> keySet()

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

      N.B.For DynaBeans 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 DynaBeans 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)
      remove() operation is not supported.
      Specified by:
      remove in interface Map<K,Object>
      Parameters:
      key - The DynaBean's property name
      Returns:
      the value removed
      Throws:
      UnsupportedOperationException
    • 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.
    • getDynaBean

      public DynaBean getDynaBean()
      Provide access to the underlying DynaBean this Map decorates.
      Returns:
      the decorated DynaBean.
    • 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
    • getDynaProperties

      private DynaProperty[] getDynaProperties()
      Convenience method to retrieve the DynaPropertys for this DynaClass.
      Returns:
      The an array of the DynaPropertys.
    • toString

      private String toString(Object obj)
      Convenience method to convert an Object to a String.
      Parameters:
      obj - The Object to convert
      Returns:
      String representation of the object