Package ch.qos.logback.core.joran.util
Class PropertySetter
- java.lang.Object
-
- ch.qos.logback.core.spi.ContextAwareBase
-
- ch.qos.logback.core.joran.util.PropertySetter
-
- All Implemented Interfaces:
ContextAware
public class PropertySetter extends ContextAwareBase
General purpose Object property setter. Clients repeatedly invokessetProperty(name,value)in order to invoke setters on the Object specified in the constructor. This class relies on the JavaBeansIntrospectorto 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 anIntrospectionExceptionare thrown.
-
-
Field Summary
Fields Modifier and Type Field Description protected BeanDescriptionbeanDescriptionprotected java.lang.Objectobjprotected java.lang.Class<?>objClass-
Fields inherited from class ch.qos.logback.core.spi.ContextAwareBase
context
-
-
Constructor Summary
Constructors Constructor Description PropertySetter(BeanDescriptionCache beanDescriptionCache, java.lang.Object obj)Create a new PropertySetter for the specified Object.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddBasicProperty(java.lang.String name, java.lang.String strValue)voidaddComplexProperty(java.lang.String name, java.lang.Object complexProperty)private java.lang.StringcapitalizeFirstLetter(java.lang.String name)private voidcheckParameterCount(java.lang.reflect.Method aMethod, java.lang.String nestedElementTagName)AggregationTypecomputeAggregationType(java.lang.String name)private AggregationTypecomputeRawAggregationType(java.lang.reflect.Method method)private java.lang.reflect.MethodfindAdderMethod(java.lang.String name)private java.lang.reflect.MethodfindSetterMethod(java.lang.String name)(package private) <T extends java.lang.annotation.Annotation>
TgetAnnotation(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.ObjectgetObj()java.lang.Class<?>getObjClass()private java.lang.Class<?>getParameterClassForMethod(java.lang.reflect.Method method)(package private) java.lang.reflect.MethodgetRelevantMethod(java.lang.String name, AggregationType aggregationType)java.lang.Class<?>getTypeForComplexProperty(java.lang.String nestedElementTagName, AggregationType aggregationType)(package private) voidinvokeMethodWithSingleParameterOnThisObject(java.lang.reflect.Method method, java.lang.Object parameter)private booleanisSanityCheckSuccessful(java.lang.String name, java.lang.reflect.Method method, java.lang.Class<?>[] params, java.lang.Object complexProperty)private booleanisUnequivocallyInstantiable(java.lang.Class<?> clazz)Can the given clazz instantiable with certainty?voidsetComplexProperty(java.lang.String name, java.lang.Object complexProperty)private voidsetProperty(java.lang.reflect.Method setter, java.lang.String name, java.lang.String value)Set the named property given aPropertyDescriptor.voidsetProperty(java.lang.String name, java.lang.String value)Set a property on this PropertySetter's Object.-
Methods inherited from class ch.qos.logback.core.spi.ContextAwareBase
addError, addError, addInfo, addInfo, addStatus, addWarn, addWarn, getContext, getDeclaredOrigin, getStatusManager, setContext
-
-
-
-
Field Detail
-
obj
protected final java.lang.Object obj
-
objClass
protected final java.lang.Class<?> objClass
-
beanDescription
protected final BeanDescription beanDescription
-
-
Constructor Detail
-
PropertySetter
public PropertySetter(BeanDescriptionCache beanDescriptionCache, java.lang.Object obj)
Create a new PropertySetter for the specified Object. This is done in preparation for invokingsetProperty(java.lang.String, java.lang.String)one or more times.- Parameters:
obj- the object for which to set properties
-
-
Method Detail
-
setProperty
public void setProperty(java.lang.String name, java.lang.String value)Set a property on this PropertySetter's Object. If successful, this method will invoke a setter method on the underlying Object. The setter is the one for the specified property name and the value is determined partly from the setter argument type and partly from the value specified in the call to this method.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).
- Parameters:
name- name of the propertyvalue- String value of the property
-
setProperty
private void setProperty(java.lang.reflect.Method setter, java.lang.String name, java.lang.String value) throws PropertySetterExceptionSet the named property given aPropertyDescriptor.- Parameters:
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.- Throws:
PropertySetterException
-
computeAggregationType
public AggregationType computeAggregationType(java.lang.String name)
-
findAdderMethod
private java.lang.reflect.Method findAdderMethod(java.lang.String name)
-
findSetterMethod
private java.lang.reflect.Method findSetterMethod(java.lang.String name)
-
getParameterClassForMethod
private java.lang.Class<?> getParameterClassForMethod(java.lang.reflect.Method method)
-
computeRawAggregationType
private AggregationType computeRawAggregationType(java.lang.reflect.Method method)
-
isUnequivocallyInstantiable
private boolean isUnequivocallyInstantiable(java.lang.Class<?> clazz)
Can the given clazz instantiable with certainty?- Parameters:
clazz- The class to test for instantiability- Returns:
- true if clazz can be instantiated, and false otherwise.
-
getObjClass
public java.lang.Class<?> getObjClass()
-
addComplexProperty
public void addComplexProperty(java.lang.String name, java.lang.Object complexProperty)
-
invokeMethodWithSingleParameterOnThisObject
void invokeMethodWithSingleParameterOnThisObject(java.lang.reflect.Method method, java.lang.Object parameter)
-
addBasicProperty
public void addBasicProperty(java.lang.String name, java.lang.String strValue)
-
setComplexProperty
public void setComplexProperty(java.lang.String name, java.lang.Object complexProperty)
-
isSanityCheckSuccessful
private boolean isSanityCheckSuccessful(java.lang.String name, java.lang.reflect.Method method, java.lang.Class<?>[] params, java.lang.Object complexProperty)
-
capitalizeFirstLetter
private java.lang.String capitalizeFirstLetter(java.lang.String name)
-
getObj
public java.lang.Object getObj()
-
getRelevantMethod
java.lang.reflect.Method getRelevantMethod(java.lang.String name, AggregationType aggregationType)
-
getAnnotation
<T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.String name, java.lang.Class<T> annonationClass, java.lang.reflect.Method relevantMethod)
-
getDefaultClassNameByAnnonation
java.lang.Class<?> getDefaultClassNameByAnnonation(java.lang.String name, java.lang.reflect.Method relevantMethod)
-
getByConcreteType
java.lang.Class<?> getByConcreteType(java.lang.String name, java.lang.reflect.Method relevantMethod)
-
getClassNameViaImplicitRules
public java.lang.Class<?> getClassNameViaImplicitRules(java.lang.String name, AggregationType aggregationType, DefaultNestedComponentRegistry registry)
-
getTypeForComplexProperty
public java.lang.Class<?> getTypeForComplexProperty(java.lang.String nestedElementTagName, AggregationType aggregationType)
-
checkParameterCount
private void checkParameterCount(java.lang.reflect.Method aMethod, java.lang.String nestedElementTagName)
-
-