Class ConfigurableResourceManager

java.lang.Object
com.atlassian.confluence.velocity.ConfigurableResourceManager
All Implemented Interfaces:
org.apache.velocity.runtime.resource.ResourceManager
Direct Known Subclasses:
ConfluenceVelocityResourceManager

public class ConfigurableResourceManager extends Object implements org.apache.velocity.runtime.resource.ResourceManager

Class to manage the text resource for the Velocity Runtime.

This is a copy of the Velocity 1.5 ResourceManagerImpl with the following changes for Confluence:

Ideally we would replace the entire implementation, making use of a richer resource loader interface.

Since:
8.4
Author:
Will Glass-Husain, Jason van Zyl, Paulo Gaspar, Geir Magnusson Jr., Henning P. Schmiedehausen
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected static interface 
    Factory methods for Velocity resource objects
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected org.apache.velocity.runtime.resource.ResourceCache
    Object implementing ResourceCache to be our resource manager's Resource cache.
    protected org.apache.velocity.runtime.log.Log
    Logging.
    static final int
    A static content resource.
    static final int
    A template resources.
    protected final List<org.apache.velocity.runtime.resource.loader.ResourceLoader>
    The List of templateLoaders that the Runtime will use to locate the InputStream source of a template.
    protected org.apache.velocity.runtime.RuntimeServices
    The internal RuntimeServices object.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    Determines if a template exists, and returns name of the loader that provides it.
    org.apache.velocity.runtime.resource.Resource
    getResource(String resourceName, int resourceType, String encoding)
    Gets the named resource.
    Template method for provisioning a ConfigurableResourceManager.ResourceFactory.
    void
    initialize(org.apache.velocity.runtime.RuntimeServices rsvc)
    Initialize the ResourceManager.
    protected org.apache.velocity.runtime.resource.Resource
    loadResource(String resourceName, int resourceType, String encoding)
    Loads a resource from the current set of resource loaders.
    protected org.apache.velocity.runtime.resource.loader.ResourceLoader
    postProcessLoader(org.apache.velocity.runtime.resource.loader.ResourceLoader loader, org.apache.commons.collections.ExtendedProperties properties)
    Template method to allow subclasses to post process and possibly wrap a resource loader before it is added to the loader list.
    protected void
    refreshResource(org.apache.velocity.runtime.resource.Resource resource, String encoding)
    Takes an existing resource, and 'refreshes' it.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • RESOURCE_TEMPLATE

      public static final int RESOURCE_TEMPLATE
      A template resources.
      See Also:
    • RESOURCE_CONTENT

      public static final int RESOURCE_CONTENT
      A static content resource.
      See Also:
    • globalCache

      protected org.apache.velocity.runtime.resource.ResourceCache globalCache
      Object implementing ResourceCache to be our resource manager's Resource cache.
    • resourceLoaders

      protected final List<org.apache.velocity.runtime.resource.loader.ResourceLoader> resourceLoaders
      The List of templateLoaders that the Runtime will use to locate the InputStream source of a template.
    • rsvc

      protected org.apache.velocity.runtime.RuntimeServices rsvc
      The internal RuntimeServices object.
    • log

      protected org.apache.velocity.runtime.log.Log log
      Logging.
  • Constructor Details

    • ConfigurableResourceManager

      public ConfigurableResourceManager()
  • Method Details

    • initialize

      public void initialize(org.apache.velocity.runtime.RuntimeServices rsvc) throws Exception
      Initialize the ResourceManager.
      Specified by:
      initialize in interface org.apache.velocity.runtime.resource.ResourceManager
      Parameters:
      rsvc - The Runtime Services object which is associated with this Resource Manager.
      Throws:
      Exception
    • getResource

      public org.apache.velocity.runtime.resource.Resource getResource(String resourceName, int resourceType, String encoding) throws org.apache.velocity.exception.ResourceNotFoundException, org.apache.velocity.exception.ParseErrorException, Exception
      Gets the named resource. Returned class type corresponds to specified type (i.e. Template to RESOURCE_TEMPLATE).

      The original version of this class logs and rethrows virtually any exception thrown. This logging has been removed since these exceptions are often expected.

      Specified by:
      getResource in interface org.apache.velocity.runtime.resource.ResourceManager
      Parameters:
      resourceName - The name of the resource to retrieve.
      resourceType - The type of resource (RESOURCE_TEMPLATE, RESOURCE_CONTENT, etc.).
      encoding - The character encoding to use.
      Returns:
      Resource with the template parsed and ready.
      Throws:
      org.apache.velocity.exception.ResourceNotFoundException - if template not found from any available source.
      org.apache.velocity.exception.ParseErrorException - if template cannot be parsed due to syntax (or other) error.
      Exception - if a problem in parse
    • loadResource

      protected org.apache.velocity.runtime.resource.Resource loadResource(String resourceName, int resourceType, String encoding) throws org.apache.velocity.exception.ResourceNotFoundException, org.apache.velocity.exception.ParseErrorException, Exception
      Loads a resource from the current set of resource loaders.
      Parameters:
      resourceName - The name of the resource to retrieve.
      resourceType - The type of resource (RESOURCE_TEMPLATE, RESOURCE_CONTENT, etc.).
      encoding - The character encoding to use.
      Returns:
      Resource with the template parsed and ready.
      Throws:
      org.apache.velocity.exception.ResourceNotFoundException - if template not found from any available source.
      org.apache.velocity.exception.ParseErrorException - if template cannot be parsed due to syntax (or other) error.
      Exception - if a problem in parse
    • refreshResource

      protected void refreshResource(org.apache.velocity.runtime.resource.Resource resource, String encoding) throws org.apache.velocity.exception.ResourceNotFoundException, org.apache.velocity.exception.ParseErrorException, Exception
      Takes an existing resource, and 'refreshes' it. This generally means that the source of the resource is checked for changes according to some cache/check algorithm and if the resource changed, then the resource data is reloaded and re-parsed.
      Parameters:
      resource - resource to refresh
      encoding - character encoding of the resource to refresh.
      Throws:
      org.apache.velocity.exception.ResourceNotFoundException - if template not found from current source for this Resource
      org.apache.velocity.exception.ParseErrorException - if template cannot be parsed due to syntax (or other) error.
      Exception - if a problem in parse
    • getLoaderNameForResource

      public String getLoaderNameForResource(String resourceName)
      Determines if 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 org.apache.velocity.runtime.resource.ResourceManager
      Parameters:
      resourceName - Name of template or content resource
      Returns:
      name of loader than can provide it
    • postProcessLoader

      protected org.apache.velocity.runtime.resource.loader.ResourceLoader postProcessLoader(org.apache.velocity.runtime.resource.loader.ResourceLoader loader, org.apache.commons.collections.ExtendedProperties properties)
      Template method to allow subclasses to post process and possibly wrap a resource loader before it is added to the loader list. This implementation does nothing.
      Parameters:
      loader - Resource loader to process
      properties - Configured properties for the resource loader
      Returns:
      final resource loader instance to be used at runtime. Must not be null.
    • getResourceFactory

      protected ConfigurableResourceManager.ResourceFactory getResourceFactory()

      Template method for provisioning a ConfigurableResourceManager.ResourceFactory. Subclasses may customise this factory where necessary.

      This implementation returns a strategy that delegates to the default Velocity resource factory methods.

      Returns:
      resource factory to use for this resource manager
      See Also:
      • ConfigurableResourceManager.DefaultResourceFactory