Class PropertySetter

  • All Implemented Interfaces:
    ContextAware

    public class PropertySetter
    extends ContextAwareBase
    General purpose Object property setter. Clients repeatedly invokes 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.
    • Field Detail

      • obj

        protected final java.lang.Object obj
      • objClass

        protected final java.lang.Class<?> objClass
    • Constructor Detail

    • 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 property
        value - String value of the property
      • setProperty

        private void setProperty​(java.lang.reflect.Method setter,
                                 java.lang.String name,
                                 java.lang.String value)
                          throws PropertySetterException
        Set the named property given a PropertyDescriptor.
        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)