📄 runtimeinstance.java
字号:
*
* 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"]
*
* @param String key
* @param String value
*/
public void addProperty(String key, Object value)
{
if (overridingProperties == null)
{
overridingProperties = new ExtendedProperties();
}
overridingProperties.addProperty( key, value );
}
/**
* Clear the values pertaining to a particular
* property.
*
* @param String key of property to clear
*/
public void clearProperty(String key)
{
if (overridingProperties != null)
{
overridingProperties.clearProperty(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.
*
* @param key property to return
*/
public Object getProperty( String key )
{
return configuration.getProperty( key );
}
/**
* 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.
*/
private void initializeProperties()
{
/*
* Always lay down the default properties first as
* to provide a solid base.
*/
if (configuration.isInitialized() == false)
{
setDefaultProperties();
}
if( overridingProperties != null)
{
configuration.combine(overridingProperties);
}
}
/**
* Initialize the Velocity Runtime with a Properties
* object.
*
* @param Properties
*/
public void init(Properties p) throws Exception
{
overridingProperties = ExtendedProperties.convertProperties(p);
init();
}
/**
* Initialize the Velocity Runtime with the name of
* ExtendedProperties object.
*
* @param Properties
*/
public void init(String configurationFile)
throws Exception
{
overridingProperties = new ExtendedProperties(configurationFile);
init();
}
private void initializeResourceManager()
throws Exception
{
/*
* Which resource manager?
*/
String rm = getString( RuntimeConstants.RESOURCE_MANAGER_CLASS );
if ( rm != null && rm.length() > 0 )
{
/*
* if something was specified, then make one.
* if that isn't a ResourceManager, consider
* this a huge error and throw
*/
Object o = null;
try
{
o = Class.forName( rm ).newInstance();
}
catch (ClassNotFoundException cnfe )
{
String err = "The specified class for Resourcemanager ("
+ rm
+ ") does not exist (or is not accessible to the current classlaoder.";
error( err );
throw new Exception( err );
}
if (!(o instanceof ResourceManager) )
{
String err = "The specified class for ResourceManager ("
+ rm
+ ") does not implement org.apache.runtime.resource.ResourceManager."
+ " Velocity not initialized correctly.";
error( err);
throw new Exception(err);
}
resourceManager = (ResourceManager) o;
resourceManager.initialize( this );
}
else
{
/*
* someone screwed up. Lets not fool around...
*/
String err = "It appears that no class was specified as the"
+ " ResourceManager. Please ensure that all configuration"
+ " information is correct.";
error( err);
throw new Exception( err );
}
}
/**
* Initialize the Velocity logging system.
*
* @throws Exception
*/
private void initializeLogger() throws Exception
{
/*
* Initialize the logger. We will eventually move all
* logging into the logging manager.
*/
if (logSystem instanceof PrimordialLogSystem )
{
PrimordialLogSystem pls = (PrimordialLogSystem) logSystem;
logSystem = LogManager.createLogSystem( this );
/*
* in the event of failure, lets do something to let it
* limp along.
*/
if (logSystem == null)
{
logSystem = new NullLogSystem();
}
else
{
pls.dumpLogMessages( logSystem );
}
}
}
/**
* 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.
*
* @throws Exception
*/
private void initializeDirectives() throws Exception
{
/*
* Initialize the runtime directive table.
* This will be used for creating parsers.
*/
runtimeDirectives = new Hashtable();
Properties directiveProperties = new Properties();
/*
* Grab the properties file with the list of directives
* that we should initialize.
*/
InputStream inputStream =
getClass().getResourceAsStream('/' + DEFAULT_RUNTIME_DIRECTIVES);
if (inputStream == null)
throw new Exception("Error loading directive.properties! " +
"Something is very wrong if these properties " +
"aren't being located. Either your Velocity " +
"distribution is incomplete or your Velocity " +
"jar file is corrupted!");
directiveProperties.load(inputStream);
/*
* Grab all the values of the properties. These
* are all class names for example:
*
* org.apache.velocity.runtime.directive.Foreach
*/
Enumeration directiveClasses = directiveProperties.elements();
while (directiveClasses.hasMoreElements())
{
String directiveClass = (String) directiveClasses.nextElement();
loadDirective( directiveClass, "System" );
}
/*
* now the user's directives
*/
String[] userdirective = configuration.getStringArray("userdirective");
for( int i = 0; i < userdirective.length; i++)
{
loadDirective( userdirective[i], "User");
}
}
/**
* instantiates and loads the directive with some basic checks
*
* @param directiveClass classname of directive to load
*/
private void loadDirective( String directiveClass, String caption )
{
try
{
Object o = Class.forName( directiveClass ).newInstance();
if ( o instanceof Directive )
{
Directive directive = (Directive) o;
runtimeDirectives.put(directive.getName(), directive);
info("Loaded " + caption + " Directive: "
+ directiveClass);
}
else
{
error( caption + " Directive " + directiveClass
+ " is not org.apache.velocity.runtime.directive.Directive."
+ " Ignoring. " );
}
}
catch (Exception e)
{
error("Exception Loading " + caption + " Directive: "
+ directiveClass + " : " + e);
}
}
/**
* Initializes the Velocity parser pool.
* This still needs to be implemented.
*/
private void initializeParserPool()
{
int numParsers = getInt( PARSER_POOL_SIZE, NUMBER_OF_PARSERS);
parserPool = new SimplePool( numParsers);
for (int i=0; i < numParsers ;i++ )
{
parserPool.put (createNewParser());
}
info ("Created: " + numParsers + " parsers.");
}
/**
* Returns a JavaCC generated Parser.
*
* @return Parser javacc generated parser
*/
public Parser createNewParser()
{
Parser parser = new Parser( this );
parser.setDirectives(runtimeDirectives);
return parser;
}
/**
* Parse the input and return the root of
* AST node structure.
* <br><br>
* 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.
*
* @param InputStream inputstream retrieved by a resource loader
* @param String name of the template being parsed
*/
public SimpleNode parse( Reader reader, String templateName )
throws ParseException
{
/*
* do it and dump the VM namespace for this template
*/
return parse( reader, templateName, true );
}
/**
* Parse the input and return the root of the AST node structure.
*
* @param InputStream inputstream retrieved by a resource loader
* @param String name of the template being parsed
* @param dumpNamespace flag to dump the Velocimacro namespace for this template
*/
public SimpleNode parse( Reader reader, String templateName, boolean dumpNamespace )
throws ParseException
{
SimpleNode ast = null;
Parser parser = (Parser) parserPool.get();
boolean madeNew = false;
if (parser == null)
{
/*
* if we couldn't get a parser from the pool
* make one and log it.
*/
error("Runtime : ran out of parsers. Creating new. "
+ " Please increment the parser.pool.size property."
+ " The current value is too small.");
parser = createNewParser();
if( parser != null )
{
madeNew = true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -