Package org.apache.tapestry5.ioc.internal.util

## Class AbstractResource

- java.lang.Object
- - org.apache.tapestry5.commons.internal.util.LockSupport
  - - org.apache.tapestry5.ioc.internal.util.AbstractResource

- All Implemented Interfaces:
    `Resource`
  Direct Known Subclasses:
    `ClasspathResource`, `ContextResource`

      public abstract class AbstractResource
      extends LockSupport
      implements Resource

  Abstract implementation of `Resource`. Subclasses must implement the abstract methods `Resource.toURL()` and `newResource(String)` as well as toString(), hashCode() and equals().

- - ### Constructor Summary

    Constructors
    Modifier | Constructor | Description
    --- | --- | ---
    `protected` | `AbstractResource​(String path)` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `exists()` | Simple check for whether `Resource.toURL()` returns null or not.
    `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 abstract Resource` | `newResource​(String path)` | Factory method provided by subclasses.
    `InputStream` | `openStream()` | Obtains the URL for the Resource and opens the stream, wrapped by a BufferedInputStream.
    `protected void` | `validateURL​(URL url)` | Validates that the URL is correct; at this time, a correct URL is one of: null a non-file: URL a file: URL where the case of the file matches the corresponding path element See TAP5-1007
    `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 org.apache.tapestry5.commons.internal.util.LockSupport

      `acquireReadLock, downgradeWriteLockToReadLock, releaseReadLock, releaseWriteLock, takeWriteLock, upgradeReadLockToWriteLock`

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

      `toURL`

- - ### Constructor Detail

    - #### AbstractResource

          protected AbstractResource​(String path)

  - ### Method Detail

    - #### getPath

          public final 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`

    - #### getFile

          public final 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`

    - #### getFolder

          public final 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`

    - #### forFile

          public final 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`

    - #### forLocale

          public final 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`

    - #### withExtension

          public final 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

    - #### exists

          public boolean exists()

      Simple check for whether `Resource.toURL()` returns null or not.
      Specified by:
        `exists` in interface `Resource`
      Returns:
        true if the resource exists, false if it does not

    - #### openStream

          public InputStream openStream()
                                 throws IOException

      Obtains the URL for the Resource and opens the stream, wrapped by a BufferedInputStream.
      Specified by:
        `openStream` in interface `Resource`
      Returns:
        an open, buffered stream to the content, if available
      Throws:
        `IOException`

    - #### newResource

          protected abstract Resource newResource​(String path)

      Factory method provided by subclasses.

    - #### validateURL

          protected void validateURL​(URL url)

      Validates that the URL is correct; at this time, a correct URL is one of:
      - null
      - a non-file: URL
      - a file: URL where the case of the file matches the corresponding path element
      See TAP5-1007
      Parameters:
        `url` - to validate
      Since:
        5.4

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