org.springframework.beans
Class AbstractPropertyAccessor

java.lang.Object
  extended by org.springframework.beans.PropertyEditorRegistrySupport
      extended by org.springframework.beans.AbstractPropertyAccessor
All Implemented Interfaces:
ConfigurablePropertyAccessor, PropertyAccessor, PropertyEditorRegistry, TypeConverter
Direct Known Subclasses:
BeanWrapperImpl, DirectFieldAccessor

public abstract class AbstractPropertyAccessor
extends PropertyEditorRegistrySupport
implements ConfigurablePropertyAccessor

Abstract implementation of the PropertyAccessor interface. Provides base implementations of all convenience methods, with the implementation of actual property access left to subclasses.

Since:
2.0
Author:
Juergen Hoeller
See Also:
getPropertyValue(java.lang.String), setPropertyValue(org.springframework.beans.PropertyValue)

Field Summary
private  boolean extractOldValueForEditor
           
 
Fields inherited from interface org.springframework.beans.PropertyAccessor
NESTED_PROPERTY_SEPARATOR, NESTED_PROPERTY_SEPARATOR_CHAR, PROPERTY_KEY_PREFIX, PROPERTY_KEY_PREFIX_CHAR, PROPERTY_KEY_SUFFIX, PROPERTY_KEY_SUFFIX_CHAR
 
Constructor Summary
AbstractPropertyAccessor()
           
 
Method Summary
<T> T
convertIfNecessary(java.lang.Object value, java.lang.Class<T> requiredType)
          Convert the value to the required type (if necessary from a String).
 java.lang.Class getPropertyType(java.lang.String propertyPath)
          Determine the property type for the given property path.
abstract  java.lang.Object getPropertyValue(java.lang.String propertyName)
          Actually get the value of a property.
 boolean isExtractOldValueForEditor()
          Return whether to extract the old property value when applying a property editor to a new value for a property.
 void setExtractOldValueForEditor(boolean extractOldValueForEditor)
          Set whether to extract the old property value when applying a property editor to a new value for a property.
 void setPropertyValue(PropertyValue pv)
          Set the specified value as current property value.
abstract  void setPropertyValue(java.lang.String propertyName, java.lang.Object value)
          Actually set a property value.
 void setPropertyValues(java.util.Map<?,?> map)
          Perform a batch update from a Map.
 void setPropertyValues(PropertyValues pvs)
          The preferred way to perform a batch update.
 void setPropertyValues(PropertyValues pvs, boolean ignoreUnknown)
          Perform a batch update with more control over behavior.
 void setPropertyValues(PropertyValues pvs, boolean ignoreUnknown, boolean ignoreInvalid)
          Perform a batch update with full control over behavior.
 
Methods inherited from class org.springframework.beans.PropertyEditorRegistrySupport
copyCustomEditorsTo, copyDefaultEditorsTo, findCustomEditor, getConversionService, getDefaultEditor, guessPropertyTypeFromEditors, hasCustomEditorForElement, isSharedEditor, overrideDefaultEditor, registerCustomEditor, registerCustomEditor, registerDefaultEditors, registerSharedEditor, setConversionService, useConfigValueEditors
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.springframework.beans.ConfigurablePropertyAccessor
getConversionService, setConversionService
 
Methods inherited from interface org.springframework.beans.PropertyAccessor
getPropertyTypeDescriptor, isReadableProperty, isWritableProperty
 
Methods inherited from interface org.springframework.beans.PropertyEditorRegistry
findCustomEditor, registerCustomEditor, registerCustomEditor
 
Methods inherited from interface org.springframework.beans.TypeConverter
convertIfNecessary
 

Field Detail

extractOldValueForEditor

private boolean extractOldValueForEditor
Constructor Detail

AbstractPropertyAccessor

public AbstractPropertyAccessor()
Method Detail

setExtractOldValueForEditor

public void setExtractOldValueForEditor(boolean extractOldValueForEditor)
Description copied from interface: ConfigurablePropertyAccessor
Set whether to extract the old property value when applying a property editor to a new value for a property.

Specified by:
setExtractOldValueForEditor in interface ConfigurablePropertyAccessor

isExtractOldValueForEditor

public boolean isExtractOldValueForEditor()
Description copied from interface: ConfigurablePropertyAccessor
Return whether to extract the old property value when applying a property editor to a new value for a property.

Specified by:
isExtractOldValueForEditor in interface ConfigurablePropertyAccessor

setPropertyValue

public void setPropertyValue(PropertyValue pv)
                      throws BeansException
Description copied from interface: PropertyAccessor
Set the specified value as current property value.

Specified by:
setPropertyValue in interface PropertyAccessor
Parameters:
pv - an object containing the new property value
Throws:
InvalidPropertyException - if there is no such property or if the property isn't writable
PropertyAccessException - if the property was valid but the accessor method failed or a type mismatch occured
BeansException

setPropertyValues

public void setPropertyValues(java.util.Map<?,?> map)
                       throws BeansException
Description copied from interface: PropertyAccessor
Perform a batch update from a Map.

Bulk updates from PropertyValues are more powerful: This method is provided for convenience. Behavior will be identical to that of the PropertyAccessor.setPropertyValues(PropertyValues) method.

Specified by:
setPropertyValues in interface PropertyAccessor
Parameters:
map - Map to take properties from. Contains property value objects, keyed by property name
Throws:
InvalidPropertyException - if there is no such property or if the property isn't writable
PropertyBatchUpdateException - if one or more PropertyAccessExceptions occured for specific properties during the batch update. This exception bundles all individual PropertyAccessExceptions. All other properties will have been successfully updated.
BeansException

setPropertyValues

public void setPropertyValues(PropertyValues pvs)
                       throws BeansException
Description copied from interface: PropertyAccessor
The preferred way to perform a batch update.

Note that performing a batch update differs from performing a single update, in that an implementation of this class will continue to update properties if a recoverable error (such as a type mismatch, but not an invalid field name or the like) is encountered, throwing a PropertyBatchUpdateException containing all the individual errors. This exception can be examined later to see all binding errors. Properties that were successfully updated remain changed.

Does not allow unknown fields or invalid fields.

Specified by:
setPropertyValues in interface PropertyAccessor
Parameters:
pvs - PropertyValues to set on the target object
Throws:
InvalidPropertyException - if there is no such property or if the property isn't writable
PropertyBatchUpdateException - if one or more PropertyAccessExceptions occured for specific properties during the batch update. This exception bundles all individual PropertyAccessExceptions. All other properties will have been successfully updated.
BeansException
See Also:
PropertyAccessor.setPropertyValues(PropertyValues, boolean, boolean)

setPropertyValues

public void setPropertyValues(PropertyValues pvs,
                              boolean ignoreUnknown)
                       throws BeansException
Description copied from interface: PropertyAccessor
Perform a batch update with more control over behavior.

Note that performing a batch update differs from performing a single update, in that an implementation of this class will continue to update properties if a recoverable error (such as a type mismatch, but not an invalid field name or the like) is encountered, throwing a PropertyBatchUpdateException containing all the individual errors. This exception can be examined later to see all binding errors. Properties that were successfully updated remain changed.

Specified by:
setPropertyValues in interface PropertyAccessor
Parameters:
pvs - PropertyValues to set on the target object
ignoreUnknown - should we ignore unknown properties (not found in the bean)
Throws:
InvalidPropertyException - if there is no such property or if the property isn't writable
PropertyBatchUpdateException - if one or more PropertyAccessExceptions occured for specific properties during the batch update. This exception bundles all individual PropertyAccessExceptions. All other properties will have been successfully updated.
BeansException
See Also:
PropertyAccessor.setPropertyValues(PropertyValues, boolean, boolean)

setPropertyValues

public void setPropertyValues(PropertyValues pvs,
                              boolean ignoreUnknown,
                              boolean ignoreInvalid)
                       throws BeansException
Description copied from interface: PropertyAccessor
Perform a batch update with full control over behavior.

Note that performing a batch update differs from performing a single update, in that an implementation of this class will continue to update properties if a recoverable error (such as a type mismatch, but not an invalid field name or the like) is encountered, throwing a PropertyBatchUpdateException containing all the individual errors. This exception can be examined later to see all binding errors. Properties that were successfully updated remain changed.

Specified by:
setPropertyValues in interface PropertyAccessor
Parameters:
pvs - PropertyValues to set on the target object
ignoreUnknown - should we ignore unknown properties (not found in the bean)
ignoreInvalid - should we ignore invalid properties (found but not accessible)
Throws:
InvalidPropertyException - if there is no such property or if the property isn't writable
PropertyBatchUpdateException - if one or more PropertyAccessExceptions occured for specific properties during the batch update. This exception bundles all individual PropertyAccessExceptions. All other properties will have been successfully updated.
BeansException

convertIfNecessary

public <T> T convertIfNecessary(java.lang.Object value,
                                java.lang.Class<T> requiredType)
                     throws TypeMismatchException
Description copied from interface: TypeConverter
Convert the value to the required type (if necessary from a String).

Conversions from String to any type will typically use the setAsText method of the PropertyEditor class. Note that a PropertyEditor must be registered for the given class for this to work; this is a standard JavaBeans API. A number of PropertyEditors are automatically registered.

Specified by:
convertIfNecessary in interface TypeConverter
Parameters:
value - the value to convert
requiredType - the type we must convert to (or null if not known, for example in case of a collection element)
Returns:
the new value, possibly the result of type conversion
Throws:
TypeMismatchException - if type conversion failed
See Also:
PropertyEditor.setAsText(String), PropertyEditor.getValue()

getPropertyType

public java.lang.Class getPropertyType(java.lang.String propertyPath)
Description copied from class: PropertyEditorRegistrySupport
Determine the property type for the given property path.

Called by PropertyEditorRegistrySupport.findCustomEditor(java.lang.Class, java.lang.String) if no required type has been specified, to be able to find a type-specific editor even if just given a property path.

The default implementation always returns null. BeanWrapperImpl overrides this with the standard getPropertyType method as defined by the BeanWrapper interface.

Specified by:
getPropertyType in interface PropertyAccessor
Overrides:
getPropertyType in class PropertyEditorRegistrySupport
Parameters:
propertyPath - the property path to determine the type for
Returns:
the type of the property, or null if not determinable
See Also:
PropertyAccessor.getPropertyType(String)

getPropertyValue

public abstract java.lang.Object getPropertyValue(java.lang.String propertyName)
                                           throws BeansException
Actually get the value of a property.

Specified by:
getPropertyValue in interface PropertyAccessor
Parameters:
propertyName - name of the property to get the value of
Returns:
the value of the property
Throws:
InvalidPropertyException - if there is no such property or if the property isn't readable
PropertyAccessException - if the property was valid but the accessor method failed
BeansException

setPropertyValue

public abstract void setPropertyValue(java.lang.String propertyName,
                                      java.lang.Object value)
                               throws BeansException
Actually set a property value.

Specified by:
setPropertyValue in interface PropertyAccessor
Parameters:
propertyName - name of the property to set value of
value - the new value
Throws:
InvalidPropertyException - if there is no such property or if the property isn't writable
PropertyAccessException - if the property was valid but the accessor method failed or a type mismatch occured
BeansException