Class ResourceHelper

java.lang.Object
com.sun.faces.application.resource.ResourceHelper
Direct Known Subclasses:
ClasspathResourceHelper, FaceletWebappResourceHelper, WebappResourceHelper

public abstract class ResourceHelper extends Object

Implementations of this class contain the knowledge for finding and serving web application resources.

Since:
2.0
  • Constructor Details

    • ResourceHelper

      public ResourceHelper()
  • Method Details

    • getBaseResourcePath

      public abstract String getBaseResourcePath()
      Returns:
      the base path in which resources will be stored
    • getBaseContractsPath

      public abstract String getBaseContractsPath()
    • getBasePath

      protected String getBasePath(String contract)
    • getInputStream

      public InputStream getInputStream(ResourceInfo toStream, FacesContext ctx) throws IOException

      If the resource is compressable, return an InputStream to read the compressed content, otherwise, call getNonCompressedInputStream(ResourceInfo, jakarta.faces.context.FacesContext) to return the content of the original resource.

      Implementation Note: If any exception occurs trying to return a stream to the compressed content, log the exception, and instead try to return a stream to the original content.

      Parameters:
      toStream - the resource to obtain an InputStream to
      ctx - the FacesContext for the current request
      Returns:
      an InputStream to the resource, or null if no resource is found
      Throws:
      IOException - if an error occurs obtaining the stream
    • getURL

      public abstract URL getURL(ResourceInfo resource, FacesContext ctx)
      Parameters:
      resource - the resource to obtain a URL reference to
      ctx - the FacesContext for the current request
      Returns:
      a URL to the specified resource, otherwise null if no resource is found
    • findLibrary

      public abstract LibraryInfo findLibrary(String libraryName, String localePrefix, String contract, FacesContext ctx)
      Search for the specified library/localPrefix combination in an implementation dependent manner.
      Parameters:
      libraryName - the name of the library
      localePrefix - the logicial identifier for a locale specific library. if no localePrefix is configured, pass null
      contract - the name of the contract
      ctx - the FacesContext for the current request @return a LibraryInfo if a matching library based off the inputs can be found, otherwise returns null
      Returns:
      library info
    • findResource

      public abstract ResourceInfo findResource(LibraryInfo library, String resourceName, String localePrefix, boolean compressable, FacesContext ctx)

      Search for the specified resource based in the library/localePrefix/resourceName combination in an implementation dependent manner.

      If the resource is found, and is compressable, call handleCompression(com.sun.faces.application.resource.ClientResourceInfo) to compress the content.

      Parameters:
      library - the library this resource should be a part of. If the the resource that is being searched for isn't part of a library, then pass null
      resourceName - the name of the resource that is being searched for
      localePrefix - the logicial identifier for a locale specific library. if no localePrefix is configured, pass null
      compressable - true if the resource can be compressed
      ctx - the FacesContext for the current request
      Returns:
      a ResourceInfo if a matching resource based off the inputs can be found, otherwise returns null
    • getLastModified

      public long getLastModified(ResourceInfo resource, FacesContext ctx)

      The default implementation of this method will call through to getURL(ResourceInfo, jakarta.faces.context.FacesContext) and leverage the URL to obtain the date information of the resource and return the value of URLConnection.getLastModified()

      Parameters:
      resource - the resource in question
      ctx - the FacesContext for the current request
      Returns:
      the date of the resource in milliseconds (since epoch), or 0 if the date cannot be determined
    • getNonCompressedInputStream

      protected abstract InputStream getNonCompressedInputStream(ResourceInfo info, FacesContext ctx) throws IOException
      If a ResourceInfo is not compressable, getInputStream(ResourceInfo, jakarta.faces.context.FacesContext) will call this method to return a stream to the actual resource.
      Parameters:
      info - the resource to obtain an InputStream to
      ctx - the FacesContext for the current request
      Returns:
      an InputStream to the resource
      Throws:
      IOException - if an error occurs obtaining the stream
    • getVersion

      protected VersionInfo getVersion(Collection<String> resourcePaths, boolean isResource)

      Given a collection of path names:

         1.1, scripts, images, 1.2
       

      this method will pick out the directories that represent a library or resource version and return the latest version found, if any.

      Parameters:
      resourcePaths - a collection of paths (consisting of single path elements)
      isResource - true if the version being looked up is for a reource, otherwise, pass false if the version is a library version
      Returns:
      the latest version or if no version can be detected, otherwise this method returns null
    • compressContent

      protected boolean compressContent(ClientResourceInfo info) throws IOException
      Utility method to compress the content of the original resource to the temporary directory specified by ClientResourceInfo.getCompressedPath().
      Parameters:
      info - the resource to be compressed
      Returns:
      true if compression succeeded and the compressed result is smaller than the original content, otherwise false
      Throws:
      IOException - if any error occur reading/writing
    • clientAcceptsCompression

      protected boolean clientAcceptsCompression(FacesContext ctx)

      This method attempt to verify that the user agent can accept a gzip encoded response by interrogating the Accept-Encoding requester header. If it is determined safe to send a gzip encoded response, send the Content-Encoding header with a value of gzip.

      See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html RFC 2616, sec. 14 for details on the accept-encoding header.

      Implementation Note: It is safe to cast to a HttpServletResponse as this method will only be called when handling a resource request. Resource serving is outside of the Faces and Portlet lifecycle.

      Parameters:
      ctx - the FacesContext for the current request
      Returns:
      true if compressed content can be sent to the client, otherwise false
    • handleCompression

      protected ClientResourceInfo handleCompression(ClientResourceInfo resource)

      Utility method to peform the necessary actions to compress content.

      Implmentation Note: If an exception occurs while compressing the content, log the IOException and rebuilt the ResourceInfo as non-compressable.

      Parameters:
      resource - the resource to compression
      Returns:
      the ResourceInfo after compression is complete. If compression was successful, this should be the same instance. If compression was not successful, it will be a different instance than what was passed.
    • resourceSupportsEL

      protected boolean resourceSupportsEL(String resourceName, String libraryName, FacesContext ctx)
    • trimLeadingSlash

      protected String trimLeadingSlash(String s)
      Parameters:
      s - input String
      Returns:
      the String without a leading slash if it has one.