public class PropertySetter extends ContextAwareBase
setProperty(name,value) in order to invoke setters on
the Object specified in the constructor. This class relies on the JavaBeans
Introspector to analyze the given Object Class using reflection.
Usage:
PropertySetter ps = new PropertySetter(anObject);
ps.set("name", "Joe");
ps.set("age", "32");
ps.set("isMale", "true");
will cause the invocations anObject.setName("Joe"), anObject.setAge(32), and
setMale(true) if such methods exist with those signatures. Otherwise an
IntrospectionException are thrown.| Modifier and Type | Field and Description |
|---|---|
protected BeanDescription |
beanDescription |
protected java.lang.Object |
obj |
protected java.lang.Class<?> |
objClass |
context| Constructor and Description |
|---|
PropertySetter(BeanDescriptionCache beanDescriptionCache,
java.lang.Object obj)
Create a new PropertySetter for the specified Object.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addBasicProperty(java.lang.String name,
java.lang.String strValue) |
void |
addComplexProperty(java.lang.String name,
java.lang.Object complexProperty) |
private java.lang.String |
capitalizeFirstLetter(java.lang.String name) |
AggregationType |
computeAggregationType(java.lang.String name) |
private AggregationType |
computeRawAggregationType(java.lang.reflect.Method method) |
private java.lang.reflect.Method |
findAdderMethod(java.lang.String name) |
private java.lang.reflect.Method |
findSetterMethod(java.lang.String name) |
(package private) <T extends java.lang.annotation.Annotation> |
getAnnotation(java.lang.String name,
java.lang.Class<T> annonationClass,
java.lang.reflect.Method relevantMethod) |
(package private) java.lang.Class<?> |
getByConcreteType(java.lang.String name,
java.lang.reflect.Method relevantMethod) |
java.lang.Class<?> |
getClassNameViaImplicitRules(java.lang.String name,
AggregationType aggregationType,
DefaultNestedComponentRegistry registry) |
(package private) java.lang.Class<?> |
getDefaultClassNameByAnnonation(java.lang.String name,
java.lang.reflect.Method relevantMethod) |
java.lang.Object |
getObj() |
java.lang.Class<?> |
getObjClass() |
private java.lang.Class<?> |
getParameterClassForMethod(java.lang.reflect.Method method) |
(package private) java.lang.reflect.Method |
getRelevantMethod(java.lang.String name,
AggregationType aggregationType) |
(package private) void |
invokeMethodWithSingleParameterOnThisObject(java.lang.reflect.Method method,
java.lang.Object parameter) |
private boolean |
isSanityCheckSuccessful(java.lang.String name,
java.lang.reflect.Method method,
java.lang.Class<?>[] params,
java.lang.Object complexProperty) |
private boolean |
isUnequivocallyInstantiable(java.lang.Class<?> clazz)
Can the given clazz instantiable with certainty?
|
void |
setComplexProperty(java.lang.String name,
java.lang.Object complexProperty) |
private void |
setProperty(java.lang.reflect.Method setter,
java.lang.String name,
java.lang.String value)
Set the named property given a
PropertyDescriptor. |
void |
setProperty(java.lang.String name,
java.lang.String value)
Set a property on this PropertySetter's Object.
|
addError, addError, addInfo, addInfo, addStatus, addWarn, addWarn, getContext, getDeclaredOrigin, getStatusManager, setContextprotected final java.lang.Object obj
protected final java.lang.Class<?> objClass
protected final BeanDescription beanDescription
public PropertySetter(BeanDescriptionCache beanDescriptionCache, java.lang.Object obj)
setProperty(java.lang.String, java.lang.String) one or more times.obj - the object for which to set propertiespublic void setProperty(java.lang.String name,
java.lang.String value)
If the setter expects a String no conversion is necessary. If it expects an int, then an attempt is made to convert 'value' to an int using new Integer(value). If the setter expects a boolean, the conversion is by new Boolean(value).
name - name of the propertyvalue - String value of the propertyprivate void setProperty(java.lang.reflect.Method setter,
java.lang.String name,
java.lang.String value)
throws PropertySetterException
PropertyDescriptor.prop - A PropertyDescriptor describing the characteristics of the
property to set.name - The named of the property to set.value - The value of the property.PropertySetterExceptionpublic AggregationType computeAggregationType(java.lang.String name)
private java.lang.reflect.Method findAdderMethod(java.lang.String name)
private java.lang.reflect.Method findSetterMethod(java.lang.String name)
private java.lang.Class<?> getParameterClassForMethod(java.lang.reflect.Method method)
private AggregationType computeRawAggregationType(java.lang.reflect.Method method)
private boolean isUnequivocallyInstantiable(java.lang.Class<?> clazz)
clazz - The class to test for instantiabilitypublic java.lang.Class<?> getObjClass()
public void addComplexProperty(java.lang.String name,
java.lang.Object complexProperty)
void invokeMethodWithSingleParameterOnThisObject(java.lang.reflect.Method method,
java.lang.Object parameter)
public void addBasicProperty(java.lang.String name,
java.lang.String strValue)
public void setComplexProperty(java.lang.String name,
java.lang.Object complexProperty)
private boolean isSanityCheckSuccessful(java.lang.String name,
java.lang.reflect.Method method,
java.lang.Class<?>[] params,
java.lang.Object complexProperty)
private java.lang.String capitalizeFirstLetter(java.lang.String name)
public java.lang.Object getObj()
java.lang.reflect.Method getRelevantMethod(java.lang.String name,
AggregationType aggregationType)
<T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.String name,
java.lang.Class<T> annonationClass,
java.lang.reflect.Method relevantMethod)
java.lang.Class<?> getDefaultClassNameByAnnonation(java.lang.String name,
java.lang.reflect.Method relevantMethod)
java.lang.Class<?> getByConcreteType(java.lang.String name,
java.lang.reflect.Method relevantMethod)
public java.lang.Class<?> getClassNameViaImplicitRules(java.lang.String name,
AggregationType aggregationType,
DefaultNestedComponentRegistry registry)