Package org.apache.commons.beanutils
Class MappedPropertyDescriptor
- java.lang.Object
-
- java.beans.FeatureDescriptor
-
- java.beans.PropertyDescriptor
-
- org.apache.commons.beanutils.MappedPropertyDescriptor
-
public class MappedPropertyDescriptor extends java.beans.PropertyDescriptor
A MappedPropertyDescriptor describes one mapped property. Mapped properties are multivalued properties like indexed properties but that are accessed with a String key instead of an index. Such property values are typically stored in a Map collection. For this class to work properly, a mapped value must have getter and setter methods of the formgetProperty(String key)
andsetProperty(String key, Object value)
,where
Property
must be replaced by the name of the property.- See Also:
PropertyDescriptor
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
MappedPropertyDescriptor.MappedMethodReference
Holds aMethod
in aSoftReference
so that it it doesn't prevent any ClassLoader being garbage collected, but tries to re-create the method if the method reference has been released.
-
Field Summary
Fields Modifier and Type Field Description private java.lang.ref.Reference<java.lang.Class<?>>
mappedPropertyTypeRef
The underlying data type of the property we are describing.private MappedPropertyDescriptor.MappedMethodReference
mappedReadMethodRef
The reader method for this property (if any).private MappedPropertyDescriptor.MappedMethodReference
mappedWriteMethodRef
The writer method for this property (if any).private static java.lang.Class<?>[]
STRING_CLASS_PARAMETER
The parameter types array for the reader method signature.
-
Constructor Summary
Constructors Constructor Description MappedPropertyDescriptor(java.lang.String propertyName, java.lang.Class<?> beanClass)
Constructs a MappedPropertyDescriptor for a property that follows the standard Java convention by having getFoo and setFoo accessor methods, with the addition of a String parameter (the key).MappedPropertyDescriptor(java.lang.String propertyName, java.lang.Class<?> beanClass, java.lang.String mappedGetterName, java.lang.String mappedSetterName)
This constructor takes the name of a mapped property, and method names for reading and writing the property.MappedPropertyDescriptor(java.lang.String propertyName, java.lang.reflect.Method mappedGetter, java.lang.reflect.Method mappedSetter)
This constructor takes the name of a mapped property, and Method objects for reading and writing the property.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static java.lang.String
capitalizePropertyName(java.lang.String s)
Return a capitalized version of the specified property name.private void
findMappedPropertyType()
Introspect our bean class to identify the corresponding getter and setter methods.java.lang.Class<?>
getMappedPropertyType()
Gets the Class object for the property values.java.lang.reflect.Method
getMappedReadMethod()
Gets the method that should be used to read one of the property value.java.lang.reflect.Method
getMappedWriteMethod()
Gets the method that should be used to write one of the property value.private static java.lang.reflect.Method
getMethod(java.lang.Class<?> clazz, java.lang.String methodName, int parameterCount)
Find a method on a class with a specified number of parameters.private static java.lang.reflect.Method
getMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>[] parameterTypes)
Find a method on a class with a specified parameter list.private static java.lang.reflect.Method
internalGetMethod(java.lang.Class<?> initial, java.lang.String methodName, int parameterCount)
Find a method on a class with a specified number of parameters.void
setMappedReadMethod(java.lang.reflect.Method mappedGetter)
Sets the method that should be used to read one of the property value.void
setMappedWriteMethod(java.lang.reflect.Method mappedSetter)
Sets the method that should be used to write the property value.-
Methods inherited from class java.beans.PropertyDescriptor
createPropertyEditor, equals, getPropertyEditorClass, getPropertyType, getReadMethod, getWriteMethod, hashCode, isBound, isConstrained, setBound, setConstrained, setPropertyEditorClass, setReadMethod, setWriteMethod
-
-
-
-
Field Detail
-
STRING_CLASS_PARAMETER
private static final java.lang.Class<?>[] STRING_CLASS_PARAMETER
The parameter types array for the reader method signature.
-
mappedPropertyTypeRef
private java.lang.ref.Reference<java.lang.Class<?>> mappedPropertyTypeRef
The underlying data type of the property we are describing.
-
mappedReadMethodRef
private MappedPropertyDescriptor.MappedMethodReference mappedReadMethodRef
The reader method for this property (if any).
-
mappedWriteMethodRef
private MappedPropertyDescriptor.MappedMethodReference mappedWriteMethodRef
The writer method for this property (if any).
-
-
Constructor Detail
-
MappedPropertyDescriptor
public MappedPropertyDescriptor(java.lang.String propertyName, java.lang.Class<?> beanClass) throws java.beans.IntrospectionException
Constructs a MappedPropertyDescriptor for a property that follows the standard Java convention by having getFoo and setFoo accessor methods, with the addition of a String parameter (the key). Thus if the argument name is "fred", it will assume that the writer method is "setFred" and the reader method is "getFred". Note that the property name should start with a lower case character, which will be capitalized in the method names.- Parameters:
propertyName
- The programmatic name of the property.beanClass
- The Class object for the target bean. For example sun.beans.OurButton.class.- Throws:
java.beans.IntrospectionException
- if an exception occurs during introspection.
-
MappedPropertyDescriptor
public MappedPropertyDescriptor(java.lang.String propertyName, java.lang.Class<?> beanClass, java.lang.String mappedGetterName, java.lang.String mappedSetterName) throws java.beans.IntrospectionException
This constructor takes the name of a mapped property, and method names for reading and writing the property.- Parameters:
propertyName
- The programmatic name of the property.beanClass
- The Class object for the target bean. For example sun.beans.OurButton.class.mappedGetterName
- The name of the method used for reading one of the property values. May be null if the property is write-only.mappedSetterName
- The name of the method used for writing one of the property values. May be null if the property is read-only.- Throws:
java.beans.IntrospectionException
- if an exception occurs during introspection.
-
MappedPropertyDescriptor
public MappedPropertyDescriptor(java.lang.String propertyName, java.lang.reflect.Method mappedGetter, java.lang.reflect.Method mappedSetter) throws java.beans.IntrospectionException
This constructor takes the name of a mapped property, and Method objects for reading and writing the property.- Parameters:
propertyName
- The programmatic name of the property.mappedGetter
- The method used for reading one of the property values. May be be null if the property is write-only.mappedSetter
- The method used for writing one the property values. May be null if the property is read-only.- Throws:
java.beans.IntrospectionException
- if an exception occurs during introspection.
-
-
Method Detail
-
capitalizePropertyName
private static java.lang.String capitalizePropertyName(java.lang.String s)
Return a capitalized version of the specified property name.- Parameters:
s
- The property name
-
getMethod
private static java.lang.reflect.Method getMethod(java.lang.Class<?> clazz, java.lang.String methodName, java.lang.Class<?>[] parameterTypes) throws java.beans.IntrospectionException
Find a method on a class with a specified parameter list.- Throws:
java.beans.IntrospectionException
-
getMethod
private static java.lang.reflect.Method getMethod(java.lang.Class<?> clazz, java.lang.String methodName, int parameterCount) throws java.beans.IntrospectionException
Find a method on a class with a specified number of parameters.- Throws:
java.beans.IntrospectionException
-
internalGetMethod
private static java.lang.reflect.Method internalGetMethod(java.lang.Class<?> initial, java.lang.String methodName, int parameterCount)
Find a method on a class with a specified number of parameters.
-
findMappedPropertyType
private void findMappedPropertyType() throws java.beans.IntrospectionException
Introspect our bean class to identify the corresponding getter and setter methods.- Throws:
java.beans.IntrospectionException
-
getMappedPropertyType
public java.lang.Class<?> getMappedPropertyType()
Gets the Class object for the property values.- Returns:
- The Java type info for the property values. Note that
the "Class" object may describe a built-in Java type such as "int".
The result may be "null" if this is a mapped property that
does not support non-keyed access.
This is the type that will be returned by the mappedReadMethod.
-
getMappedReadMethod
public java.lang.reflect.Method getMappedReadMethod()
Gets the method that should be used to read one of the property value.- Returns:
- The method that should be used to read the property value. May return null if the property can't be read.
-
getMappedWriteMethod
public java.lang.reflect.Method getMappedWriteMethod()
Gets the method that should be used to write one of the property value.- Returns:
- The method that should be used to write one of the property value. May return null if the property can't be written.
-
setMappedReadMethod
public void setMappedReadMethod(java.lang.reflect.Method mappedGetter) throws java.beans.IntrospectionException
Sets the method that should be used to read one of the property value.- Parameters:
mappedGetter
- The mapped getter method.- Throws:
java.beans.IntrospectionException
- If an error occurs finding the mapped property
-
setMappedWriteMethod
public void setMappedWriteMethod(java.lang.reflect.Method mappedSetter) throws java.beans.IntrospectionException
Sets the method that should be used to write the property value.- Parameters:
mappedSetter
- The mapped setter method.- Throws:
java.beans.IntrospectionException
- If an error occurs finding the mapped property
-
-