blob: da2d9f7f19833aabe1853a94aca14fa310009e91 [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.catalina.ssi;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
* A HttpServletResponseWrapper, used from
* <code>SSIServletExternalResolver</code>
*
* @author Bip Thelin
* @version $Revision$, $Date$
*/
public class ResponseIncludeWrapper extends HttpServletResponseWrapper {
/**
* Our ServletOutputStream
*/
protected ServletOutputStream originalServletOutputStream;
protected ServletOutputStream servletOutputStream;
protected PrintWriter printWriter;
/**
* Initialize our wrapper with the current HttpServletResponse and
* ServletOutputStream.
*
* @param res
* The HttpServletResponse to use
* @param out
* The ServletOutputStream' to use
*/
public ResponseIncludeWrapper(HttpServletResponse res,
ServletOutputStream originalServletOutputStream) {
super(res);
this.originalServletOutputStream = originalServletOutputStream;
}
/**
* Flush the servletOutputStream or printWriter ( only one will be non-null )
* This must be called after a requestDispatcher.include, since we can't
* assume that the included servlet flushed its stream.
*/
public void flushOutputStreamOrWriter() throws IOException {
if (servletOutputStream != null) {
servletOutputStream.flush();
}
if (printWriter != null) {
printWriter.flush();
}
}
/**
* Return a printwriter, throws and exception if a OutputStream already
* been returned.
*
* @return a PrintWriter object
* @exception java.io.IOException
* if the outputstream already been called
*/
public PrintWriter getWriter() throws java.io.IOException {
if (servletOutputStream == null) {
if (printWriter == null) {
printWriter = new PrintWriter(originalServletOutputStream);
}
return printWriter;
}
throw new IllegalStateException();
}
/**
* Return a OutputStream, throws and exception if a printwriter already
* been returned.
*
* @return a OutputStream object
* @exception java.io.IOException
* if the printwriter already been called
*/
public ServletOutputStream getOutputStream() throws java.io.IOException {
if (printWriter == null) {
if (servletOutputStream == null) {
servletOutputStream = originalServletOutputStream;
}
return servletOutputStream;
}
throw new IllegalStateException();
}
}