Class FieldTool
- java.lang.Object
-
- org.apache.velocity.tools.generic.SafeConfig
-
- org.apache.velocity.tools.generic.FieldTool
-
@DefaultKey("field") @ValidScope("application") public class FieldTool extends SafeConfig
This is a simple tools class to allow easy access to static fields in a class, such as string constants from within a template. Velocity will not introspect for class fields (and won't in the future :), but writing setter/getter methods to do this is a pain, so use this if you really have to access fields.
Example uses in a template:
## here we access a constant in a class include in the configuration $field.COUNTER_NAME ## here we dynamically lookup a class' fields to find another constant $field.in("org.com.SomeClass").ANOTHER_CONSTANT ## here we pass an object instance in (an Integer in this case) and ## retrieve a static constant from that instance's class $field.in(0).MIN_VALUE ## by default, once we've searched a class' fields, those fields stay ## available in the tool (change this by storeDynamicLookups="false") ## so here we get another constant from the Integer class $field.MAX_VALUEExample tools.xml config:
<tools> <toolbox scope="application"> <tool class="org.apache.velocity.tools.generic.FieldTool" include="org.apache.velocity.runtime.RuntimeConstants,com.org.MyConstants"/> </toolbox> </tools>Right now, this tool only gives access to
public staticfields. It seems that anything else is too dangerous. This is for convenient access to 'constants'. If you have fields that aren'tstatic, handle them by explicitly placing them into the context or writing a getter method.- Since:
- VelocityTools 2.0
- Version:
- $Id: FieldTool.java 463298 2006-10-12 16:10:32Z henning $
- Author:
- Geir Magnusson Jr., Nathan Bubna
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classFieldTool.FieldToolSubHolds aMapof results for a particular class.classFieldTool.MutableFieldHolds aFieldandClassreference for later retrieval of the value of a field that is not final and may change at different lookups.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringINCLUDE_KEYThe key used for specifying which classes should be inspected for public static methods to be made available.protected java.util.HashMapstoragestatic java.lang.StringSTORE_DYNAMIC_KEYThe key used for specifying whether or not the tool should store fields in classes dynamically looked up from within a template.protected booleanstoreDynamicLookups-
Fields inherited from class org.apache.velocity.tools.generic.SafeConfig
LOCK_CONFIG_KEY, log, LOGGER_NAME_KEY, SAFE_MODE_KEY, USE_CLASS_LOGGER_KEY
-
-
Constructor Summary
Constructors Constructor Description FieldTool()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidconfigure(ValueParser values)Does the actual configuration.java.lang.Objectget(java.lang.String name)Returns the value for the specified field name as found in the storedMapof field names to values (or placeholders).FieldTool.FieldToolSubin(java.lang.Class clazz)Returns aFieldTool.FieldToolSubholding aMapof all the public static field names to values (or a placeholder if the value is not final) for the specifiedClass.FieldTool.FieldToolSubin(java.lang.Object instance)Returns aFieldTool.FieldToolSubholding aMapof all the public static field names to values (or a placeholder if the value is not final) for theClassof the specified Object.FieldTool.FieldToolSubin(java.lang.String classname)Returns aFieldTool.FieldToolSubholding aMapof all the public static field names to values (or a placeholder if the value is not final) for the specified class(name).protected java.util.Map<java.lang.String,java.lang.Object>inspect(java.lang.Class clazz)Looks for all public, static fields in the specified class and stores their value (if final) or else aFieldTool.MutableFieldfor in aMapunder the fields' names.protected java.lang.Objectretrieve(java.lang.reflect.Field field, java.lang.Class clazz)Retrieves and returns the value of the specifiedFieldin the specifiedClass.-
Methods inherited from class org.apache.velocity.tools.generic.SafeConfig
configure, getLog, initLogger, isConfigLocked, isSafeMode, setLockConfig, setSafeMode
-
-
-
-
Field Detail
-
INCLUDE_KEY
public static final java.lang.String INCLUDE_KEY
The key used for specifying which classes should be inspected for public static methods to be made available.- See Also:
- Constant Field Values
-
STORE_DYNAMIC_KEY
public static final java.lang.String STORE_DYNAMIC_KEY
The key used for specifying whether or not the tool should store fields in classes dynamically looked up from within a template. The default value is true.- See Also:
- Constant Field Values
-
storage
protected java.util.HashMap storage
-
storeDynamicLookups
protected boolean storeDynamicLookups
-
-
Method Detail
-
configure
protected void configure(ValueParser values)
Description copied from class:SafeConfigDoes the actual configuration. This is protected, so subclasses may share the same ValueParser and call configure at any time, while preventing templates from doing so when configure(Map) is locked.- Overrides:
configurein classSafeConfig- Parameters:
values- configuration values
-
get
public java.lang.Object get(java.lang.String name)
Returns the value for the specified field name as found in the storedMapof field names to values (or placeholders). Returnsnullif there is no matching field.- Parameters:
name- field name- Returns:
- field value
-
in
public FieldTool.FieldToolSub in(java.lang.String classname)
Returns aFieldTool.FieldToolSubholding aMapof all the public static field names to values (or a placeholder if the value is not final) for the specified class(name). If theClasswith the specified name cannot be loaded, this will returnnull, rather than throw an exception.- Parameters:
classname- target class name- Returns:
FieldTool.FieldToolSubobject- See Also:
in(Class clazz)
-
in
public FieldTool.FieldToolSub in(java.lang.Object instance)
Returns aFieldTool.FieldToolSubholding aMapof all the public static field names to values (or a placeholder if the value is not final) for theClassof the specified Object.- Parameters:
instance- target instance- Returns:
FieldTool.FieldToolSubobject- See Also:
in(Class clazz)
-
in
public FieldTool.FieldToolSub in(java.lang.Class clazz)
Returns aFieldTool.FieldToolSubholding aMapof all the public static field names to values (or a placeholder if the value is not final) for the specifiedClass.- Parameters:
clazz- target class- Returns:
FieldTool.FieldToolSubobject
-
inspect
protected java.util.Map<java.lang.String,java.lang.Object> inspect(java.lang.Class clazz)
Looks for all public, static fields in the specified class and stores their value (if final) or else aFieldTool.MutableFieldfor in aMapunder the fields' names. This will never return null, only an empty Map if there are no public static fields.- Parameters:
clazz- target class- Returns:
- fields map
-
retrieve
protected java.lang.Object retrieve(java.lang.reflect.Field field, java.lang.Class clazz)Retrieves and returns the value of the specifiedFieldin the specifiedClass. Returnsnullin case of failure.- Parameters:
field- target fieldclazz- target class- Returns:
- field value
-
-