Class ReflectionValueExtractor
- java.lang.Object
-
- org.apache.maven.shared.utils.introspection.ReflectionValueExtractor
-
public class ReflectionValueExtractor extends java.lang.Object
Using simple dotted expressions to extract the values from an Object instance, For example we might want to extract a value like:
project.build.sourceDirectory
The implementation supports indexed, nested and mapped properties similar to the JSP way.
- Version:
- $Id$
- See Also:
- http://struts.apache.org/1.x/struts-taglib/indexedprops.html
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static class
ReflectionValueExtractor.Tokenizer
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.Class<?>[]
CLASS_ARGS
private static java.util.Map<java.lang.Class<?>,ClassMap>
CLASS_MAPS
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
-
Constructor Summary
Constructors Modifier Constructor Description private
ReflectionValueExtractor()
-
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)
-
-
-
Field Detail
-
CLASS_ARGS
private static final java.lang.Class<?>[] CLASS_ARGS
-
OBJECT_ARGS
private static final java.lang.Object[] OBJECT_ARGS
-
CLASS_MAPS
private static final java.util.Map<java.lang.Class<?>,ClassMap> CLASS_MAPS
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.
-
EOF
static final int EOF
- See Also:
- Constant Field Values
-
PROPERTY_START
static final char PROPERTY_START
- See Also:
- Constant Field Values
-
INDEXED_START
static final char INDEXED_START
- See Also:
- Constant Field Values
-
INDEXED_END
static final char INDEXED_END
- See Also:
- Constant Field Values
-
MAPPED_START
static final char MAPPED_START
- See Also:
- Constant Field Values
-
MAPPED_END
static final char MAPPED_END
- See Also:
- Constant Field Values
-
-
Method Detail
-
evaluate
public static java.lang.Object evaluate(@Nonnull java.lang.String expression, @Nullable java.lang.Object root) throws IntrospectionException
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 expressionroot
- not null object- Returns:
- the object defined by the expression
- Throws:
IntrospectionException
- if any
-
evaluate
public static java.lang.Object evaluate(@Nonnull java.lang.String expression, @Nullable java.lang.Object root, boolean trimRootToken) throws IntrospectionException
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 expressionroot
- not null objecttrimRootToken
- trim root token yes/no.- Returns:
- the object defined by the expression
- Throws:
IntrospectionException
- 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 IntrospectionException
- Throws:
IntrospectionException
-
getIndexedValue
private static java.lang.Object getIndexedValue(java.lang.String expression, int from, int to, java.lang.Object value, java.lang.String indexStr) throws IntrospectionException
- Throws:
IntrospectionException
-
getPropertyValue
private static java.lang.Object getPropertyValue(java.lang.Object value, java.lang.String property) throws IntrospectionException
- Throws:
IntrospectionException
-
getClassMap
private static ClassMap getClassMap(java.lang.Class<?> clazz)
-
-