The atg.beans
package also includes a useful interface named DynamicBeanInfo
. A DynamicBeanInfo
object allows a bean to be queried about what properties are available from the object, as well as other descriptive data about the bean. This is very similar to the standard BeanInfo
objects of JavaBeans, except DynamicBeanInfo
is based on the instance, not on the class. The DynamicBeanInfo
allows user interfaces to show dynamically the available properties of an object.
The DynamicBeanInfo
interface has the following methods:
public interface DynamicBeanInfo { public DynamicBeanDescriptor getBeanDescriptor(); public boolean hasProperty(String pPropertyName); public String [] getPropertyNames(); public DynamicPropertyDescriptor getPropertyDescriptor(String pPropertyName); public DynamicPropertyDescriptor[] getPropertyDescriptors(); public boolean isInstance(Object pObj); public boolean areInstances(DynamicBeanInfo pDynamicBeanInfo); }
DynamicBeanDescriptor
is a subclass of the java.beans.FeatureDescriptor
class, which includes human-friendly descriptive information about a bean. It includes methods like getName()
and getShortDescription()
. DynamicPropertyDescriptor
is also a subclass of FeatureDescriptor
, and allows individual properties of the properties, including a JavaBeans PropertyEditor
for the property.
To implement this behavior in a DynamicPropertyMapper
, use a getBeanInfo()
method. For example, in the MapPropertyMapper
discussed earlier, there is a getDynamicBeanInfo
method that looks like this:
public DynamicBeanInfo getBeanInfo(Object pBean) throws IntrospectionException { // A Map acts as its own dynamic bean type, since every map // is different. return DynamicBeans.getBeanInfoFromType(pBean); }