/**
* Copyright (C) 2010 Orbeon, Inc.
*
* This program is free software; you can redistribute it and/or modify it under the terms of the
* GNU Lesser General Public License as published by the Free Software Foundation; either version
* 2.1 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The full text of the license is available at http://www.gnu.org/copyleft/lesser.html
*/
package org.orbeon.oxf.processor;
import org.orbeon.oxf.processor.generator.TidyConfig;
import org.orbeon.oxf.util.ContentTypes;
import org.orbeon.oxf.xml.XMLReceiver;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Locale;
public class ServletResponseWrapper extends HttpServletResponseWrapper {
private PrintWriter printWriter;
private ServletOutputStream servletOutputStream;
private StreamInterceptor streamInterceptor = new StreamInterceptor();
public ServletResponseWrapper(HttpServletResponse response) {
super(response);
}
public PrintWriter getWriter() throws IOException {
if (printWriter == null)
printWriter = new PrintWriter(streamInterceptor.getWriter());
return printWriter;
}
public ServletOutputStream getOutputStream() throws IOException {
if (servletOutputStream == null)
servletOutputStream = new ByteArrayServletOutputStream(streamInterceptor.getOutputStream());
return servletOutputStream;
}
public void setContentType(String contentType) {
streamInterceptor.setEncoding(ContentTypes.getContentTypeCharsetOrNull(contentType));
streamInterceptor.setContentType(ContentTypes.getContentTypeMediaTypeOrNull(contentType));
}
public void addCookie(Cookie cookie) {
}
public void addDateHeader(String s, long l) {
}
public void addHeader(String s, String s1) {
}
public void addIntHeader(String s, int i) {
}
public boolean containsHeader(String s) {
return false;
}
public String encodeRedirectURL(String s) {
return super.encodeRedirectURL(s);
}
public String encodeRedirectUrl(String s) {
return super.encodeRedirectUrl(s);
}
public String encodeURL(String s) {
return super.encodeURL(s);
}
public String encodeUrl(String s) {
return super.encodeUrl(s);
}
public void sendError(int i) throws IOException {
// NOTE: Should do something?
}
public void sendError(int i, String s) throws IOException {
// NOTE: Should do something?
}
public void sendRedirect(String s) throws IOException {
}
public void setDateHeader(String s, long l) {
}
public void setHeader(String s, String s1) {
}
public void setIntHeader(String s, int i) {
}
public void setStatus(int i) {
}
public void setStatus(int i, String s) {
}
public void flushBuffer() throws IOException {
}
public int getBufferSize() {
// NOTE: What makes sense here?
return super.getBufferSize();
}
public String getCharacterEncoding() {
// NOTE: What makes sense here?
return super.getCharacterEncoding();
}
public Locale getLocale() {
// NOTE: What makes sense here?
return super.getLocale();
}
public boolean isCommitted() {
// NOTE: What makes sense here?
return false;
}
public void reset() {
}
public void resetBuffer() {
}
public void setBufferSize(int i) {
}
public void setContentLength(int i) {
}
public void setLocale(Locale locale) {
}
public void setResponse(ServletResponse servletResponse) {
}
public void parse(XMLReceiver xmlReceiver) {
parse(xmlReceiver, null);
}
public void parse(XMLReceiver xmlReceiver, TidyConfig tidyConfig) {
streamInterceptor.parse(xmlReceiver, tidyConfig, false);
}
public static class ByteArrayServletOutputStream extends ServletOutputStream {
private final OutputStream byteOutput;
public ByteArrayServletOutputStream(OutputStream output) {
this.byteOutput = output;
}
public void write(int b) throws IOException {
byteOutput.write(b);
}
}
}