Class BasicDynaClass

  • All Implemented Interfaces:
    java.io.Serializable, DynaClass
    Direct Known Subclasses:
    LazyDynaClass

    public class BasicDynaClass
    extends java.lang.Object
    implements DynaClass, java.io.Serializable

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

    *

    IMPLEMENTATION NOTE - The DynaBean implementation class supplied to our constructor MUST have a one-argument constructor of its own that accepts a DynaClass. This is used to associate the DynaBean instance with this DynaClass.

    Version:
    $Id: BasicDynaClass.java 1540186 2013-11-08 21:08:30Z oheger $
    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.lang.reflect.Constructor<?> constructor
      The constructor of the dynaBeanClass that we will use for creating new instances.
      protected static java.lang.Class<?>[] constructorTypes
      The method signature of the constructor we will use to create new DynaBean instances.
      protected java.lang.Object[] constructorValues
      The argument values to be passed to the constructore we will use to create new DynaBean instances.
      protected java.lang.Class<?> dynaBeanClass
      The DynaBean implementation class we will use for creating new instances.
      protected java.lang.String name
      The "name" of this DynaBean class.
      protected DynaProperty[] properties
      The set of dynamic properties that are part of this DynaClass.
      protected java.util.HashMap<java.lang.String,​DynaProperty> propertiesMap
      The set of dynamic properties that are part of this DynaClass, keyed by the property name.
    • Constructor Summary

      Constructors 
      Constructor Description
      BasicDynaClass()
      Construct a new BasicDynaClass with default parameters.
      BasicDynaClass​(java.lang.String name, java.lang.Class<?> dynaBeanClass)
      Construct a new BasicDynaClass with the specified parameters.
      BasicDynaClass​(java.lang.String name, java.lang.Class<?> dynaBeanClass, DynaProperty[] properties)
      Construct a new BasicDynaClass with the specified parameters.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      java.lang.Class<?> getDynaBeanClass()
      Return the Class object we will use to create new instances in the newInstance() method.
      DynaProperty[] getDynaProperties()
      Return an array of ProperyDescriptors for the properties currently defined in this DynaClass.
      DynaProperty getDynaProperty​(java.lang.String name)
      Return a property descriptor for the specified property, if it exists; otherwise, return null.
      java.lang.String getName()
      Return the name of this DynaClass (analogous to the getName() method of java.lang.ClassDynaClass implementation class to support different dynamic classes, with different sets of properties.
      DynaBean newInstance()
      Instantiate and return a new DynaBean instance, associated with this DynaClass.
      protected void setDynaBeanClass​(java.lang.Class<?> dynaBeanClass)
      Set the Class object we will use to create new instances in the newInstance() method.
      protected void setProperties​(DynaProperty[] properties)
      Set the list of dynamic properties supported by this DynaClass.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • constructor

        protected transient java.lang.reflect.Constructor<?> constructor
        The constructor of the dynaBeanClass that we will use for creating new instances.
      • constructorTypes

        protected static java.lang.Class<?>[] constructorTypes
        The method signature of the constructor we will use to create new DynaBean instances.
      • constructorValues

        protected java.lang.Object[] constructorValues
        The argument values to be passed to the constructore we will use to create new DynaBean instances.
      • dynaBeanClass

        protected java.lang.Class<?> dynaBeanClass
        The DynaBean implementation class we will use for creating new instances.
      • name

        protected java.lang.String name
        The "name" of this DynaBean class.
      • properties

        protected DynaProperty[] properties
        The set of dynamic properties that are part of this DynaClass.
      • propertiesMap

        protected java.util.HashMap<java.lang.String,​DynaProperty> propertiesMap
        The set of dynamic properties that are part of this DynaClass, keyed by the property name. Individual descriptor instances will be the same instances as those in the properties list.
    • Constructor Detail

      • BasicDynaClass

        public BasicDynaClass()
        Construct a new BasicDynaClass with default parameters.
      • BasicDynaClass

        public BasicDynaClass​(java.lang.String name,
                              java.lang.Class<?> dynaBeanClass)
        Construct a new BasicDynaClass with the specified parameters.
        Parameters:
        name - Name of this DynaBean class
        dynaBeanClass - The implementation class for new instances
      • BasicDynaClass

        public BasicDynaClass​(java.lang.String name,
                              java.lang.Class<?> dynaBeanClass,
                              DynaProperty[] properties)
        Construct a new BasicDynaClass with the specified parameters.
        Parameters:
        name - Name of this DynaBean class
        dynaBeanClass - The implementation class for new intances
        properties - Property descriptors for the supported properties
    • Method Detail

      • getName

        public java.lang.String getName()
        Return the name of this DynaClass (analogous to the getName() method of java.lang.ClassDynaClass implementation class to support different dynamic classes, with different sets of properties.
        Specified by:
        getName in interface DynaClass
        Returns:
        the name of the DynaClass
      • getDynaProperty

        public DynaProperty getDynaProperty​(java.lang.String name)
        Return a property descriptor for the specified property, if it exists; otherwise, return null.
        Specified by:
        getDynaProperty in interface DynaClass
        Parameters:
        name - Name of the dynamic property for which a descriptor is requested
        Returns:
        The descriptor for the specified property
        Throws:
        java.lang.IllegalArgumentException - if no property name is specified
      • getDynaProperties

        public DynaProperty[] getDynaProperties()

        Return an array of ProperyDescriptors for the properties currently defined in this DynaClass. If no properties are defined, a zero-length array will be returned.

        FIXME - Should we really be implementing getBeanInfo() instead, which returns property descriptors and a bunch of other stuff?

        Specified by:
        getDynaProperties in interface DynaClass
        Returns:
        the set of properties for this DynaClass
      • newInstance

        public DynaBean newInstance()
                             throws java.lang.IllegalAccessException,
                                    java.lang.InstantiationException
        Instantiate and return a new DynaBean instance, associated with this DynaClass.
        Specified by:
        newInstance in interface DynaClass
        Returns:
        A new DynaBean instance
        Throws:
        java.lang.IllegalAccessException - if the Class or the appropriate constructor is not accessible
        java.lang.InstantiationException - if this Class represents an abstract class, an array class, a primitive type, or void; or if instantiation fails for some other reason
      • getDynaBeanClass

        public java.lang.Class<?> getDynaBeanClass()
        Return the Class object we will use to create new instances in the newInstance() method. This Class MUST implement the DynaBean interface.
        Returns:
        The class of the DynaBean
      • setDynaBeanClass

        protected void setDynaBeanClass​(java.lang.Class<?> dynaBeanClass)
        Set the Class object we will use to create new instances in the newInstance() method. This Class MUST implement the DynaBean interface.
        Parameters:
        dynaBeanClass - The new Class object
        Throws:
        java.lang.IllegalArgumentException - if the specified Class does not implement the DynaBean interface
      • setProperties

        protected void setProperties​(DynaProperty[] properties)
        Set the list of dynamic properties supported by this DynaClass.
        Parameters:
        properties - List of dynamic properties to be supported