package com.googlecode.mycontainer.commons.servlet;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class EngineResponseWrapper extends HttpServletResponseWrapper {
public EngineResponseWrapper(HttpServletResponse response) {
super(response);
}
private ByteArrayOutputStream buffer = new ByteArrayOutputStream();
private PrintWriter writer = null;
private ServletOutputStream out = null;
@Override
public ServletOutputStream getOutputStream() throws IOException {
if (writer != null) {
throw new RuntimeException("getWriter() was called");
}
if (out == null) {
out = new ServletOutputStreamWrapper(buffer);
}
return out;
}
@Override
public PrintWriter getWriter() throws IOException {
if (out != null) {
throw new RuntimeException("getOutputStream() was called");
}
if (writer == null) {
String characterEncoding = getResponse().getCharacterEncoding();
OutputStreamWriter wrt = new OutputStreamWriter(buffer,
characterEncoding);
writer = new PrintWriter(wrt);
}
return writer;
}
public byte[] getBuffer() {
try {
if (writer != null) {
writer.flush();
}
if (out != null) {
out.flush();
}
return buffer.toByteArray();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void setContentLength(int len) {
// We cant pass length to the original response :)
}
}