All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.faces.application.Resource Maven / Gradle / Ivy

There is a newer version: 3.1.0.SP02
Show newest version
/*
 * Copyright (c) 1997, 2018 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package javax.faces.application;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Map;

import javax.faces.context.FacesContext;
import javax.servlet.ServletRegistration;

/**
 * 

* An instance * of Resource is a Java object representation of the artifact that is served up in * response to a resource request from the client. Instances of Resource are * normally created and initialized via calls to {@link ResourceHandler#createResource}. See the * documentation for {@link ResourceHandler} for more information. *

* *
* * @since 2.0 */ public abstract class Resource extends ViewResource { /** *

* This constant is used as the key in the component attribute map of a composite component to * associate the component with its Resource instance. The value for this key is * the actual Resource instance. *

* */ public static final String COMPONENT_RESOURCE_KEY = "javax.faces.application.Resource.ComponentResource"; private String contentType; private String libraryName; private String resourceName; // ---------------------------------------------------------- Public Methods /** *

* Return the MIME content-type for this resource. *

* * @return the MIME content-type for this resource. */ public String getContentType() { return contentType; } /** * *

* Set the MIME content-type for this resource. The default implementation performs no * validation on the argument. *

* * @param contentType the MIME content-type for this resource. The default implementation must * accept null as a parameter. */ public void setContentType(String contentType) { this.contentType = contentType; } /** *

* Return the libraryName for this resource. May be null. The libraryName for a * resource is an optional String that indicates membership in a "resource library". All * resources with the same libraryName belong to the same "resource library". The "resource * library" concept allows disambiguating resources that have the same resourceName. See * {@link ResourceHandler} for more information. *

* * @return Return the libraryName for this resource. May be null. */ public String getLibraryName() { return libraryName; } /** *

* Set the libraryName for this resource. *

* * @param libraryName the libraryName for this resource. The default implementation must accept * null for the libraryName. */ public void setLibraryName(String libraryName) { this.libraryName = libraryName; } /** *

* Return the resourceName for this resource. Will never be null. All Resource * instances must have a resourceName. *

* * @return Return the resourceName for this resource. Will never be null. */ public String getResourceName() { return resourceName; } /** *

* Set the resourceName for this resource. *

* * @param resourceName a non-null String. * * @throws NullPointerException if argument resourceName is null. */ public void setResourceName(String resourceName) { if (resourceName == null) { throw new NullPointerException("All resources must have a non-null resourceName."); } this.resourceName = resourceName; } /** *

* If the current request is a resource request, (that * is, {@link ResourceHandler#isResourceRequest} returns true), return an * InputStream containing the bytes of the resource. Otherwise, throw an * IOException. *

* * @return an InputStream containing the bytes of the resource. * *

* Any Jakarta Expression Language expressions present in the resource must be evaluated before serving the bytes * of the resource. Note that due to browser and server caching, Jakarta Expression Language expressions in a * resource file will generally only be evaluated once, when the resource is first * served up. Therefore, using Jakarta Expression Language expressions that refer to per-request data is not * advisable since this data can become stale. *

* * @throws IOException if the current request is not a resource request. */ public abstract InputStream getInputStream() throws IOException; /** *

* Returns a mutable Map<String, String> whose entries will be sent as * response headers during {@link ResourceHandler#handleResourceRequest}. The entries in this * map must not persist beyond the scope of a single request. Any modifications made to the map * after the resource has been served will be ignored by the run-time. *

* * @return a mutable Map<String, String> of headers that will be included * with the response. */ public abstract Map getResponseHeaders(); /** *

* Return a path to this resource * such that, when the browser resolves it against the base URI for the view that includes the * resource, and issues a GET request to the resultant fully qualified URL, the bytes of the * resource are returned in response. *

* *
* *

* The default implementation must implement the following algorithm. For discussion, the return * result from this method will be called result. *

* *
    * *
  • *

    * Get the context-root for this web application, not ending in slash. For discussion this will * be called contextRoot. *

    *
  • * *
  • *

    * Discover if the FacesServlet is prefix (path) mapped, extension mapped, or exact * mapped (as defined by Servlet.12.2.) and the value of the mapping (including the leading '.' * in the case of extension mapping). For discussion, this will be facesServletMapping. *

    * *
    *

    * If exact mapped, result must be the following if and only if the FacesServlet is * mapped to the exact URL pattern {@link ResourceHandler#RESOURCE_IDENTIFIER} + * {@link #getResourceName} *

    * *
    *

    * result = contextRoot + {@link * ResourceHandler#RESOURCE_IDENTIFIER} + {@link #getResourceName} *

    *
    * *

    * If exact mapped, and the FacesServlet is not mapped to the exact URL pattern * {@link ResourceHandler#RESOURCE_IDENTIFIER} + {@link #getResourceName} do the following: *

    * *

    * Retrieve the existing mappings of the FacesServlet, e.g. using * {@link ServletRegistration#getMappings()}, and from those pick any prefix mapping or * extension mapping. If no such mapping is found, throw an {@link IllegalStateException}. If * such mapping is found remove the * character from that mapping, take that as the * new facesServletMapping and continue with evaluating this mapping as specified below * for if prefix mapped and for if extension mapped

    * *

    * If prefix mapped, result must be *

    * *
    *

    * result = contextRoot + '/' + * facesServletMapping + {@link * ResourceHandler#RESOURCE_IDENTIFIER} + '/' + {@link * #getResourceName} *

    *
    * *

    * If extension mapped, result must be *

    * *
    *

    * result = contextRoot + {@link * ResourceHandler#RESOURCE_IDENTIFIER} + {@link #getResourceName} + * facesServletMapping *

    *
    * *
  • * *
  • *

    * Build up a string, called resourceMetaData which is an & separated string of * name=value pairs suitable for inclusion in a URL query string. *

    * *
    * *

    * If {@link #getLibraryName} returns non-null, resourceMetaData must * include "ln=" + the return from {@link #getLibraryName} *

    * *

    * If there is a localePrefix for this application, as defined in * {@link ResourceHandler#LOCALE_PREFIX}, resourceMetaData must include "loc=" + * the localePrefix. *

    * * *

    * If this resource is contained in a resource library contract, resourceMetaData * must include "con=" + the name of the resource library contract. *

    * *
    * *

    * Append "?" + resourceMetaData to result. *

    * *
  • * *
  • *

    * Make it portlet safe by passing the result through {@link ViewHandler#getResourceURL}. *

    *
  • * *
* *
* * @return the path to this resource, intended to be included in the encoded view that is sent * to the browser when sending a faces response. */ public abstract String getRequestPath(); /** *

* Return an actual URL instance that refers to this resource instance. *

* * @return Return an actual URL instance that refers to this resource instance. */ @Override public abstract URL getURL(); /** *

* Call through to {@link #getRequestPath} and return the result. *

* * @return Call through to {@link #getRequestPath} and return the result. */ @Override public String toString() { return getRequestPath(); } /** *

* Return true if the user-agent * requesting this resource needs an update. If the * {@code If-Modified-Since} HTTP header is available for this request, its value must be * consulted, as specified in Section 14.25 of IETF RFC 2616, to determine the result. * Returns false if the user-agent does not need an update for this resource. *

* * @param context the Faces context. * @return true or false depending on whether or not the user-agent * needs an update of this resource. */ public abstract boolean userAgentNeedsUpdate(FacesContext context); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy