Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## org.apache.velocity.runtime.resource.loader
Class StringResourceLoader

    java.lang.Object
      org.apache.velocity.runtime.resource.loader.ResourceLoader
          org.apache.velocity.runtime.resource.loader.StringResourceLoader

public class StringResourceLoader
extends ResourceLoader

Resource loader that works with Strings. Users should manually add resources to the repository that is used by the resource loader instance. Below is an example configuration for this loader. Note that 'repository.class' is not necessary; if not provided, the factory will fall back on using `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.StringResourceRepositoryImpl

Resources 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 $
Author:
  Eelco Hillenius, Henning P. Schmiedehausen, Nathan Bubna

Field Summary
`protected StringResourceRepository` | `repository`
`static String` | `REPOSITORY_CLASS` Key to look up the repository implementation class.
`static String` | `REPOSITORY_CLASS_DEFAULT` The default implementation class.
`static String` | `REPOSITORY_ENCODING` Key to look up the repository char encoding.
`static String` | `REPOSITORY_ENCODING_DEFAULT` The default repository encoding.
`static String` | `REPOSITORY_NAME` Key to look up the name for the repository to be used.
`static String` | `REPOSITORY_NAME_DEFAULT` The default name for string resource repositories ('org.apache.velocity.runtime.resource.util.StringResourceRepository').
`static String` | `REPOSITORY_STATIC` Key to determine whether the repository should be set as the static one or not.
`static boolean` | `REPOSITORY_STATIC_DEFAULT` By default, repositories are stored statically (shared across the VM).
`protected static Map` | `STATIC_REPOSITORIES`

Fields inherited from class org.apache.velocity.runtime.resource.loader.ResourceLoader
`className, isCachingOn, log, modificationCheckInterval, rsvc`

Constructor Summary
`StringResourceLoader()`

Method Summary
`static void` | `clearRepositories()` Removes all statically stored `StringResourceRepository`s.
`StringResourceRepository` | `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` | `getRepository()` 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.
`InputStream` | `getResourceStream(String name)` Get an InputStream so that the Runtime can build a template with it.
`void` | `init(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 the `StringResourceRepository` stored under the specified name.
`boolean` | `resourceExists(String name)` Overrides superclass for better performance.
`static void` | `setRepository(String name, StringResourceRepository repo)` Sets the specified `StringResourceRepository` in static storage under the specified name.

Methods inherited from class org.apache.velocity.runtime.resource.loader.ResourceLoader
`commonInit, getClassName, getModificationCheckInterval, isCachingOn, setCachingOn, setModificationCheckInterval`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### REPOSITORY_STATIC

    public static final String REPOSITORY_STATIC

  Key to determine whether the repository should be set as the static one or not.

  Since:
    1.6
  See Also:
    Constant Field Values

### REPOSITORY_STATIC_DEFAULT

    public static final boolean REPOSITORY_STATIC_DEFAULT

  By default, repositories are stored statically (shared across the VM).

  Since:
    1.6
  See Also:
    Constant Field Values

### REPOSITORY_CLASS

    public static final String REPOSITORY_CLASS

  Key to look up the repository implementation class.

  See Also:
    Constant Field Values

### REPOSITORY_CLASS_DEFAULT

    public static final String REPOSITORY_CLASS_DEFAULT

  The default implementation class.

### REPOSITORY_NAME

    public static final String REPOSITORY_NAME

  Key to look up the name for the repository to be used.

  Since:
    1.6
  See Also:
    Constant Field Values

### REPOSITORY_NAME_DEFAULT

    public static final String REPOSITORY_NAME_DEFAULT

  The default name for string resource repositories ('org.apache.velocity.runtime.resource.util.StringResourceRepository').

  Since:
    1.6

### REPOSITORY_ENCODING

    public static final String REPOSITORY_ENCODING

  Key to look up the repository char encoding.

  See Also:
    Constant Field Values

### REPOSITORY_ENCODING_DEFAULT

    public static final String REPOSITORY_ENCODING_DEFAULT

  The default repository encoding.

  See Also:
    Constant Field Values

### STATIC_REPOSITORIES

    protected static final Map STATIC_REPOSITORIES

### repository

    protected StringResourceRepository repository

Constructor Detail

### StringResourceLoader

    public StringResourceLoader()

Method Detail

### getRepository

    public static StringResourceRepository getRepository()

  Returns a reference to the default static repository.

### getRepository

    public static StringResourceRepository getRepository(String name)

  Returns a reference to the repository stored statically under the specified name.

  Since:
    1.6

### setRepository

    public static void setRepository(String name,
                                     StringResourceRepository repo)

  Sets the specified `StringResourceRepository` in static storage under the specified name.

  Since:
    1.6

### removeRepository

    public static StringResourceRepository removeRepository(String name)

  Removes the `StringResourceRepository` stored under the specified name.

  Since:
    1.6

### clearRepositories

    public static void clearRepositories()

  Removes all statically stored `StringResourceRepository`s.

  Since:
    1.6

### init

    public void init(ExtendedProperties configuration)

  Description copied from class: `ResourceLoader`
  Initialize the template loader with a a resources class.

  Specified by:
    `init` in class `ResourceLoader`
  Parameters:
    `configuration` -
  See Also:
    `ResourceLoader.init(org.apache.commons.collections.ExtendedProperties)`

### createRepository

    public StringResourceRepository createRepository(String className,
                                                     String encoding)

  Since:
    1.6

### resourceExists

    public boolean resourceExists(String name)

  Overrides superclass for better performance.

  Overrides:
    `resourceExists` in class `ResourceLoader`
  Parameters:
    `name` - The name of a resource.
  Returns:
    true if a resource exists and can be accessed.
  Since:
    1.6

### getResourceStream

    public InputStream getResourceStream(String name)
                                  throws ResourceNotFoundException

  Get an InputStream so that the Runtime can build a template with it.

  Specified by:
    `getResourceStream` in class `ResourceLoader`
  Parameters:
    `name` - name of template to get.
  Returns:
    InputStream containing the template.
  Throws:
    `ResourceNotFoundException` - Ff template not found in the RepositoryFactory.

### isSourceModified

    public boolean isSourceModified(Resource resource)

  Description copied from class: `ResourceLoader`
  Given a template, check to see if the source of InputStream has been modified.

  Specified by:
    `isSourceModified` in class `ResourceLoader`
  Parameters:
    `resource` -
  Returns:
    True if the resource has been modified.
  See Also:
    `ResourceLoader.isSourceModified(org.apache.velocity.runtime.resource.Resource)`

### getLastModified

    public long getLastModified(Resource resource)

  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 class `ResourceLoader`
  Parameters:
    `resource` -
  Returns:
    Time in millis when the resource has been modified.
  See Also:
    `ResourceLoader.getLastModified(org.apache.velocity.runtime.resource.Resource)`

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

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