| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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 |
| * |
| * @author <a href="mailto:bluetkemeier@s-und-n.de">Björn Lütkemeier</a> |
| * @author <a href="mailto:Giacomo.Pati@pwr.ch">Giacomo Pati</a> |
| * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a> |
| * @version $Id$ |
| */ |
| public interface Environment |
| extends SourceResolver { |
| |
| /** |
| * Get the URI to process. The prefix is stripped off. |
| */ |
| String getURI(); |
| |
| /** |
| * Get the prefix of the URI in progress. |
| */ |
| String getURIPrefix(); |
| |
| /** |
| * Get the Root Context |
| */ |
| String getRootContext(); |
| |
| /** |
| * Get current context |
| */ |
| String getContext(); |
| |
| /** |
| * Get the view to process |
| */ |
| String getView(); |
| |
| /** |
| * Get the action to process |
| */ |
| String getAction(); |
| |
| /** |
| * Set the context. This is similar to changeContext() |
| * except that it is absolute. |
| */ |
| void setContext(String prefix, String uri, String context); |
| |
| /** |
| * Change the context from uriprefix to context |
| */ |
| void changeContext(String uriprefix, String context) throws Exception; |
| |
| /** |
| * Redirect the client to the given URL |
| */ |
| void redirect(boolean sessionmode, String url) 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. |
| * @deprecated Use {@link #getOutputStream(int)} instead. |
| */ |
| OutputStream getOutputStream() throws IOException; |
| |
| /** |
| * 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. |
| * This method replaces {@link #getOutputStream()}. |
| */ |
| 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(); |
| } |