org.apache.velocity.context
Class ProxyVMContext

java.lang.Object
  extended by org.apache.velocity.context.ChainedInternalContextAdapter
      extended by org.apache.velocity.context.ProxyVMContext
All Implemented Interfaces:
Context, InternalContextAdapter, InternalEventContext, InternalWrapperContext

public class ProxyVMContext
extends ChainedInternalContextAdapter

Context for Velocity macro arguments. This special context combines ideas of earlier VMContext and VMProxyArgs by implementing routing functionality internally. This significantly reduces memory allocation upon macro invocations. Since the macro AST is now shared and RuntimeMacro directive is used, the earlier implementation of precalculating VMProxyArgs would not work. See Issue 607 for more info on this class.

Since:
1.6
Version:
$Id$
Author:
Jarkko Viinamaki

Field Summary
 
Fields inherited from class org.apache.velocity.context.ChainedInternalContextAdapter
innerContext
 
Constructor Summary
ProxyVMContext(InternalContextAdapter inner, RuntimeServices rsvc, boolean localContextScope)
           
 
Method Summary
 void addVMProxyArg(InternalContextAdapter context, String macroArgumentName, String literalMacroArgumentName, Node argumentValue)
          Used to put Velocity macro arguments into this context.
 void addVMProxyArg(InternalContextAdapter context, String macroArgumentName, String literalMacroArgumentName, Renderable argumentValue)
          Used to put Velocity macro bodyContext arguments into this context.
 boolean containsKey(Object key)
          Indicates whether the specified key is in the context.
 Object get(String key)
          Implementation of the Context.get() method.
 Object[] getKeys()
          Get all the keys for the values in the context.
 Object localPut(String key, Object value)
          Allows callers to explicitly put objects in the local context, no matter what the velocimacro.context.local setting says.
 Object put(String key, Object value)
          Impl of the Context.put() method.
protected  Object put(String key, Object value, boolean forceLocal)
          Internal put method to select between local and global scope.
 Object remove(Object key)
          Removes the value associated with the specified key from the context.
 
Methods inherited from class org.apache.velocity.context.ChainedInternalContextAdapter
attachEventCartridge, getBaseContext, getCurrentMacroCallDepth, getCurrentMacroName, getCurrentResource, getCurrentTemplateName, getEventCartridge, getInternalUserContext, getMacroLibraries, getMacroNameStack, getTemplateNameStack, icacheGet, icachePut, popCurrentMacroName, popCurrentTemplateName, pushCurrentMacroName, pushCurrentTemplateName, setCurrentResource, setMacroLibraries
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ProxyVMContext

public ProxyVMContext(InternalContextAdapter inner,
                      RuntimeServices rsvc,
                      boolean localContextScope)
Parameters:
inner - Velocity context for processing
rsvc - RuntimeServices provides logging reference
localContextScope - if true, all references are set to be local
Method Detail

addVMProxyArg

public void addVMProxyArg(InternalContextAdapter context,
                          String macroArgumentName,
                          String literalMacroArgumentName,
                          Node argumentValue)
                   throws MethodInvocationException
Used to put Velocity macro arguments into this context.

Parameters:
context - rendering context
macroArgumentName - name of the macro argument that we received
literalMacroArgumentName - ".literal.$"+macroArgumentName
argumentValue - actual value of the macro argument
Throws:
MethodInvocationException

addVMProxyArg

public void addVMProxyArg(InternalContextAdapter context,
                          String macroArgumentName,
                          String literalMacroArgumentName,
                          Renderable argumentValue)
                   throws MethodInvocationException
Used to put Velocity macro bodyContext arguments into this context.

Parameters:
context - rendering context
macroArgumentName - name of the macro argument that we received
literalMacroArgumentName - ".literal.$"+macroArgumentName
argumentValue - actual value of the macro body
Throws:
MethodInvocationException

put

public Object put(String key,
                  Object value)
Impl of the Context.put() method.

Specified by:
put in interface Context
Overrides:
put in class ChainedInternalContextAdapter
Parameters:
key - name of item to set
value - object to set to key
Returns:
old stored object

localPut

public Object localPut(String key,
                       Object value)
Allows callers to explicitly put objects in the local context, no matter what the velocimacro.context.local setting says. Needed e.g. for loop variables in foreach.

Specified by:
localPut in interface InternalWrapperContext
Overrides:
localPut in class ChainedInternalContextAdapter
Parameters:
key - name of item to set.
value - object to set to key.
Returns:
old stored object
See Also:
InternalWrapperContext.localPut(java.lang.String,java.lang.Object)

put

protected Object put(String key,
                     Object value,
                     boolean forceLocal)
Internal put method to select between local and global scope.

Parameters:
key - name of item to set
value - object to set to key
forceLocal - True forces the object into the local scope.
Returns:
old stored object

get

public Object get(String key)
Implementation of the Context.get() method. First checks localcontext, then arguments, then global context.

Specified by:
get in interface Context
Overrides:
get in class ChainedInternalContextAdapter
Parameters:
key - name of item to get
Returns:
stored object or null

containsKey

public boolean containsKey(Object key)
Description copied from interface: Context
Indicates whether the specified key is in the context.

Specified by:
containsKey in interface Context
Overrides:
containsKey in class ChainedInternalContextAdapter
Parameters:
key - The key to look for.
Returns:
Whether the key is in the context.
See Also:
Context.containsKey(java.lang.Object)

getKeys

public Object[] getKeys()
Description copied from interface: Context
Get all the keys for the values in the context.

Specified by:
getKeys in interface Context
Overrides:
getKeys in class ChainedInternalContextAdapter
Returns:
All the keys for the values in the context.
See Also:
Context.getKeys()

remove

public Object remove(Object key)
Description copied from interface: Context
Removes the value associated with the specified key from the context.

Specified by:
remove in interface Context
Overrides:
remove in class ChainedInternalContextAdapter
Parameters:
key - The name of the value to remove.
Returns:
The value that the key was mapped to, or null if unmapped.
See Also:
Context.remove(java.lang.Object)


Copyright © 2000-2010 The Apache Software Foundation. All Rights Reserved.