blob: aa431f50e668bee4a468f67965ae978a7b02709a [file] [log] [blame]
// Copyright 2006, 2008 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry5.ioc;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Locale;
/**
* Represents a resource on the server that may be used for server side processing, or may be exposed to the client
* side. Generally, this represents an abstraction on top of files on the class path and files stored in the web
* application context.
* <p/>
* Resources are often used as map keys; they should be immutable and should implement hashCode() and equals().
*/
public interface Resource
{
/**
* Returns true if the resource exists; if a stream to the content of the file may be openned.
*
* @return true if the resource exists, false if it does not
*/
boolean exists();
/**
* Opens a stream to the content of the resource, or returns null if the resource does not exist.
*
* @return an open, buffered stream to the content, if available
*/
InputStream openStream() throws IOException;
/**
* Returns the URL for the resource, or null if it does not exist.
*/
URL toURL();
/**
* Returns a localized version of the resource. May return null if no such resource exists.
*/
Resource forLocale(Locale locale);
/**
* 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.
*/
Resource forFile(String relativePath);
/**
* 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, {@link #toURL()} may return null.
*
* @param extension to apply to the resource, such as "html" or "properties"
* @return the new resource
*/
Resource withExtension(String extension);
/**
* Returns the portion of the path up to the last forward slash; this is the directory or folder portion of the
* Resource.
*/
String getFolder();
/**
* Returns the file portion of the Resource path, everything that follows the final forward slash.
*/
String getFile();
/**
* Return the path (the combination of folder and file).
*/
String getPath();
}