public class DefaultPropertyMapper extends Object implements PropertyMapper
PropertyMapper
used by the mapper.
This mapper can be configured to scan for fields, getters and setters, or both. The default is to scan for both.
This mapper can also be configured to skip transient properties. By default, all properties
will be mapped (non-transient), unless explicitly marked with @Transient
.
This mapper recognizes standard getter and setter methods (as defined by the Java Beans
specification), and also "relaxed" setter methods, i.e., setter methods whose return type are not
void
.
DefaultMappedProperty
Constructor and Description |
---|
DefaultPropertyMapper() |
Modifier and Type | Method and Description |
---|---|
DefaultPropertyMapper |
addTransientPropertyNames(Collection<String> transientPropertyNames)
Adds new values to the existing set of transient property names.
|
DefaultPropertyMapper |
addTransientPropertyNames(String... transientPropertyNames)
Adds new values to the existing set of transient property names.
|
protected MappedProperty<?> |
createMappedProperty(Class<?> mappedClass,
String propertyName,
String mappedName,
Field field,
Method getter,
Method setter,
Map<Class<? extends Annotation>,Annotation> annotations)
Creates a
MappedProperty instance. |
protected String |
inferMappedName(Class<?> mappedClass,
String propertyName,
Map<Class<? extends Annotation>,Annotation> annotations)
Infers the Cassandra object name corresponding to given the property name.
|
protected boolean |
isTransient(String propertyName,
Field field,
Method getter,
Method setter,
Map<Class<? extends Annotation>,Annotation> annotations)
Returns
true if the given property is transient, false otherwise. |
protected Method |
locateGetter(Class<?> mappedClass,
PropertyDescriptor property)
Locates a getter method for the given mapped class and given property.
|
protected Method |
locateSetter(Class<?> mappedClass,
PropertyDescriptor property)
Locates a setter method for the given mapped class and given property.
|
Set<? extends MappedProperty<?>> |
mapTable(Class<?> tableClass)
Maps the given table class.
|
Set<? extends MappedProperty<?>> |
mapUdt(Class<?> udtClass)
Maps the given UDT class.
|
DefaultPropertyMapper |
setHierarchyScanStrategy(HierarchyScanStrategy hierarchyScanStrategy)
Sets the
hierarchy scan strategy to use. |
DefaultPropertyMapper |
setNamingStrategy(NamingStrategy namingStrategy)
Sets the
naming strategy to use. |
DefaultPropertyMapper |
setPropertyAccessStrategy(PropertyAccessStrategy propertyAccessStrategy)
Sets the
property access strategy to use. |
DefaultPropertyMapper |
setPropertyTransienceStrategy(PropertyTransienceStrategy propertyTransienceStrategy)
Sets the
property transience strategy to use. |
DefaultPropertyMapper |
setTransientPropertyNames(Set<String> transientPropertyNames)
Sets transient property names.
|
public DefaultPropertyMapper setPropertyAccessStrategy(PropertyAccessStrategy propertyAccessStrategy)
property access strategy
to use. The default is PropertyAccessStrategy.BOTH
.propertyAccessStrategy
- the property access strategy
to
use; may not be null
.DefaultPropertyMapper
instance (to allow for fluent builder pattern).public DefaultPropertyMapper setPropertyTransienceStrategy(PropertyTransienceStrategy propertyTransienceStrategy)
property transience strategy
to use. The default is
PropertyTransienceStrategy.OPT_OUT
.propertyTransienceStrategy
- the property transience
strategy
to use; may not be null
.DefaultPropertyMapper
instance (to allow for fluent builder pattern).public DefaultPropertyMapper setHierarchyScanStrategy(HierarchyScanStrategy hierarchyScanStrategy)
hierarchy scan strategy
to use. The default is DefaultHierarchyScanStrategy
.hierarchyScanStrategy
- the hierarchy scan strategy
to use;
may not be null
.DefaultPropertyMapper
instance (to allow for fluent builder pattern).public DefaultPropertyMapper setNamingStrategy(NamingStrategy namingStrategy)
naming strategy
to use. The default is DefaultNamingStrategy
.namingStrategy
- the naming strategy
to use; may not be null
.DefaultPropertyMapper
instance (to allow for fluent builder pattern).public DefaultPropertyMapper setTransientPropertyNames(Set<String> transientPropertyNames)
The default set comprises the following property names: class
and metaClass
.
These properties pertain to the Object
class – metaClass
being specific to the
Groovy language.
Property names provided here will always be considered transient; if a more fine-grained
tuning is required, it is also possible to use the @Transient
annotation on a
specific property.
Subclasses can also override isTransient(String, Field, Method, Method, Map)
to
gain complete control over which properties should be considered transient.
transientPropertyNames
- a set of property names to exclude from mapping; may not be
null
. This will completely replace any names already configured for this object.public DefaultPropertyMapper addTransientPropertyNames(String... transientPropertyNames)
The default set comprises the following property names: class
and metaClass
.
These properties pertain to the Object
class – metaClass
being specific to the
Groovy language.
Property names provided here will always be considered transient; if a more fine-grained
tuning is required, it is also possible to use the @Transient
annotation on a
specific property.
Subclasses can also override isTransient(String, Field, Method, Method, Map)
to
gain complete control over which properties should be considered transient.
transientPropertyNames
- the values to add; may not be null
.public DefaultPropertyMapper addTransientPropertyNames(Collection<String> transientPropertyNames)
The default set comprises the following property names: class
and metaClass
.
These properties pertain to the Object
class – metaClass
being specific to the
Groovy language.
Property names provided here will always be considered transient; if a more fine-grained
tuning is required, it is also possible to use the @Transient
annotation on a
specific property.
Subclasses can also override isTransient(String, Field, Method, Method, Map)
to
gain complete control over which properties should be considered transient.
transientPropertyNames
- the values to add; may not be null
.public Set<? extends MappedProperty<?>> mapTable(Class<?> tableClass)
PropertyMapper
mapTable
in interface PropertyMapper
tableClass
- the table class.public Set<? extends MappedProperty<?>> mapUdt(Class<?> udtClass)
PropertyMapper
mapUdt
in interface PropertyMapper
udtClass
- the UDT class.protected boolean isTransient(String propertyName, Field field, Method getter, Method setter, Map<Class<? extends Annotation>,Annotation> annotations)
true
if the given property is transient, false
otherwise.
If this method returns true
the given property will not be mapped. The
implementation provided here relies on the transience strategy
and the transient property names
configured on this mapper.
Subclasses may override this method to take full control of which properties should be mapped and which should be considered transient.
propertyName
- the property name; may not be null
.field
- the property field; may be null
.getter
- the getter method for this property; may be null
.setter
- the setter method for this property; may be null
.annotations
- the annotations found on this property; may be empty but never null
.true
if the given property is transient (i.e., non-mapped), false
otherwise.protected Method locateGetter(Class<?> mappedClass, PropertyDescriptor property)
Most users should rely on the implementation provided here. It is however possible to return
any non-standard method, as long as it does not take parameters, and its return type is
assignable to (and covariant with) the property's type. This might be particularly useful for
boolean properties whose names are verbs, e.g. "hasAccount
": one could then return the
non-standard method boolean hasAccount()
as its getter.
This method is never called if PropertyAccessStrategy.isGetterSetterScanAllowed()
returns false
. Besides, implementors are free to return null
if access to the
property through reflection is not required (in which case, they will likely have to provide a
custom implementation of MappedProperty
).
mappedClass
- The mapped class; this is necessarily a class annotated with either @Table
or @UDT
.property
- The property to locate a getter for; never null
.null
if no
getter was found, or reflection is not required.protected Method locateSetter(Class<?> mappedClass, PropertyDescriptor property)
Most users should rely on the implementation provided here. It is however possible to return any non-standard method, as long as it accepts one single parameter type that is contravariant with the property's type.
This method is never called if PropertyAccessStrategy.isGetterSetterScanAllowed()
returns false
. Besides, implementors are free to return null
if access to the
property through reflection is not required (in which case, they will likely have to provide a
custom implementation of MappedProperty
).
mappedClass
- The mapped class; this is necessarily a class annotated with either @Table
or @UDT
.property
- The property to locate a setter for; never null
.null
if no
setter was found, or reflection is not required.protected String inferMappedName(Class<?> mappedClass, String propertyName, Map<Class<? extends Annotation>,Annotation> annotations)
Most users should rely on the implementation provided here. It relies on annotation values
and ultimately resorts to the NamingStrategy
configured on this mapper.
Subclasses may override this method if they need full control over generating Cassandra object names.
mappedClass
- The mapped class; this is necessarily a class annotated with either @Table
or @UDT
.propertyName
- The property name; may not be null
nor empty.annotations
- The property annotations (found on its field and getter method); may not be
null
but can be empty.protected MappedProperty<?> createMappedProperty(Class<?> mappedClass, String propertyName, String mappedName, Field field, Method getter, Method setter, Map<Class<? extends Annotation>,Annotation> annotations)
MappedProperty
instance.
Instances returned by the implementation below will use the Java reflection API to read and write values. Subclasses may override this method if they are capable of accessing properties without incurring the cost of reflection.
mappedClass
- The mapped class; this is necessarily a class annotated with either @Table
or @UDT
.propertyName
- The property name; may not be null
nor empty.mappedName
- The mapped name; may not be null
nor empty.field
- The property field; may be null
.getter
- The property getter method; may be null
.setter
- The property setter method; may be null
.annotations
- The property annotations (found on its field and getter method); may not be
null
but can be empty.MappedProperty
instance.Copyright © 2012–2020. All rights reserved.