public abstract class BeanHashStructureConverter
extends java.lang.Object
The converter should be subclassed in order to provide an appropriate ClassLoader which by default will be the ClassLoader of that subclass. An alternative ClassLoader can also be given in the constructor if necessary.
Properties are only supported if they are:
HashStructure
Modifier and Type | Class and Description |
---|---|
static class |
BeanHashStructureConverter.HashToBeanException
An Exception which may be thrown from
getBeanFromHashStructure(oracle.javatools.data.HashStructure)
which wraps an Exception that occured during the conversion from a
HashStructure to a bean object, along with the partially built bean object. |
Modifier | Constructor and Description |
---|---|
protected |
BeanHashStructureConverter()
Default constructor which will use the ClassLoader of the implementing
subclass if
getBeanFromHashStructure(oracle.javatools.data.HashStructure) is invoked. |
protected |
BeanHashStructureConverter(java.lang.ClassLoader classLoader)
Constructor which will use the given ClassLoader (or the ClassLoader of the
implementing subclass if null) if
getBeanFromHashStructure(oracle.javatools.data.HashStructure) is
invoked. |
Modifier and Type | Method and Description |
---|---|
protected void |
beanToHash(java.lang.Object bean,
HashStructure hash)
Populates the HashStructure from the properties of the bean, plus a marker
for the class of the bean.
|
protected java.lang.Object |
createObject(java.lang.Object owner,
java.lang.String property,
java.lang.Class clz)
Create an object of the given class using the default constructor.
|
protected java.lang.Object |
createObjectForHash(java.lang.Object owner,
java.lang.String property,
HashStructure hash)
Using the class marker in the HashStructure, loads the class using the
converter's ClassLoader and then creates an object of the
required type using the protected
createObject(java.lang.Object, java.lang.String, java.lang.Class) method. |
java.lang.Object |
getBeanFromHashStructure(HashStructure hash)
Create a bean object from a HashStructure created by
getHashStructureForBean(java.lang.Object) . |
HashStructure |
getHashStructureForBean(java.lang.Object bean)
Create a HashStructure representing the given bean object.
|
protected java.lang.Object |
getListValue(java.lang.Object bean,
java.lang.String prop,
int index,
java.lang.Object listValue)
If constructing a List or an array during
getBeanFromHashStructure(oracle.javatools.data.HashStructure) ,
it may be necessary for a subclass to convert the value of listValue to the
correct class. |
protected java.lang.Object |
getMapValue(java.lang.Object bean,
java.lang.String prop,
java.lang.String mapKey,
java.lang.Object mapValue)
If constructing a Map during
getBeanFromHashStructure(oracle.javatools.data.HashStructure) , it may be
necessary for a subclass to convert the value of mapValue to the correct
class. |
protected void |
hashToBean(HashStructure hash,
java.lang.Object bean)
Populates the bean from the properties of the HashStructure.
|
boolean |
isGetBeanSupported(HashStructure hash)
Tests whether the given HashStructure supports getBeanFromHashStructure.
|
protected void |
setBeanValue(PropertyInfo propertyInfo,
java.lang.Object bean,
HashStructure hash)
Sets the property defined by propertyInfo on the bean from the value
for that property in the HashStructure if it exists.
|
protected void |
setHashValue(HashStructure hash,
java.lang.Class clz,
java.lang.String name,
java.lang.Object value,
java.lang.Object owner)
Sets a value in a HashStructure
|
protected void |
setUnrecognisedBeanValue(java.lang.Object bean,
java.lang.String name,
java.lang.Object value)
If the properties found in HashStructure do not match the properties of
the bean, for example because a subclass has created an object of a
different class from that specified, then this method will be called
instead of setBeanValue.
|
protected BeanHashStructureConverter()
getBeanFromHashStructure(oracle.javatools.data.HashStructure)
is invoked.protected BeanHashStructureConverter(java.lang.ClassLoader classLoader)
getBeanFromHashStructure(oracle.javatools.data.HashStructure)
is
invoked.classLoader
- the ClassLoader to use.public final HashStructure getHashStructureForBean(java.lang.Object bean)
bean
- A bean object.protected final void beanToHash(java.lang.Object bean, HashStructure hash)
protected void setHashValue(HashStructure hash, java.lang.Class clz, java.lang.String name, java.lang.Object value, java.lang.Object owner)
hash
- The HashStructure in which the value is to be setclz
- The class of the property to be setname
- The name of the property to be setvalue
- The value of the property to be setowner
- The owning object (not used in the base implementation but
available for reference for a subclass).public final boolean isGetBeanSupported(HashStructure hash)
public final java.lang.Object getBeanFromHashStructure(HashStructure hash) throws BeanHashStructureConverter.HashToBeanException
getHashStructureForBean(java.lang.Object)
.hash
- The HashStructure representing a bean object.BeanHashStructureConverter.HashToBeanException
- If an exception is thrown during the construction
of the bean object or the setting of any of its properties, a
BeanHashStructureConverter.HashToBeanException
will be thrown, where the cause
will be the Exception that was thrown, and the object
will be the partially built bean object. This will be null if the Exception
was thrown during construction of the bean object due to a ClassNotFoundException or
IllegalAccessException for example.protected final java.lang.Object createObjectForHash(java.lang.Object owner, java.lang.String property, HashStructure hash) throws BeanHashStructureConverter.HashToBeanException
createObject(java.lang.Object, java.lang.String, java.lang.Class)
method.protected java.lang.Object createObject(java.lang.Object owner, java.lang.String property, java.lang.Class clz) throws java.lang.InstantiationException, java.lang.IllegalAccessException
owner
- The owning object (if any).property
- The property of the owning object for which this new
object is required (if any).clz
- The class of the required object.java.lang.InstantiationException
java.lang.IllegalAccessException
protected final void hashToBean(HashStructure hash, java.lang.Object bean) throws java.lang.Exception
java.lang.Exception
- If an Exception is thrown during creation of the bean
(for example during PropertyInfo.setPropertyValue(java.lang.Object, java.lang.Object)
), this will be
thrown by this method. Note, all properties held in the HashStructure
will be set on the bean before the Exception is thown. If any subsequent
property sets also throw an Exception, these will be available from the
suppressed
entries.protected void setBeanValue(PropertyInfo propertyInfo, java.lang.Object bean, HashStructure hash) throws java.lang.Exception
propertyInfo
- The PropertyInfo for the property being setbean
- The bean on which to set the property.hash
- The HashStructure holding the properties for the bean.java.lang.Exception
- See hashToBean(oracle.javatools.data.HashStructure, java.lang.Object)
.protected void setUnrecognisedBeanValue(java.lang.Object bean, java.lang.String name, java.lang.Object value) throws java.lang.Exception
bean
- The bean on which to set the propertyname
- The name of the property to setvalue
- The value of the property as stored in the HashStructure. This
may need conversion (eg from String) to the correct class before setting
on the bean.java.lang.Exception
protected java.lang.Object getMapValue(java.lang.Object bean, java.lang.String prop, java.lang.String mapKey, java.lang.Object mapValue)
getBeanFromHashStructure(oracle.javatools.data.HashStructure)
, it may be
necessary for a subclass to convert the value of mapValue to the correct
class.bean
- The bean object owning the Map.prop
- The name of the Map propertymapKey
- The key in the map for which the value is being setmapValue
- The value to be set in the Mapprotected java.lang.Object getListValue(java.lang.Object bean, java.lang.String prop, int index, java.lang.Object listValue)
getBeanFromHashStructure(oracle.javatools.data.HashStructure)
,
it may be necessary for a subclass to convert the value of listValue to the
correct class.bean
- The bean object owning the List/array.prop
- The name of the List/array propertyindex
- The index in the List/array.listValue
- The value to be set in the List/array.