org.apache.velocity.runtime

Class RuntimeInstance

Implemented Interfaces:
RuntimeConstants, RuntimeServices

public class RuntimeInstance
extends java.lang.Object
implements RuntimeConstants, RuntimeServices

This is the Runtime system for Velocity. It is the single access point for all functionality in Velocity. It adheres to the mediator pattern and is the only structure that developers need to be familiar with in order to get Velocity to perform. The Runtime will also cooperate with external systems like Turbine. Runtime properties can set and then the Runtime is initialized. Turbine for example knows where the templates are to be loaded from, and where the velocity log file should be placed. So in the case of Velocity cooperating with Turbine the code might look something like the following:
 Runtime.setProperty(Runtime.FILE_RESOURCE_LOADER_PATH, templatePath);
 Runtime.setProperty(Runtime.RUNTIME_LOG, pathToVelocityLog);
 Runtime.init();
 
 -----------------------------------------------------------------------
 N O T E S  O N  R U N T I M E  I N I T I A L I Z A T I O N
 -----------------------------------------------------------------------
 Runtime.init()
 
 If Runtime.init() is called by itself the Runtime will
 initialize with a set of default values.
 -----------------------------------------------------------------------
 Runtime.init(String/Properties)

 In this case the default velocity properties are layed down
 first to provide a solid base, then any properties provided
 in the given properties object will override the corresponding
 default property.
 -----------------------------------------------------------------------
 

Version:
$Id: RuntimeInstance.java,v 1.15 2002/02/12 18:38:00 dlr Exp $

Authors:
Jason van Zyl
Jeff Bowden
Geir Magusson Jr.

Nested Class Summary

Field Summary

private Map
applicationAttributes
private ExtendedProperties
configuration
Object that houses the configuration options for the velocity runtime.
private boolean
initialized
Indicate whether the Runtime has been fully initialized.
private Introspector
introspector
private LogSystem
logSystem
The Runtime logger.
private ExtendedProperties
overridingProperties
These are the properties that are laid down over top of the default properties when requested.
private SimplePool
parserPool
The Runtime parser pool
private ResourceManager
resourceManager
private Hashtable
runtimeDirectives
This is a hashtable of initialized directives.
private VelocimacroFactory
vmFactory
VelocimacroFactory object to manage VMs

Fields inherited from interface org.apache.velocity.runtime.RuntimeConstants

COUNTER_INITIAL_VALUE, COUNTER_NAME, DEBUG_PREFIX, DEFAULT_RUNTIME_DIRECTIVES, DEFAULT_RUNTIME_PROPERTIES, ENCODING_DEFAULT, ERRORMSG_END, ERRORMSG_START, ERROR_PREFIX, FILE_RESOURCE_LOADER_CACHE, FILE_RESOURCE_LOADER_PATH, INFO_PREFIX, INPUT_ENCODING, INTERPOLATE_STRINGLITERALS, LOGSYSTEM_LOG4J_EMAIL_BUFFER_SIZE, LOGSYSTEM_LOG4J_EMAIL_FROM, LOGSYSTEM_LOG4J_EMAIL_SERVER, LOGSYSTEM_LOG4J_EMAIL_SUBJECT, LOGSYSTEM_LOG4J_EMAIL_TO, LOGSYSTEM_LOG4J_FILE_BACKUPS, LOGSYSTEM_LOG4J_FILE_SIZE, LOGSYSTEM_LOG4J_PATTERN, LOGSYSTEM_LOG4J_REMOTE_HOST, LOGSYSTEM_LOG4J_REMOTE_PORT, LOGSYSTEM_LOG4J_SYSLOGD_FACILITY, LOGSYSTEM_LOG4J_SYSLOGD_HOST, NUMBER_OF_PARSERS, OUTPUT_ENCODING, PARSER_POOL_SIZE, PARSE_DIRECTIVE_MAXDEPTH, RESOURCE_LOADER, RESOURCE_MANAGER_CACHE_CLASS, RESOURCE_MANAGER_CLASS, RESOURCE_MANAGER_LOGWHENFOUND, RUNTIME_LOG, RUNTIME_LOG_ERROR_STACKTRACE, RUNTIME_LOG_INFO_STACKTRACE, RUNTIME_LOG_LOGSYSTEM, RUNTIME_LOG_LOGSYSTEM_CLASS, RUNTIME_LOG_REFERENCE_LOG_INVALID, RUNTIME_LOG_WARN_STACKTRACE, UNKNOWN_PREFIX, VM_CONTEXT_LOCALSCOPE, VM_LIBRARY, VM_LIBRARY_AUTORELOAD, VM_MESSAGES_ON, VM_PERM_ALLOW_INLINE, VM_PERM_ALLOW_INLINE_REPLACE_GLOBAL, VM_PERM_INLINE_LOCAL, WARN_PREFIX

Constructor Summary

RuntimeInstance()

Method Summary

void
addProperty(String key, Object value)
Add a property to the configuration.
boolean
addVelocimacro(String name, String macro, argArray[] , String sourceTemplate)
Adds a new Velocimacro.
void
clearProperty(String key)
Clear the values pertaining to a particular property.
Parser
createNewParser()
Returns a JavaCC generated Parser.
void
debug(Object message)
Log a debug message.
boolean
dumpVMNamespace(String namespace)
tells the vmFactory to dump the specified namespace.
void
error(Object message)
Log an error message.
Object
getApplicationAttribute(Object key)
boolean
getBoolean(String key, boolean def)
Boolean property accessor method to hide the configuration implementation.
ExtendedProperties
getConfiguration()
Return the velocity runtime configuration object.
ContentResource
getContent(String name)
Returns a static content resource from the resource manager.
ContentResource
getContent(String name, String encoding)
Returns a static content resource from the resource manager.
int
getInt(String key)
Int property accessor method to hide the configuration implementation.
int
getInt(String key, int defaultValue)
Int property accessor method to hide the configuration implementation.
Introspector
getIntrospector()
Return the Introspector for this instance
String
getLoaderNameForResource(String resourceName)
Determines is a template exists, and returns name of the loader that provides it.
Object
getProperty(String key)
Allows an external caller to get a property.
String
getString(String key)
String property accessor method to hide the configuration implementation
String
getString(String key, String defaultValue)
String property accessor method with default to hide the configuration implementation.
Template
getTemplate(String name)
Returns a Template from the resource manager.
Template
getTemplate(String name, String encoding)
Returns a Template from the resource manager
Directive
getVelocimacro(String vmName, String templateName)
Returns the appropriate VelocimacroProxy object if strVMname is a valid current Velocimacro.
void
info(Object message)
Log an info message.
void
init()
void
init(Properties p)
Initialize the Velocity Runtime with a Properties object.
void
init(String configurationFile)
Initialize the Velocity Runtime with the name of ExtendedProperties object.
private void
initializeDirectives()
This methods initializes all the directives that are used by the Velocity Runtime.
private void
initializeLogger()
Initialize the Velocity logging system.
private void
initializeParserPool()
Initializes the Velocity parser pool.
private void
initializeProperties()
Initialize Velocity properties, if the default properties have not been laid down first then do so.
private void
initializeResourceManager()
boolean
isVelocimacro(String vmName, String templateName)
Checks to see if a VM exists
private void
loadDirective(String directiveClass, String caption)
instantiates and loads the directive with some basic checks
private void
log(int level, Object message)
Handle logging.
SimpleNode
parse(Reader reader, String templateName)
Parse the input and return the root of AST node structure.
SimpleNode
parse(Reader reader, String templateName, boolean dumpNamespace)
Parse the input and return the root of the AST node structure.
Object
setApplicationAttribute(Object key, Object o)
void
setConfiguration(ExtendedProperties configuration)
Allow an external system to set an ExtendedProperties object to use.
private void
setDefaultProperties()
Initializes the Velocity Runtime with properties file.
void
setProperty(String key, Object value)
Allows an external system to set a property in the Velocity Runtime.
private boolean
showStackTrace()
Added this to check and make sure that the configuration is initialized before trying to get properties from it.
void
warn(Object message)
Log a warning message.

Field Details

applicationAttributes

private Map applicationAttributes


configuration

private ExtendedProperties configuration
Object that houses the configuration options for the velocity runtime. The ExtendedProperties object allows the convenient retrieval of a subset of properties. For example all the properties for a resource loader can be retrieved from the main ExtendedProperties object using something like the following: ExtendedProperties loaderConfiguration = configuration.subset(loaderID); And a configuration is a lot more convenient to deal with then conventional properties objects, or Maps.


initialized

private boolean initialized
Indicate whether the Runtime has been fully initialized.


introspector

private Introspector introspector


logSystem

private LogSystem logSystem
The Runtime logger. We start with an instance of a 'primordial logger', which just collects log messages then, when the log system is initialized, we dump all messages out of the primordial one into the real one.


overridingProperties

private ExtendedProperties overridingProperties
These are the properties that are laid down over top of the default properties when requested.


parserPool

private SimplePool parserPool
The Runtime parser pool


resourceManager

private ResourceManager resourceManager


runtimeDirectives

private Hashtable runtimeDirectives
This is a hashtable of initialized directives. The directives that populate this hashtable are taken from the RUNTIME_DEFAULT_DIRECTIVES property file. This hashtable is passed to each parser that is created.


vmFactory

private VelocimacroFactory vmFactory
VelocimacroFactory object to manage VMs

Constructor Details

RuntimeInstance

public RuntimeInstance()

Method Details

addProperty

public void addProperty(String key,
                        Object value)
Add a property to the configuration. If it already exists then the value stated here will be added to the configuration entry. For example, if resource.loader = file is already present in the configuration and you addProperty("resource.loader", "classpath") Then you will end up with a Vector like the following: ["file", "classpath"]
Specified by:
addProperty in interface RuntimeServices

Parameters:


addVelocimacro

public boolean addVelocimacro(String name,
                              String macro,
                              argArray[] ,
                              String sourceTemplate)
Adds a new Velocimacro. Usually called by Macro only while parsing.
Specified by:
addVelocimacro in interface RuntimeServices

Parameters:

Returns:
boolean True if added, false if rejected for some reason (either parameters or permission settings)


clearProperty

public void clearProperty(String key)
Clear the values pertaining to a particular property.
Specified by:
clearProperty in interface RuntimeServices

Parameters:


createNewParser

public Parser createNewParser()
Returns a JavaCC generated Parser.

Returns:
Parser javacc generated parser


debug

public void debug(Object message)
Log a debug message.
Specified by:
debug in interface RuntimeServices

Parameters:


dumpVMNamespace

public boolean dumpVMNamespace(String namespace)
tells the vmFactory to dump the specified namespace. This is to support clearing the VM list when in inline-VM-local-scope mode
Specified by:
dumpVMNamespace in interface RuntimeServices


error

public void error(Object message)
Log an error message.
Specified by:
error in interface RuntimeServices

Parameters:


getApplicationAttribute

public Object getApplicationAttribute(Object key)
Specified by:
getApplicationAttribute in interface RuntimeServices


getBoolean

public boolean getBoolean(String key,
                          boolean def)
Boolean property accessor method to hide the configuration implementation.
Specified by:
getBoolean in interface RuntimeServices

Parameters:

Returns:
boolean value of key or default value


getConfiguration

public ExtendedProperties getConfiguration()
Return the velocity runtime configuration object.
Specified by:
getConfiguration in interface RuntimeServices

Returns:
ExtendedProperties configuration object which houses the velocity runtime properties.


getContent

public ContentResource getContent(String name)
            throws ResourceNotFoundException,
                   ParseErrorException,
                   Exception
Returns a static content resource from the resource manager. Uses the current value if INPUT_ENCODING as the character encoding.
Specified by:
getContent in interface RuntimeServices

Parameters:
name - Name of content resource to get

Returns:
parsed ContentResource object ready for use

Throws:
ResourceNotFoundException - if template not found from any available source.


getContent

public ContentResource getContent(String name,
                                  String encoding)
            throws ResourceNotFoundException,
                   ParseErrorException,
                   Exception
Returns a static content resource from the resource manager.
Specified by:
getContent in interface RuntimeServices

Parameters:
name - Name of content resource to get
encoding - Character encoding to use

Returns:
parsed ContentResource object ready for use

Throws:
ResourceNotFoundException - if template not found from any available source.


getInt

public int getInt(String key)
Int property accessor method to hide the configuration implementation.
Specified by:
getInt in interface RuntimeServices

Parameters:

Returns:
int value


getInt

public int getInt(String key,
                  int defaultValue)
Int property accessor method to hide the configuration implementation.
Specified by:
getInt in interface RuntimeServices

Parameters:
key - property key

Returns:
int value


getIntrospector

public Introspector getIntrospector()
Return the Introspector for this instance
Specified by:
getIntrospector in interface RuntimeServices


getLoaderNameForResource

public String getLoaderNameForResource(String resourceName)
Determines is a template exists, and returns name of the loader that provides it. This is a slightly less hokey way to support the Velocity.templateExists() utility method, which was broken when per-template encoding was introduced. We can revisit this.
Specified by:
getLoaderNameForResource in interface RuntimeServices

Parameters:
resourceName - Name of template or content resource

Returns:
class name of loader than can provide it


getProperty

public Object getProperty(String key)
Allows an external caller to get a property. The calling routine is required to know the type, as this routine will return an Object, as that is what properties can be.
Specified by:
getProperty in interface RuntimeServices

Parameters:
key - property to return


getString

public String getString(String key)
String property accessor method to hide the configuration implementation
Specified by:
getString in interface RuntimeServices

Parameters:
key - property key

Returns:
value of key or null


getString

public String getString(String key,
                        String defaultValue)
String property accessor method with default to hide the configuration implementation.
Specified by:
getString in interface RuntimeServices

Parameters:

Returns:
String value of key or default


getTemplate

public Template getTemplate(String name)
            throws ResourceNotFoundException,
                   ParseErrorException,
                   Exception
Returns a Template from the resource manager. This method assumes that the character encoding of the template is set by the input.encoding property. The default is "ISO-8859-1"
Specified by:
getTemplate in interface RuntimeServices

Parameters:
name - The file name of the desired template.

Returns:
The template.

Throws:
ResourceNotFoundException - if template not found from any available source.
ParseErrorException - if template cannot be parsed due to syntax (or other) error.


getTemplate

public Template getTemplate(String name,
                            String encoding)
            throws ResourceNotFoundException,
                   ParseErrorException,
                   Exception
Returns a Template from the resource manager
Specified by:
getTemplate in interface RuntimeServices

Parameters:
name - The name of the desired template.
encoding - Character encoding of the template

Returns:
The template.

Throws:
ResourceNotFoundException - if template not found from any available source.
ParseErrorException - if template cannot be parsed due to syntax (or other) error.


getVelocimacro

public Directive getVelocimacro(String vmName,
                                String templateName)
Returns the appropriate VelocimacroProxy object if strVMname is a valid current Velocimacro.
Specified by:
getVelocimacro in interface RuntimeServices

Parameters:

Returns:
String VelocimacroProxy


info

public void info(Object message)
Log an info message.
Specified by:
info in interface RuntimeServices

Parameters:


init

public void init()
            throws Exception
Specified by:
init in interface RuntimeServices


init

public void init(Properties p)
            throws Exception
Initialize the Velocity Runtime with a Properties object.
Specified by:
init in interface RuntimeServices

Parameters:


init

public void init(String configurationFile)
            throws Exception
Initialize the Velocity Runtime with the name of ExtendedProperties object.
Specified by:
init in interface RuntimeServices

Parameters:


initializeDirectives

private void initializeDirectives()
            throws Exception
This methods initializes all the directives that are used by the Velocity Runtime. The directives to be initialized are listed in the RUNTIME_DEFAULT_DIRECTIVES properties file.


initializeLogger

private void initializeLogger()
            throws Exception
Initialize the Velocity logging system.


initializeParserPool

private void initializeParserPool()
Initializes the Velocity parser pool. This still needs to be implemented.


initializeProperties

private void initializeProperties()
Initialize Velocity properties, if the default properties have not been laid down first then do so. Then proceed to process any overriding properties. Laying down the default properties gives a much greater chance of having a working system.


initializeResourceManager

private void initializeResourceManager()
            throws Exception


isVelocimacro

public boolean isVelocimacro(String vmName,
                             String templateName)
Checks to see if a VM exists
Specified by:
isVelocimacro in interface RuntimeServices

Parameters:

Returns:
boolean True if VM by that name exists, false if not


loadDirective

private void loadDirective(String directiveClass,
                           String caption)
instantiates and loads the directive with some basic checks

Parameters:
directiveClass - classname of directive to load


log

private void log(int level,
                 Object message)
Handle logging.

Parameters:


parse

public SimpleNode parse(Reader reader,
                        String templateName)
            throws ParseException
Parse the input and return the root of AST node structure.

In the event that it runs out of parsers in the pool, it will create and let them be GC'd dynamically, logging that it has to do that. This is considered an exceptional condition. It is expected that the user will set the PARSER_POOL_SIZE property appropriately for their application. We will revisit this.
Specified by:
parse in interface RuntimeServices

Parameters:


parse

public SimpleNode parse(Reader reader,
                        String templateName,
                        boolean dumpNamespace)
            throws ParseException
Parse the input and return the root of the AST node structure.
Specified by:
parse in interface RuntimeServices

Parameters:
dumpNamespace - flag to dump the Velocimacro namespace for this template


setApplicationAttribute

public Object setApplicationAttribute(Object key,
                                      Object o)


setConfiguration

public void setConfiguration(ExtendedProperties configuration)
Allow an external system to set an ExtendedProperties object to use. This is useful where the external system also uses the ExtendedProperties class and the velocity configuration is a subset of parent application's configuration. This is the case with Turbine.
Specified by:
setConfiguration in interface RuntimeServices

Parameters:


setDefaultProperties

private void setDefaultProperties()
Initializes the Velocity Runtime with properties file. The properties file may be in the file system proper, or the properties file may be in the classpath.


setProperty

public void setProperty(String key,
                        Object value)
Allows an external system to set a property in the Velocity Runtime.
Specified by:
setProperty in interface RuntimeServices

Parameters:


showStackTrace

private boolean showStackTrace()
Added this to check and make sure that the configuration is initialized before trying to get properties from it. This occurs when there are errors during initialization and the default properties have yet to be layed down.


warn

public void warn(Object message)
Log a warning message.
Specified by:
warn in interface RuntimeServices

Parameters:


Copyright © 2003 Apache Software Foundation. All Rights Reserved.