package de.rwth.idsg.bikeman.psinterface.log;
import lombok.Getter;
import org.apache.commons.io.output.TeeOutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletResponse;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Taken from https://github.com/isrsal/spring-mvc-logger and modified
*
* @author Sevket Goekay <goekay@dbis.rwth-aachen.de>
* @since 09.10.2015
*/
public class ResponseWrapper extends HttpServletResponseWrapper {
private final ByteArrayOutputStream bos = new ByteArrayOutputStream();
private PrintWriter writer = new PrintWriter(bos);
@Getter private String prefix;
public ResponseWrapper(String prefix, HttpServletResponse response) {
super(response);
this.prefix = prefix;
}
@Override
public ServletResponse getResponse() {
return this;
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return new ServletOutputStream() {
private TeeOutputStream tee = new TeeOutputStream(ResponseWrapper.super.getOutputStream(), bos);
@Override
public void write(int b) throws IOException {
tee.write(b);
}
@Override
public boolean isReady() {
// Auto-generated method stub
return false;
}
@Override
public void setWriteListener(WriteListener listener) {
// Auto-generated method stub
}
};
}
@Override
public PrintWriter getWriter() throws IOException {
return new TeePrintWriter(super.getWriter(), writer);
}
public byte[] toByteArray(){
return bos.toByteArray();
}
}