Class AnnotationHelper


  • public class AnnotationHelper
    extends java.lang.Object
    Helper class to process fields annotated with Parsed
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private AnnotationHelper()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static boolean allFieldsIndexBasedForParsing​(java.lang.Class<?> beanClass)
      Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by index.
      static boolean allFieldsIndexBasedForWriting​(java.lang.Class<?> beanClass)
      Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by index.
      private static boolean allFieldsIndexOrNameBased​(boolean searchName, java.lang.Class<?> beanClass, MethodFilter filter)  
      static boolean allFieldsNameBasedForParsing​(java.lang.Class<?> beanClass)
      Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by name.
      static boolean allFieldsNameBasedForWriting​(java.lang.Class<?> beanClass)
      Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by name.
      static void applyFormatSettings​(java.lang.Object formatter, java.lang.String[] propertiesAndValues)
      Applied the configuration of a formatter object (SimpleDateFormat, NumberFormat and others).
      static EnumConversion createDefaultEnumConversion​(java.lang.Class fieldType, java.lang.String nullRead, java.lang.String nullWrite)  
      static java.lang.String[] deriveHeaderNamesFromFields​(java.lang.Class<?> beanClass, MethodFilter filter)
      Runs through all Parsed annotations of a given class to identify all header names associated with its fields
      (package private) static java.lang.String describeElement​(java.lang.reflect.AnnotatedElement element)  
      private static java.util.Locale extractLocale​(java.lang.String[] options)  
      private static java.lang.String extractOption​(java.lang.String[] options, java.lang.String key)  
      private static java.util.TimeZone extractTimeZone​(java.lang.String[] options)  
      static java.util.List<java.lang.annotation.Annotation> findAllAnnotationsInPackage​(java.lang.reflect.AnnotatedElement annotatedElement, java.lang.Package aPackage)
      Returns all annotations applied to an element, excluding the ones not in a given package.
      private static void findAllAnnotationsInPackage​(java.lang.reflect.AnnotatedElement annotatedElement, java.lang.Package aPackage, java.util.ArrayList<? super java.lang.annotation.Annotation> found, java.util.Set<java.lang.annotation.Annotation> visited)  
      static <A extends java.lang.annotation.Annotation>
      A
      findAnnotation​(java.lang.reflect.AnnotatedElement annotatedElement, java.lang.Class<A> annotationType)
      Searches for an annotation of a given type that's been applied to an element either directly (as a regular annotation) or indirectly (as a meta-annotations, i.e.
      private static <A> A findAnnotation​(java.lang.reflect.AnnotatedElement annotatedElement, java.lang.Class<A> annotationType, java.util.Set<java.lang.annotation.Annotation> visited, java.util.Stack<java.lang.annotation.Annotation> path)  
      static <T extends java.lang.annotation.Annotation>
      T
      findAnnotationInClass​(java.lang.Class<?> beanClass, java.lang.Class<T> annotation)
      Searches for a given annotation in the hierarchy of a class
      private static java.lang.Class<?> findAnnotationMethodType​(java.lang.Class<? extends java.lang.annotation.Annotation> type, java.lang.String methodName)  
      static Headers findHeadersAnnotation​(java.lang.Class<?> beanClass)
      Searches for the Headers annotation in the hierarchy of a class
      static java.util.Map<java.lang.reflect.Field,​PropertyWrapper> getAllFields​(java.lang.Class<?> beanClass)
      Returns all fields available from a given class.
      static java.util.List<java.lang.reflect.Method> getAllMethods​(java.lang.Class<?> beanClass, MethodFilter filter)
      Returns all methods available from a given class
      static java.util.List<java.lang.reflect.Field> getAnnotatedFields​(java.lang.Class<?> beanClass)
      Returns all attributes available from a given class that have an annotation.
      static <A extends java.lang.annotation.Annotation>
      java.util.List<java.lang.reflect.Field>
      getAnnotatedFields​(java.lang.Class<?> beanClass, java.lang.Class<A> annotationType)
      Returns all attributes available from a given class that have an annotation.
      static java.util.List<java.lang.reflect.Method> getAnnotatedMethods​(java.lang.Class<?> beanClass, MethodFilter filter)
      Returns all methods available from a given class that have an annotation.
      static <A extends java.lang.annotation.Annotation>
      java.util.List<java.lang.reflect.Method>
      getAnnotatedMethods​(java.lang.Class<?> beanClass, MethodFilter filter, java.lang.Class<A> annotationType)
      Returns all methods available from a given class that have a specific annotation.
      static Conversion getConversion​(java.lang.Class classType, java.lang.annotation.Annotation annotation)
      Identifies the proper conversion for a given type and an annotation from the package com.univocity.parsers.annotations
      static Conversion getConversion​(java.lang.Class fieldType, java.lang.reflect.AnnotatedElement target, java.lang.annotation.Annotation annotation, java.lang.String nullRead, java.lang.String nullWrite)  
      static java.lang.Class<?> getDeclaringClass​(java.lang.reflect.AnnotatedElement element)  
      static Conversion getDefaultConversion​(java.lang.Class fieldType, java.lang.reflect.AnnotatedElement target, Parsed parsed)
      Identifies the proper conversion for a given type
      static Conversion getDefaultConversion​(java.lang.reflect.AnnotatedElement target)
      Returns the default Conversion that should be applied to the field based on its type.
      static java.lang.Object getDefaultPrimitiveValue​(java.lang.Class type)
      Returns Java's default value for a given type, in a primitive type wrapper.
      static java.util.List<TransformedHeader> getFieldSequence​(java.lang.Class beanClass, boolean processNested, HeaderTransformer transformer, MethodFilter filter)
      Returns a list of fields with Parsed annotations in the sequence they should be processed for parsing or writing.
      private static java.util.List<TransformedHeader> getFieldSequence​(java.lang.Class beanClass, boolean processNested, java.util.List<java.lang.Integer> indexes, HeaderTransformer transformer, MethodFilter filter)  
      static java.lang.String getName​(java.lang.reflect.AnnotatedElement element)  
      static java.lang.String getNullReadValue​(java.lang.reflect.AnnotatedElement target, Parsed parsed)  
      private static java.lang.String getNullValue​(java.lang.String defaultValue)
      Converts the special "null" strings that might be provided by and Parsed#defaultNullWrite()
      static java.lang.String getNullWriteValue​(java.lang.reflect.AnnotatedElement target, Parsed parsed)  
      static java.lang.Integer[] getSelectedIndexes​(java.lang.Class<?> beanClass, MethodFilter filter)
      Runs through all Parsed annotations of a given class to identify all indexes associated with its fields
      static java.lang.Class<?> getType​(java.lang.reflect.AnnotatedElement element)  
      private static java.lang.Object invoke​(java.lang.annotation.Annotation annotation, java.lang.reflect.Method method)  
      private static void invokeSetter​(java.lang.Object formatter, PropertyWrapper property, java.lang.String value)  
      private static boolean isCustomAnnotation​(java.lang.annotation.Annotation annotation)  
      static <T> T newInstance​(java.lang.Class parent, java.lang.Class<T> type, java.lang.String[] args)  
      private static void processAnnotations​(java.lang.reflect.AnnotatedElement element, boolean processNested, java.util.List<java.lang.Integer> indexes, java.util.List<TransformedHeader> tmp, java.util.Map<java.lang.reflect.AnnotatedElement,​java.util.List<TransformedHeader>> nestedReplacements, HeaderTransformer transformer, MethodFilter filter)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • lastProcessedElement

        private static java.lang.reflect.AnnotatedElement lastProcessedElement
      • lastProcessedAnnotationType

        private static java.lang.Class<? extends java.lang.annotation.Annotation> lastProcessedAnnotationType
      • lastAnnotationFound

        private static java.lang.annotation.Annotation lastAnnotationFound
      • javaLangAnnotationTypes

        private static final java.util.Set<java.lang.Class> javaLangAnnotationTypes
      • customAnnotationTypes

        private static final java.util.Set<java.lang.Class> customAnnotationTypes
    • Constructor Detail

      • AnnotationHelper

        private AnnotationHelper()
    • Method Detail

      • getNullValue

        private static java.lang.String getNullValue​(java.lang.String defaultValue)
        Converts the special "null" strings that might be provided by and Parsed#defaultNullWrite()
        Parameters:
        defaultValue - The string returned by and Parsed#defaultNullWrite()
        Returns:
        the default value if it is not the String literal "null" or "'null'".

        If "null" was provided, then null will be returned.

        If "'null'" was provided, then "null" will be returned.

      • getNullWriteValue

        public static java.lang.String getNullWriteValue​(java.lang.reflect.AnnotatedElement target,
                                                         Parsed parsed)
      • getNullReadValue

        public static java.lang.String getNullReadValue​(java.lang.reflect.AnnotatedElement target,
                                                        Parsed parsed)
      • getConversion

        public static Conversion getConversion​(java.lang.Class classType,
                                               java.lang.annotation.Annotation annotation)
        Identifies the proper conversion for a given type and an annotation from the package com.univocity.parsers.annotations
        Parameters:
        classType - the type to have conversions applied to
        annotation - the annotation from com.univocity.parsers.annotations that identifies a Conversion instance.
        Returns:
        The Conversion that should be applied to the type
      • createDefaultEnumConversion

        public static EnumConversion createDefaultEnumConversion​(java.lang.Class fieldType,
                                                                 java.lang.String nullRead,
                                                                 java.lang.String nullWrite)
      • getConversion

        public static Conversion getConversion​(java.lang.Class fieldType,
                                               java.lang.reflect.AnnotatedElement target,
                                               java.lang.annotation.Annotation annotation,
                                               java.lang.String nullRead,
                                               java.lang.String nullWrite)
      • extractOption

        private static java.lang.String extractOption​(java.lang.String[] options,
                                                      java.lang.String key)
      • extractTimeZone

        private static java.util.TimeZone extractTimeZone​(java.lang.String[] options)
      • extractLocale

        private static java.util.Locale extractLocale​(java.lang.String[] options)
      • newInstance

        public static <T> T newInstance​(java.lang.Class parent,
                                        java.lang.Class<T> type,
                                        java.lang.String[] args)
      • getDefaultConversion

        public static Conversion getDefaultConversion​(java.lang.Class fieldType,
                                                      java.lang.reflect.AnnotatedElement target,
                                                      Parsed parsed)
        Identifies the proper conversion for a given type
        Parameters:
        fieldType - The type of field to have conversions applied to.
        target - the annotated attribute of method that has the annotation
        parsed - the Parsed annotation from com.univocity.parsers.annotations.
        Returns:
        The Conversion that should be applied to the field type
      • getDefaultConversion

        public static Conversion getDefaultConversion​(java.lang.reflect.AnnotatedElement target)
        Returns the default Conversion that should be applied to the field based on its type.
        Parameters:
        target - The field or method whose values must be converted from a given parsed String.
        Returns:
        The default Conversion applied to the given field.
      • applyFormatSettings

        public static void applyFormatSettings​(java.lang.Object formatter,
                                               java.lang.String[] propertiesAndValues)
        Applied the configuration of a formatter object (SimpleDateFormat, NumberFormat and others).
        Parameters:
        formatter - the formatter instance
        propertiesAndValues - a sequence of key-value pairs, where the key is a property of the formatter object to be set to the following value via reflection
      • invokeSetter

        private static void invokeSetter​(java.lang.Object formatter,
                                         PropertyWrapper property,
                                         java.lang.String value)
      • allFieldsIndexOrNameBased

        private static boolean allFieldsIndexOrNameBased​(boolean searchName,
                                                         java.lang.Class<?> beanClass,
                                                         MethodFilter filter)
      • allFieldsIndexBasedForParsing

        public static boolean allFieldsIndexBasedForParsing​(java.lang.Class<?> beanClass)
        Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by index.
        Parameters:
        beanClass - a class whose Parsed annotations will be processed.
        Returns:
        true if every field and method annotated with Parsed in the given class maps to an index, otherwise false.
      • allFieldsNameBasedForParsing

        public static boolean allFieldsNameBasedForParsing​(java.lang.Class<?> beanClass)
        Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by name.
        Parameters:
        beanClass - a class whose Parsed annotations will be processed.
        Returns:
        true if every field and method annotated with Parsed in the given class maps to a header name, otherwise false.
      • allFieldsIndexBasedForWriting

        public static boolean allFieldsIndexBasedForWriting​(java.lang.Class<?> beanClass)
        Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by index.
        Parameters:
        beanClass - a class whose Parsed annotations will be processed.
        Returns:
        true if every field and method annotated with Parsed in the given class maps to an index, otherwise false.
      • allFieldsNameBasedForWriting

        public static boolean allFieldsNameBasedForWriting​(java.lang.Class<?> beanClass)
        Runs through all annotations of a given class to identify whether all annotated fields and methods (with the Parsed annotation) are mapped to a column by name.
        Parameters:
        beanClass - a class whose Parsed annotations will be processed.
        Returns:
        true if every field and method annotated with Parsed in the given class maps to a header name, otherwise false.
      • getSelectedIndexes

        public static java.lang.Integer[] getSelectedIndexes​(java.lang.Class<?> beanClass,
                                                             MethodFilter filter)
        Runs through all Parsed annotations of a given class to identify all indexes associated with its fields
        Parameters:
        beanClass - a class whose Parsed annotations will be processed.
        filter - filter to apply over annotated methods when the class is being used for reading data from beans (to write values to an output) or when writing values into beans (while parsing). It is used to choose either a "get" or a "set" method annotated with Parsed, when both methods target the same field.
        Returns:
        an array of column indexes used by the given class
      • deriveHeaderNamesFromFields

        public static java.lang.String[] deriveHeaderNamesFromFields​(java.lang.Class<?> beanClass,
                                                                     MethodFilter filter)
        Runs through all Parsed annotations of a given class to identify all header names associated with its fields
        Parameters:
        beanClass - a class whose Parsed annotations will be processed.
        filter - a filter to exclude annotated methods that won't be used for parsing or writing
        Returns:
        an array of column names used by the given class
      • findAnnotationInClass

        public static <T extends java.lang.annotation.Annotation> T findAnnotationInClass​(java.lang.Class<?> beanClass,
                                                                                          java.lang.Class<T> annotation)
        Searches for a given annotation in the hierarchy of a class
        Type Parameters:
        T - the type of the annotation to return
        Parameters:
        beanClass - the class whose hierarchy will be searched
        annotation - the annotation to locate
        Returns:
        the annotation of the given class or its most immediate parent, or null if not found.
      • findHeadersAnnotation

        public static Headers findHeadersAnnotation​(java.lang.Class<?> beanClass)
        Searches for the Headers annotation in the hierarchy of a class
        Parameters:
        beanClass - the class whose hierarchy will be searched
        Returns:
        the Headers annotation of the given class or its most immediate parent, or null if not found.
      • getType

        public static java.lang.Class<?> getType​(java.lang.reflect.AnnotatedElement element)
      • getDeclaringClass

        public static java.lang.Class<?> getDeclaringClass​(java.lang.reflect.AnnotatedElement element)
      • getName

        public static java.lang.String getName​(java.lang.reflect.AnnotatedElement element)
      • describeElement

        static java.lang.String describeElement​(java.lang.reflect.AnnotatedElement element)
      • processAnnotations

        private static void processAnnotations​(java.lang.reflect.AnnotatedElement element,
                                               boolean processNested,
                                               java.util.List<java.lang.Integer> indexes,
                                               java.util.List<TransformedHeader> tmp,
                                               java.util.Map<java.lang.reflect.AnnotatedElement,​java.util.List<TransformedHeader>> nestedReplacements,
                                               HeaderTransformer transformer,
                                               MethodFilter filter)
      • getFieldSequence

        public static java.util.List<TransformedHeader> getFieldSequence​(java.lang.Class beanClass,
                                                                         boolean processNested,
                                                                         HeaderTransformer transformer,
                                                                         MethodFilter filter)
        Returns a list of fields with Parsed annotations in the sequence they should be processed for parsing or writing. The sequence is ordered taking into account their original order in the annotated class, unless Parsed.index() is set to a non-negative number.
        Parameters:
        beanClass - the class whose field sequence will be returned.
        processNested - flag indicating whether Nested annotations should be processed
        transformer - a HeaderTransformer instance to be used for transforming headers of a given Nested attribute.
        filter - filter to apply over annotated methods when the class is being used for reading data from beans (to write values to an output) or when writing values into beans (while parsing). It is used to choose either a "get" or a "set" method annotated with Parsed, when both methods target the same field.
        Returns:
        a list of fields ordered by their processing sequence
      • getFieldSequence

        private static java.util.List<TransformedHeader> getFieldSequence​(java.lang.Class beanClass,
                                                                          boolean processNested,
                                                                          java.util.List<java.lang.Integer> indexes,
                                                                          HeaderTransformer transformer,
                                                                          MethodFilter filter)
      • getAllFields

        public static java.util.Map<java.lang.reflect.Field,​PropertyWrapper> getAllFields​(java.lang.Class<?> beanClass)
        Returns all fields available from a given class.
        Parameters:
        beanClass - a class whose fields will be returned.
        Returns:
        a map of Field and the corresponding PropertyWrapper
      • getAnnotatedMethods

        public static <A extends java.lang.annotation.Annotation> java.util.List<java.lang.reflect.Method> getAnnotatedMethods​(java.lang.Class<?> beanClass,
                                                                                                                               MethodFilter filter,
                                                                                                                               java.lang.Class<A> annotationType)
        Returns all methods available from a given class that have a specific annotation.
        Type Parameters:
        A - the expected annotation type
        Parameters:
        beanClass - a class whose methods will be returned.
        filter - filter to apply over annotated methods when the class is being used for reading data from beans (to write values to an output) or when writing values into beans (while parsing). It is used to choose either a "get" or a "set" method annotated with Parsed, when both methods target the same field.
        annotationType - the annotation type to consider
        Returns:
        a list of Method with at least one annotation
      • getAllMethods

        public static java.util.List<java.lang.reflect.Method> getAllMethods​(java.lang.Class<?> beanClass,
                                                                             MethodFilter filter)
        Returns all methods available from a given class
        Parameters:
        beanClass - a class whose methods will be returned.
        filter - filter to apply over annotated methods when the class is being used for reading data from beans (to write values to an output) or when writing values into beans (while parsing). It is used to choose either a "get" or a "set" method annotated with Parsed, when both methods target the same field.
        Returns:
        a list of Methods that conform to the given filter.
      • getAnnotatedMethods

        public static java.util.List<java.lang.reflect.Method> getAnnotatedMethods​(java.lang.Class<?> beanClass,
                                                                                   MethodFilter filter)
        Returns all methods available from a given class that have an annotation.
        Parameters:
        beanClass - a class whose methods will be returned.
        filter - filter to apply over annotated methods when the class is being used for reading data from beans (to write values to an output) or when writing values into beans (while parsing). It is used to choose either a "get" or a "set" method annotated with Parsed, when both methods target the same field.
        Returns:
        a list of Method with at least one annotation
      • getAnnotatedFields

        public static java.util.List<java.lang.reflect.Field> getAnnotatedFields​(java.lang.Class<?> beanClass)
        Returns all attributes available from a given class that have an annotation.
        Parameters:
        beanClass - a class whose methods will be returned.
        Returns:
        a list of Field with at least one annotation
      • getAnnotatedFields

        public static <A extends java.lang.annotation.Annotation> java.util.List<java.lang.reflect.Field> getAnnotatedFields​(java.lang.Class<?> beanClass,
                                                                                                                             java.lang.Class<A> annotationType)
        Returns all attributes available from a given class that have an annotation.
        Type Parameters:
        A - the expected annotation type
        Parameters:
        beanClass - a class whose methods will be returned.
        annotationType - the type of annotation to consider
        Returns:
        a list of Field with at least one annotation
      • findAnnotation

        public static <A extends java.lang.annotation.Annotation> A findAnnotation​(java.lang.reflect.AnnotatedElement annotatedElement,
                                                                                   java.lang.Class<A> annotationType)
        Searches for an annotation of a given type that's been applied to an element either directly (as a regular annotation) or indirectly (as a meta-annotations, i.e. an annotation that has annotations).
        Type Parameters:
        A - the type of the annotation being searched for
        Parameters:
        annotatedElement - the element whose annotations will be searched
        annotationType - the type of annotation to search for
        Returns:
        the annotation associated with the given element, or null if not found.
      • findAnnotationMethodType

        private static java.lang.Class<?> findAnnotationMethodType​(java.lang.Class<? extends java.lang.annotation.Annotation> type,
                                                                   java.lang.String methodName)
      • invoke

        private static java.lang.Object invoke​(java.lang.annotation.Annotation annotation,
                                               java.lang.reflect.Method method)
      • findAnnotation

        private static <A> A findAnnotation​(java.lang.reflect.AnnotatedElement annotatedElement,
                                            java.lang.Class<A> annotationType,
                                            java.util.Set<java.lang.annotation.Annotation> visited,
                                            java.util.Stack<java.lang.annotation.Annotation> path)
      • isCustomAnnotation

        private static boolean isCustomAnnotation​(java.lang.annotation.Annotation annotation)
      • findAllAnnotationsInPackage

        public static java.util.List<java.lang.annotation.Annotation> findAllAnnotationsInPackage​(java.lang.reflect.AnnotatedElement annotatedElement,
                                                                                                  java.lang.Package aPackage)
        Returns all annotations applied to an element, excluding the ones not in a given package.
        Parameters:
        annotatedElement - the element (method, field, etc) whose annotations will be extracted
        aPackage - the package of the annotations that should be returned
        Returns:
        the list of annotation elements applied to the given element, that are also members of the given package.
      • findAllAnnotationsInPackage

        private static void findAllAnnotationsInPackage​(java.lang.reflect.AnnotatedElement annotatedElement,
                                                        java.lang.Package aPackage,
                                                        java.util.ArrayList<? super java.lang.annotation.Annotation> found,
                                                        java.util.Set<java.lang.annotation.Annotation> visited)
      • getDefaultPrimitiveValue

        public static final java.lang.Object getDefaultPrimitiveValue​(java.lang.Class type)
        Returns Java's default value for a given type, in a primitive type wrapper.
        Parameters:
        type - the primitive type whose default value will be returned.
        Returns:
        the default value for the given primitive type, or null if the type is not primitive.