blob: 9ef3ab1a7e412ab34bffc8b62eff7f1e155beb6c [file] [log] [blame]
/*
* Copyright 1999-2004 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.cocoon.environment;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Map;
/**
* Base interface for an environment abstraction
*
* @version $Id$
*/
public interface Environment {
/**
* Get the URI to process. The prefix is stripped off.
*/
String getURI();
/**
* Get the prefix of the URI in progress.
*/
String getURIPrefix();
/**
* Set the URI and the prefix to process.
*/
void setURI(String prefix, String value);
/**
* Get the view to process
*/
String getView();
/**
* Get the action to process
*/
String getAction();
/**
* Redirect to the given URL
*/
void redirect(String url, boolean global, boolean permanent)
throws IOException;
/**
* Set the content type of the generated resource
*/
void setContentType(String mimeType);
/**
* Get the content type of the resource
*/
String getContentType();
/**
* Set the length of the generated content
*/
void setContentLength(int length);
/**
* Set the response status code
*/
void setStatus(int statusCode);
/**
* Get the output stream where to write the generated resource.
* The returned stream is buffered by the environment. If the
* buffer size is -1 then the complete output is buffered.
* If the buffer size is 0, no buffering takes place.
*/
OutputStream getOutputStream(int bufferSize) throws IOException;
/**
* Get the underlying object model
*/
Map getObjectModel();
/**
* Check if the response has been modified since the same
* "resource" was requested.
* The caller has to test if it is really the same "resource"
* which is requested.
* @return true if the response is modified or if the
* environment is not able to test it
*/
boolean isResponseModified(long lastModified);
/**
* Mark the response as not modified.
*/
void setResponseIsNotModified();
/**
* Binds an object to this environment, using the name specified. This allows
* the pipeline assembly engine to store for its own use objects that souldn't
* be exposed to other components (generators, selectors, etc) and therefore
* cannot be put in the object model.
* <p>
* If an object of the same name is already bound, the object is replaced.
*
* @param name the name to which the object is bound
* @param value the object to be bound
*/
void setAttribute(String name, Object value);
/**
* Returns the object bound with the specified name, or <code>null</code>
* if no object is bound under the name.
*
* @param name a string specifying the name of the object
* @return the object with the specified name
*/
Object getAttribute(String name);
/**
* Removes the object bound with the specified name from
* this environment. If the environment does not have an object
* bound with the specified name, this method does nothing.
*
* @param name the name of the object to remove
*/
void removeAttribute(String name);
/**
* Returns an <code>Enumeration</code> of <code>String</code> objects
* containing the names of all the objects bound to this environment.
*
* @return an <code>Enumeration</code> of <code>String</code>s.
*/
Enumeration getAttributeNames();
/**
* Reset the response if possible. This allows error handlers to have
* a higher chance to produce clean output if the pipeline that raised
* the error has already output some data.
* If a buffered output stream is used, resetting is always successful.
*
* @return true if the response was successfully reset
*/
boolean tryResetResponse() throws IOException;
/**
* Commit the response
*/
void commitResponse() throws IOException;
/**
* Notify that the processing starts.
*/
void startingProcessing();
/**
* Notify that the processing is finished
* This can be used to cleanup the environment object
*/
void finishingProcessing();
/**
* Is this environment external ? An external environment is one that
* is created in response to an external request (http, commandline, etc.).
* Environments created by the "cocoon:" protocol aren't external.
*
* @return true if this environment is external
*/
boolean isExternal();
/**
* Is this an internal redirect?
* An environment is on internal redirect if it is an internal request
* (via the cocoon: protocol) and used for a redirect.
*/
boolean isInternalRedirect();
}