blob: d980b63e16d3100a9b2858a99a386c1e65cec7e1 [file] [log] [blame]
/*
* 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.wrapper;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.Enumeration;
import java.util.Map;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.treeprocessor.sitemap.MountNode;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.Source;
import org.apache.cocoon.util.Deprecation;
import org.xml.sax.SAXException;
/**
* Enviroment facade, whose delegate object can be changed. This class is
* required to handle internal redirects in sitemap sources ("cocoon:").
* This is because {@link org.apache.cocoon.components.source.impl.SitemapSource}
* keeps the environment in which the internal request should be processed.
* But internal redirects create a new processing environment and there's
* no way to change the one held by the <code>SitemapSource</code>. So the
* processing of internal redirects actually changes the delegate of this
* class, transparently for the <code>SitemapSource</code>.
*
* @see org.apache.cocoon.components.source.impl.SitemapSource
* @author <a href="http://www.apache.org/~sylvain/">Sylvain Wallez</a>
* @version $Id$
*/
public class MutableEnvironmentFacade implements Environment {
private EnvironmentWrapper env;
public MutableEnvironmentFacade(EnvironmentWrapper env) {
this.env = env;
// Ensure we start with a false passthrough flag.
// FIXME: this should really be part of the Processor contract rather
// than an environment attribute
env.setAttribute(MountNode.COCOON_PASS_THROUGH, Boolean.FALSE);
}
public EnvironmentWrapper getDelegate() {
return this.env;
}
public void setDelegate(EnvironmentWrapper env) {
this.env = env;
}
//----------------------------------
// EnvironmentWrapper-specific method (SW:still have to understand why SitemapSource needs them)
public void setURI(String prefix, String uri) {
this.env.setURI(prefix, uri);
}
public void setOutputStream(OutputStream os) {
this.env.setOutputStream(os);
}
// Move this to the Environment interface ?
public String getRedirectURL() {
return this.env.getRedirectURL();
}
public void reset() {
this.env.reset();
}
//----------------------------------
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getURI()
*/
public String getURI() {
return env.getURI();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getURIPrefix()
*/
public String getURIPrefix() {
return env.getURIPrefix();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getRootContext()
*/
public String getRootContext() {
return env.getRootContext();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getContext()
*/
public String getContext() {
return env.getContext();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getView()
*/
public String getView() {
return env.getView();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getAction()
*/
public String getAction() {
return env.getAction();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#setContext(java.lang.String, java.lang.String, java.lang.String)
*/
public void setContext(String prefix, String uri, String context) {
env.setContext(prefix, uri, context);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#changeContext(java.lang.String, java.lang.String)
*/
public void changeContext(String uriprefix, String context) throws Exception {
env.changeContext(uriprefix, context);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#redirect(boolean, java.lang.String)
*/
public void redirect(boolean sessionmode, String url) throws IOException {
env.redirect(sessionmode, url);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#setContentType(java.lang.String)
*/
public void setContentType(String mimeType) {
env.setContentType(mimeType);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getContentType()
*/
public String getContentType() {
return env.getContentType();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#setContentLength(int)
*/
public void setContentLength(int length) {
env.setContentLength(length);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#setStatus(int)
*/
public void setStatus(int statusCode) {
env.setStatus(statusCode);
}
/**
* @see org.apache.cocoon.environment.Environment#getOutputStream()
* @deprecated Use {@link #getOutputStream(int)} instead.
*/
public OutputStream getOutputStream() throws IOException {
Deprecation.logger.warn("The method Environment.getOutputStream() " +
"is deprecated. Use getOutputStream(-1) instead.");
// by default we use the complete buffering output stream
return getOutputStream(-1);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getOutputStream(int)
*/
public OutputStream getOutputStream(int bufferSize) throws IOException {
return env.getOutputStream(bufferSize);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getObjectModel()
*/
public Map getObjectModel() {
return env.getObjectModel();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#isResponseModified(long)
*/
public boolean isResponseModified(long lastModified) {
return env.isResponseModified(lastModified);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#setResponseIsNotModified()
*/
public void setResponseIsNotModified() {
env.setResponseIsNotModified();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#setAttribute(java.lang.String, java.lang.Object)
*/
public void setAttribute(String name, Object value) {
env.setAttribute(name, value);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getAttribute(java.lang.String)
*/
public Object getAttribute(String name) {
return env.getAttribute(name);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#removeAttribute(java.lang.String)
*/
public void removeAttribute(String name) {
env.removeAttribute(name);
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#getAttributeNames()
*/
public Enumeration getAttributeNames() {
return env.getAttributeNames();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#tryResetResponse()
*/
public boolean tryResetResponse() throws IOException {
return env.tryResetResponse();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#commitResponse()
*/
public void commitResponse() throws IOException {
env.commitResponse();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#startingProcessing()
*/
public void startingProcessing() {
env.startingProcessing();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#finishingProcessing()
*/
public void finishingProcessing() {
env.finishingProcessing();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#isExternal()
*/
public boolean isExternal() {
return env.isExternal();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.Environment#isInternRedirect()
*/
public boolean isInternalRedirect() {
return env.isInternalRedirect();
}
/* (non-Javadoc)
* @see org.apache.cocoon.environment.SourceResolver#resolve(java.lang.String)
*/
public Source resolve(String systemID)
throws ProcessingException, SAXException, IOException {
return env.resolve(systemID);
}
/* (non-Javadoc)
* @see org.apache.excalibur.source.SourceResolver#resolveURI(java.lang.String)
*/
public org.apache.excalibur.source.Source resolveURI(String arg0)
throws MalformedURLException, IOException {
return env.resolveURI(arg0);
}
/* (non-Javadoc)
* @see org.apache.excalibur.source.SourceResolver#resolveURI(java.lang.String, java.lang.String, java.util.Map)
*/
public org.apache.excalibur.source.Source resolveURI(String arg0, String arg1, Map arg2)
throws MalformedURLException, IOException {
return env.resolveURI(arg0, arg1, arg2);
}
/* (non-Javadoc)
* @see org.apache.excalibur.source.SourceResolver#release(org.apache.excalibur.source.Source)
*/
public void release(org.apache.excalibur.source.Source arg0) {
env.release(arg0);
}
}