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 Charset` | `UTF8` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `VirtualResource()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    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 Detail

    - #### UTF8

          protected static final Charset UTF8

  - ### Constructor Detail

    - #### VirtualResource

          public VirtualResource()

  - ### Method Detail

    - #### 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`