/*
* Copyright 2000-2001,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.jetspeed.util.servlet;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Locale;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
/**
*
* EcsServletResponse is an HttpServletResponse implementation that wraps an
* existing HttpServletResponse and redirects its output to an alternate
* OutputStream.
*
* @author <a href="raphael@apache.org">Rapha�l Luta</a>
*/
public class EcsServletResponse implements HttpServletResponse {
/** The wrapped ServletResponse */
private final HttpServletResponse rsp;
/** The new OutputStream to use */
private final EcsServletOutputStream sout;
/** The PrintWriter to use if defined */
private PrintWriter writer;
/** state flag: has getOutputStream() already been called ? */
private boolean outUsed = false;
/** state flag: has getWriter() already been called ? */
private boolean writerUsed = false;
/**
* Build a Response
*
* @param rsp
* the base HttpServletResponse to wrap
* @param out
* the OutputStream to be used for writing data
*/
public EcsServletResponse(HttpServletResponse rsp, OutputStream out) {
this.rsp = rsp;
this.sout = new EcsServletOutputStream(out);
}
/**
* @see javax.servlet.ServletResponse#getCharacterEncoding
*/
public String getCharacterEncoding() {
return rsp.getCharacterEncoding();
}
/**
* @see javax.servlet.ServletResponse#getOutputStream
*/
public ServletOutputStream getOutputStream() throws IOException {
if (writerUsed) {
throw new IllegalStateException("Writer already used");
}
this.outUsed = true;
return this.sout;
}
/**
* @see javax.servlet.ServletResponse#getWriter
*/
public PrintWriter getWriter() throws IOException {
if (outUsed) {
throw new IllegalStateException("OutputStream already in use");
}
if (writer == null) {
this.writer = new PrintWriter(this.sout);
}
this.writerUsed = true;
return writer;
}
/**
* @see javax.servlet.ServletResponse#setContentLength
*/
public void setContentLength(int len) {
// silently fail
}
/**
* @see javax.servlet.ServletResponse#setContentType
*/
public void setContentType(String type) {
// silently fail
}
/**
* @see javax.servlet.ServletResponse#setBufferSize
*/
public void setBufferSize(int size) {
// silently fail
}
/**
* @see javax.servlet.ServletResponse#getBufferSize
*/
public int getBufferSize() {
return rsp.getBufferSize();
}
/**
* @see javax.servlet.ServletResponse#flushBuffer
*/
public void flushBuffer() throws IOException {
this.sout.flush();
}
/**
* @see javax.servlet.ServletResponse#isCommitted
*/
public boolean isCommitted() {
// we don't implement reset() so always claim
// the data is committed
return true;
}
/**
* @see javax.servlet.ServletResponse#reset
*/
public void reset() {
// silently fail
}
/**
* @see javax.servlet.ServletResponse#setLocale
*/
public void setLocale(Locale loc) {
// we can safely ignore this
}
/**
* @see javax.servlet.ServletResponse#getLocale
*/
public Locale getLocale() {
return rsp.getLocale();
}
/**
* @see javax.servlet.http.HttpServletResponse#addCookie
*/
public void addCookie(Cookie cookie) {
rsp.addCookie(cookie);
}
/**
* @see javax.servlet.http.HttpServletResponse#containsHeader
*/
public boolean containsHeader(String name) {
return rsp.containsHeader(name);
}
/**
* @see javax.servlet.http.HttpServletResponse#encodeURL
*/
public String encodeURL(String url) {
return rsp.encodeURL(url);
}
/**
* @see javax.servlet.http.HttpServletResponse#encodeRedirectURL
*/
public String encodeRedirectURL(String url) {
return rsp.encodeRedirectURL(url);
}
/**
* @see javax.servlet.http.HttpServletResponse#encodeUrl
*/
public String encodeUrl(String url) {
return rsp.encodeUrl(url);
}
/**
* @see javax.servlet.http.HttpServletResponse#encodeRedirectUrl
*/
public String encodeRedirectUrl(String url) {
return rsp.encodeRedirectUrl(url);
}
/**
* @see javax.servlet.http.HttpServletResponse#sendError
*/
public void sendError(int sc, String msg) throws IOException {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#sendError
*/
public void sendError(int sc) throws IOException {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#sendRedirect
*/
public void sendRedirect(String location) throws IOException {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#setDateHeader
*/
public void setDateHeader(String name, long date) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#addDateHeader
*/
public void addDateHeader(String name, long date) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#setHeader
*/
public void setHeader(String name, String value) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#addHeader
*/
public void addHeader(String name, String value) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#setIntHeader
*/
public void setIntHeader(String name, int value) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#addIntHeader
*/
public void addIntHeader(String name, int value) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#setStatus
*/
public void setStatus(int sc) {
// silently fail
}
/**
* @see javax.servlet.http.HttpServletResponse#setStatus
*/
public void setStatus(int sc, String sm) {
// silently fail
}
public void resetBuffer() {
// silently fail
// added by Ben Woodward
}
/**
* @return
*/
public String getContentType() {
return null;
}
/**
* @param charset
*/
public void setCharacterEncoding(String charset) {
// silently fail
}
}