Package org.apache.tapestry5.internal.util

# Class VirtualResource

java.lang.Object
org.apache.tapestry5.internal.util.VirtualResource

All Implemented Interfaces:
  `Resource`

Direct Known Subclasses:
  `ClientLocalizationMessageResource`, `MessageCatalogResource`, `UrlResource`

public abstract class VirtualResource extends Object implements Resource
Base class for virtual resources: resources that are not simply mapped to stored files, but are assembled, as necessary, on the fly. This is used inside Tapestry to expose the application's localized message catalog as a module. Subclasses should implement the `Resource.openStream()` method to return a stream of the contents of the virtual resource.

Since:
  5.4
See Also:
  - `ModuleManager`
  - `ModuleDispatcher`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected static final Charset`
  `UTF8`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `VirtualResource()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `boolean`
  `exists()`
  Returns true if the resource exists; if a stream to the content of the file may be opened.
  `Resource`
  `forFile(String relativePath)`
  Returns a Resource based on a relative path, relative to the folder containing the resource.
  `Resource`
  `forLocale(Locale locale)`
  Returns a localized version of the resource.
  `String`
  `getFile()`
  Returns the file portion of the Resource path, everything that follows the final forward slash.
  `String`
  `getFolder()`
  Returns the portion of the path up to the last forward slash; this is the directory or folder portion of the Resource.
  `String`
  `getPath()`
  Return the path (the combination of folder and file).
  `boolean`
  `isVirtual()`
  Returns true if the resource is virtual, meaning this is no underlying file.
  `protected InputStream`
  `toInputStream(byte[] content)`
  `protected InputStream`
  `toInputStream(String content)`
  `URL`
  `toURL()`
  Returns the URL for the resource, or null if it does not exist.
  `Resource`
  `withExtension(String extension)`
  Returns a new Resource with the extension changed (or, if the resource does not have an extension, the extension is added).

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

  ### Methods inherited from interface org.apache.tapestry5.commons.Resource

  `openStream`

- ## Field Details

  - ### UTF8

    protected static final Charset UTF8

- ## Constructor Details

  - ### VirtualResource

    public VirtualResource()

- ## Method Details

  - ### exists

    public boolean exists()
    Description copied from interface: `Resource`
    Returns true if the resource exists; if a stream to the content of the file may be opened. A resource exists if `Resource.toURL()` returns a non-null value. Starting in release 5.3.4, the result of this is cached. Starting in 5.4, some "virtual resources", may return true even though `Resource.toURL()` returns null.
    Specified by:
      `exists` in interface `Resource`
    Returns:
      true if the resource exists, false if it does not

  - ### toURL

    public URL toURL()
    Description copied from interface: `Resource`
    Returns the URL for the resource, or null if it does not exist. This value is lazily computed; starting in 5.3.4, subclasses may cache the result. Starting in 5.4, some "virtual resources" may return null.
    Specified by:
      `toURL` in interface `Resource`

  - ### forLocale

    public Resource forLocale(Locale locale)
    Description copied from interface: `Resource`
    Returns a localized version of the resource. May return null if no such resource exists. Starting in release 5.3.4, the result of this method is cached internally.
    Specified by:
      `forLocale` in interface `Resource`

  - ### forFile

    public Resource forFile(String relativePath)
    Description copied from interface: `Resource`
    Returns a Resource based on a relative path, relative to the folder containing the resource. Understands the "." (current folder) and ".." (parent folder) conventions, and treats multiple sequential slashes as a single slash. Virtual resources (resources fabricated at runtime) return themselves.
    Specified by:
      `forFile` in interface `Resource`

  - ### withExtension

    public Resource withExtension(String extension)
    Description copied from interface: `Resource`
    Returns a new Resource with the extension changed (or, if the resource does not have an extension, the extension is added). The new Resource may not exist (that is, `Resource.toURL()` may return null.
    Specified by:
      `withExtension` in interface `Resource`
    Parameters:
      `extension` - to apply to the resource, such as "html" or "properties"
    Returns:
      the new resource

  - ### getFolder

    public String getFolder()
    Description copied from interface: `Resource`
    Returns the portion of the path up to the last forward slash; this is the directory or folder portion of the Resource.
    Specified by:
      `getFolder` in interface `Resource`

  - ### getFile

    public String getFile()
    Description copied from interface: `Resource`
    Returns the file portion of the Resource path, everything that follows the final forward slash. Starting in 5.4, certain kinds of "virtual resources" may return null here.
    Specified by:
      `getFile` in interface `Resource`

  - ### getPath

    public String getPath()
    Description copied from interface: `Resource`
    Return the path (the combination of folder and file). Starting in 5.4, certain "virtual resources", may return an arbitrary value here.
    Specified by:
      `getPath` in interface `Resource`

  - ### toInputStream

    protected InputStream toInputStream(String content) throws IOException
    Throws:
      `IOException`

  - ### toInputStream

    protected InputStream toInputStream(byte[] content) throws IOException
    Throws:
      `IOException`

  - ### isVirtual

    public boolean isVirtual()
    Description copied from interface: `Resource`
    Returns true if the resource is virtual, meaning this is no underlying file. Many operations are unsupported on virtual resources, including `Resource.toURL()`, `Resource.forLocale(java.util.Locale)`, `Resource.withExtension(String)`, `Resource.getFile()`, `Resource.getFolder()`, `Resource.getPath()`}; these operations will throw an `UnsupportedOperationException`.
    Specified by:
      `isVirtual` in interface `Resource`