org.apache.commons.configuration.interpol

Class ConstantLookup

public class ConstantLookup extends StrLookup

A specialized lookup implementation that allows access to constant fields of classes.

Sometimes it is necessary in a configuration file to refer to a constant defined in a class. This can be done with this lookup implementation. Variable names passed in must be of the form mypackage.MyClass.FIELD. The lookup() method will split the passed in string at the last dot, separating the fully qualified class name and the name of the constant (i.e. static final) member field. Then the class is loaded and the field's value is obtained using reflection.

Once retrieved values are cached for fast access. This class is thread-safe. It can be used as a standard (i.e. global) lookup object and serve multiple clients concurrently.

Since: 1.4

Version: $Id: ConstantLookup.java 490375 2006-12-26 21:28:04Z oheger $

Author: Commons Configuration team

Field Summary
static MapconstantCache
An internally used cache for already retrieved values.
static charFIELD_SEPRATOR
Constant for the field separator.
Loglog
The logger.
Method Summary
static voidclear()
Clears the shared cache with the so far resolved constants.
protected ClassfetchClass(String className)
Loads the class with the specified name.
Stringlookup(String var)
Tries to resolve the specified variable.
protected ObjectresolveField(String className, String fieldName)
Determines the value of the specified constant member field of a class.

Field Detail

constantCache

private static Map constantCache
An internally used cache for already retrieved values.

FIELD_SEPRATOR

private static final char FIELD_SEPRATOR
Constant for the field separator.

log

private Log log
The logger.

Method Detail

clear

public static void clear()
Clears the shared cache with the so far resolved constants.

fetchClass

protected Class fetchClass(String className)
Loads the class with the specified name. If an application has special needs regarding the class loaders to be used, it can hook in here. This implementation delegates to the getClass() method of Commons Lang's ClassUtils.

Parameters: className the name of the class to be loaded

Returns: the corresponding class object

Throws: ClassNotFoundException if the class cannot be loaded

lookup

public String lookup(String var)
Tries to resolve the specified variable. The passed in variable name is interpreted as the name of a static final member field of a class. If the value has already been obtained, it can be retrieved from an internal cache. Otherwise this method will invoke the resolveField() method and pass in the name of the class and the field.

Parameters: var the name of the variable to be resolved

Returns: the value of this variable or null if it cannot be resolved

resolveField

protected Object resolveField(String className, String fieldName)
Determines the value of the specified constant member field of a class. This implementation will call fetchClass() to obtain the java.lang.Class object for the target class. Then it will use reflection to obtain the field's value. For this to work the field must be accessable.

Parameters: className the name of the class fieldName the name of the member field of that class to read

Returns: the field's value

Throws: Exception if an error occurs