001    // Copyright 2006, 2007, 2008, 2009 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry5.services;
016    
017    import java.io.File;
018    import java.net.URL;
019    import java.util.List;
020    
021    /**
022     * An API agnostic version of {@link javax.servlet.ServletContext}, used to bridge the gaps between the Servlet API and
023     * the Portlet API.
024     */
025    public interface Context
026    {
027        /**
028         * Returns a URL to a resource stored within the context. The path should start with a leading slash.
029         *
030         * @param path to the resource (with a leading slash)
031         * @return the URL for the path, or null if the path does not correspond to a file.
032         */
033        URL getResource(String path);
034    
035        /**
036         * Attempts to find the actual file, on the file system, that would be provided by the servlet container for the
037         * given path (which must start with a leading slash). This may return null if no such file exists, or if the
038         * resource in question is packaged inside a WAR.  If packaged inside a WAR, the contents may be accessed via {@link
039         * #getResource(String)}.
040         *
041         * @param path to  the resource (with a leading slash)
042         * @return the underlying File, or null if no such file
043         */
044        File getRealFile(String path);
045    
046        /**
047         * Returns an initial parameter value defined by servlet.
048         */
049        String getInitParameter(String name);
050    
051        /**
052         * Looks for resources within the web application within the supplied path. The list will be recurively expanded, as
053         * necessary. The path must start with a leading slash, and usually ends with a slash as well.
054         *
055         * @param path to search for (should start with a leading slash)
056         * @return the matches, sorted alphabetically
057         */
058        List<String> getResourcePaths(String path);
059    
060        /**
061         * Returns an attribute previously stored into the context with the given name.
062         *
063         * @param name used to retrieve the attribute
064         * @return the attribute, or null if not found
065         */
066        Object getAttribute(String name);
067    
068        /**
069         * Returns the names of all attributes of the context, sorted alphabetically.
070         */
071        List<String> getAttributeNames();
072    
073        /**
074         * Returns the MIME content type of the specified file, or null if no content type is known. MIME types are built-in
075         * to servlet containers and may be futher specified via the web application deployment descriptor.
076         *
077         * @param file name of file
078         * @return the presumed MIME content type, or null if not known
079         * @since 5.1.0.0
080         */
081        String getMimeType(String file);
082    }