package org.fenixedu.bennu.portal.servlet;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
*
* Wraps an {@link HttpServletResponse} so that writes to its PrintWriter
* are buffered, so that the written value can later be rewritten, by the layout injector.
*
* @author João Carvalho (joao.pedro.carvalho@tecnico.ulisboa.pt)
*
*/
class PortalResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter writer = null;
public PortalResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public PrintWriter getWriter() throws IOException {
if (writer == null) {
writer = new CharArrayWriter();
getResponse().getWriter();
}
return new PrintWriter(writer);
}
public String getContent() {
return writer.toString();
}
@Override
public void resetBuffer() {
super.resetBuffer();
if (writer != null) {
writer.reset();
}
}
@Override
public void flushBuffer() throws IOException {
/* Don't flush an empty buffer (this caused issues with static resources,
* as getWriter() was called but nothing was written).
*/
if (writer != null && writer.size() > 0) {
getResponse().getWriter().write(writer.toString());
writer.reset();
}
super.flushBuffer();
}
/*
* The response only has data if getWriter() was called
*/
public boolean hasData() {
return writer != null;
}
}