Class ReflectionValueExtractor


  • public class ReflectionValueExtractor
    extends java.lang.Object
    NOTE: This class was copied from plexus-utils, to allow this library to stand completely self-contained.

    Using simple dotted expressions extract the values from a MavenProject instance, For example we might want to extract a value like: project.build.sourceDirectory

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static java.lang.Class<?>[] CLASS_ARGS  
      private static java.util.Map<java.lang.Class<?>,​java.lang.ref.WeakReference<ClassMap>> classMaps
      Use a WeakHashMap here, so the keys (Class objects) can be garbage collected.
      (package private) static int EOF  
      (package private) static char INDEXED_END  
      (package private) static char INDEXED_START  
      (package private) static char MAPPED_END  
      (package private) static char MAPPED_START  
      private static java.lang.Object[] OBJECT_ARGS  
      (package private) static char PROPERTY_START  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.Object evaluate​(java.lang.String expression, java.lang.Object root)
      The implementation supports indexed, nested and mapped properties.
      static java.lang.Object evaluate​(java.lang.String expression, java.lang.Object root, boolean trimRootToken)
      The implementation supports indexed, nested and mapped properties.
      private static ClassMap getClassMap​(java.lang.Class<?> clazz)  
      private static java.lang.Object getIndexedValue​(java.lang.String expression, int from, int to, java.lang.Object value, java.lang.String indexStr)  
      private static java.lang.Object getMappedValue​(java.lang.String expression, int from, int to, java.lang.Object value, java.lang.String key)  
      private static java.lang.Object getPropertyValue​(java.lang.Object value, java.lang.String property)  
      • Methods inherited from class java.lang.Object

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

      • CLASS_ARGS

        private static final java.lang.Class<?>[] CLASS_ARGS
      • OBJECT_ARGS

        private static final java.lang.Object[] OBJECT_ARGS
      • classMaps

        private static final java.util.Map<java.lang.Class<?>,​java.lang.ref.WeakReference<ClassMap>> classMaps
        Use a WeakHashMap here, so the keys (Class objects) can be garbage collected. This approach prevents permgen space overflows due to retention of discarded classloaders.
    • Constructor Detail

      • ReflectionValueExtractor

        private ReflectionValueExtractor()
    • Method Detail

      • evaluate

        public static java.lang.Object evaluate​(java.lang.String expression,
                                                java.lang.Object root)
                                         throws java.lang.Exception

        The implementation supports indexed, nested and mapped properties.

        • nested properties should be defined by a dot, i.e. "user.address.street"
        • indexed properties (java.util.List or array instance) should be contains (\\w+)\\[(\\d+)\\] pattern, i.e. "user.addresses[1].street"
        • mapped properties should be contains (\\w+)\\((.+)\\) pattern, i.e. "user.addresses(myAddress).street"
        Parameters:
        expression - not null expression
        root - not null object
        Returns:
        the object defined by the expression
        Throws:
        java.lang.Exception - if any
      • evaluate

        public static java.lang.Object evaluate​(java.lang.String expression,
                                                java.lang.Object root,
                                                boolean trimRootToken)
                                         throws java.lang.Exception

        The implementation supports indexed, nested and mapped properties.

        • nested properties should be defined by a dot, i.e. "user.address.street"
        • indexed properties (java.util.List or array instance) should be contains (\\w+)\\[(\\d+)\\] pattern, i.e. "user.addresses[1].street"
        • mapped properties should be contains (\\w+)\\((.+)\\) pattern, i.e. "user.addresses(myAddress).street"
        Parameters:
        expression - not null expression
        root - not null object
        trimRootToken - trim the token or not.
        Returns:
        the object defined by the expression
        Throws:
        java.lang.Exception - if any
      • getMappedValue

        private static java.lang.Object getMappedValue​(java.lang.String expression,
                                                       int from,
                                                       int to,
                                                       java.lang.Object value,
                                                       java.lang.String key)
                                                throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getIndexedValue

        private static java.lang.Object getIndexedValue​(java.lang.String expression,
                                                        int from,
                                                        int to,
                                                        java.lang.Object value,
                                                        java.lang.String indexStr)
                                                 throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getPropertyValue

        private static java.lang.Object getPropertyValue​(java.lang.Object value,
                                                         java.lang.String property)
                                                  throws java.lang.Exception
        Throws:
        java.lang.Exception
      • getClassMap

        private static ClassMap getClassMap​(java.lang.Class<?> clazz)