Class StringResourceLoader
StringResourceRepositoryImpl
as the default.
resource.loader = string string.resource.loader.description = Velocity StringResource loader string.resource.loader.class = org.apache.velocity.runtime.resource.loader.StringResourceLoader string.resource.loader.repository.class = org.apache.velocity.runtime.resource.util.StringResourceRepositoryImplResources can be added to the repository like this:
StringResourceRepository repo = StringResourceLoader.getRepository();
String myTemplateName = "/some/imaginary/path/hello.vm";
String myTemplate = "Hi, ${username}... this is some template!";
repo.putStringResource(myTemplateName, myTemplate);
After this, the templates can be retrieved as usual.
If there will be multiple StringResourceLoaders used in an application, you should consider specifying a 'string.resource.loader.repository.name = foo' property in order to keep you string resources in a non-default repository. This can help to avoid conflicts between different frameworks or components that are using StringResourceLoader. You can then retrieve your named repository like this:
StringResourceRepository repo = StringResourceLoader.getRepository("foo");
and add string resources to the repo just as in the previous example.
If you have concerns about memory leaks or for whatever reason do not wish to have your string repository stored statically as a class member, then you should set 'string.resource.loader.repository.static = false' in your properties. This will tell the resource loader that the string repository should be stored in the Velocity application attributes. To retrieve the repository, do:
StringResourceRepository repo = velocityEngine.getApplicationAttribute("foo");
If you did not specify a name for the repository, then it will be stored under the
class name of the repository implementation class (for which the default is
'org.apache.velocity.runtime.resource.util.StringResourceRepositoryImpl').
Incidentally, this is also true for the default statically stored repository.
Whether your repository is stored statically or in Velocity's application attributes, you can also manually create and set it prior to Velocity initialization. For a static repository, you can do something like this:
StringResourceRepository repo = new MyStringResourceRepository();
repo.magicallyAddSomeStringResources();
StringResourceLoader.setRepository("foo", repo);
Or for a non-static repository:
StringResourceRepository repo = new MyStringResourceRepository();
repo.magicallyAddSomeStringResources();
velocityEngine.setApplicationAttribute("foo", repo);
Then, assuming the 'string.resource.loader.repository.name' property is
set to 'some.name', the StringResourceLoader will use that already created
repository, rather than creating a new one.
- Since:
- 1.5
- Version:
- $Id: StringResourceLoader.java 825302 2009-10-14 21:51:39Z nbubna $
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected StringResourceRepository
static final String
Key to look up the repository implementation class.static final String
The default implementation class.static final String
Key to look up the repository char encoding.static final String
The default repository encoding.static final String
Key to look up the name for the repository to be used.static final String
The default name for string resource repositories ('org.apache.velocity.runtime.resource.util.StringResourceRepository').static final String
Key to determine whether the repository should be set as the static one or not.static final boolean
By default, repositories are stored statically (shared across the VM).protected static final Map
Fields inherited from class org.apache.velocity.runtime.resource.loader.ResourceLoader
className, isCachingOn, log, modificationCheckInterval, rsvc
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic void
Removes all statically storedStringResourceRepository
s.createRepository
(String className, String encoding) long
getLastModified
(Resource resource) Get the last modified time of the InputStream source that was used to create the template.static StringResourceRepository
Returns a reference to the default static repository.static StringResourceRepository
getRepository
(String name) Returns a reference to the repository stored statically under the specified name.getResourceStream
(String name) Get an InputStream so that the Runtime can build a template with it.void
init
(org.apache.commons.collections.ExtendedProperties configuration) Initialize the template loader with a a resources class.boolean
isSourceModified
(Resource resource) Given a template, check to see if the source of InputStream has been modified.static StringResourceRepository
removeRepository
(String name) Removes theStringResourceRepository
stored under the specified name.boolean
resourceExists
(String name) Overrides superclass for better performance.static void
setRepository
(String name, StringResourceRepository repo) Sets the specifiedStringResourceRepository
in static storage under the specified name.Methods inherited from class org.apache.velocity.runtime.resource.loader.ResourceLoader
commonInit, getClassName, getModificationCheckInterval, isCachingOn, setCachingOn, setModificationCheckInterval
-
Field Details
-
REPOSITORY_STATIC
Key to determine whether the repository should be set as the static one or not.- Since:
- 1.6
- See Also:
-
REPOSITORY_STATIC_DEFAULT
public static final boolean REPOSITORY_STATIC_DEFAULTBy default, repositories are stored statically (shared across the VM).- Since:
- 1.6
- See Also:
-
REPOSITORY_CLASS
Key to look up the repository implementation class.- See Also:
-
REPOSITORY_CLASS_DEFAULT
The default implementation class. -
REPOSITORY_NAME
Key to look up the name for the repository to be used.- Since:
- 1.6
- See Also:
-
REPOSITORY_NAME_DEFAULT
The default name for string resource repositories ('org.apache.velocity.runtime.resource.util.StringResourceRepository').- Since:
- 1.6
-
REPOSITORY_ENCODING
Key to look up the repository char encoding.- See Also:
-
REPOSITORY_ENCODING_DEFAULT
The default repository encoding.- See Also:
-
STATIC_REPOSITORIES
-
repository
-
-
Constructor Details
-
StringResourceLoader
public StringResourceLoader()
-
-
Method Details
-
getRepository
Returns a reference to the default static repository. -
getRepository
Returns a reference to the repository stored statically under the specified name.- Since:
- 1.6
-
setRepository
Sets the specifiedStringResourceRepository
in static storage under the specified name.- Since:
- 1.6
-
removeRepository
Removes theStringResourceRepository
stored under the specified name.- Since:
- 1.6
-
clearRepositories
public static void clearRepositories()Removes all statically storedStringResourceRepository
s.- Since:
- 1.6
-
init
public void init(org.apache.commons.collections.ExtendedProperties configuration) Description copied from class:ResourceLoader
Initialize the template loader with a a resources class.- Specified by:
init
in classResourceLoader
- See Also:
-
createRepository
- Since:
- 1.6
-
resourceExists
Overrides superclass for better performance.- Overrides:
resourceExists
in classResourceLoader
- Parameters:
name
- The name of a resource.- Returns:
- true if a resource exists and can be accessed.
- Since:
- 1.6
-
getResourceStream
Get an InputStream so that the Runtime can build a template with it.- Specified by:
getResourceStream
in classResourceLoader
- Parameters:
name
- name of template to get.- Returns:
- InputStream containing the template.
- Throws:
ResourceNotFoundException
- Ff template not found in the RepositoryFactory.
-
isSourceModified
Description copied from class:ResourceLoader
Given a template, check to see if the source of InputStream has been modified.- Specified by:
isSourceModified
in classResourceLoader
- Returns:
- True if the resource has been modified.
- See Also:
-
getLastModified
Description copied from class:ResourceLoader
Get the last modified time of the InputStream source that was used to create the template. We need the template here because we have to extract the name of the template in order to locate the InputStream source.- Specified by:
getLastModified
in classResourceLoader
- Returns:
- Time in millis when the resource has been modified.
- See Also:
-