/*
* argun 1.0
* Web 2.0 delivery framework
* Copyright (C) 2007 Hammurapi Group
*
* 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 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.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* URL: http://www.hammurapi.biz
* e-Mail: support@hammurapi.biz
*/
package biz.hammurapi.web.menu;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import org.apache.log4j.Logger;
/**
* This response wrapper class extends the support class HttpServletResponseWrapper,
* which implements all the methods in the HttpServletResponse interface, as
* delegations to the wrapped response.
* You only need to override the methods that you need to change.
* You can get access to the wrapped response using the method getResponse()
*/
public class ResponseWrapper extends HttpServletResponseWrapper {
static Logger logger=Logger.getLogger(ResponseWrapper.class);
private StringWriter sWriter;
private PrintWriter pWriter;
private ByteArrayOutputStream baos;
private ServletOutputStream sos;
int contentLength;
private String errorString;
private boolean responseObtained=false;
public String getResponseString() throws IOException {
if (errorString!=null) {
return errorString;
}
if (responseObtained) {
throw new IllegalStateException("Response already obtained");
}
responseObtained=true;
if (baos!=null) {
baos.close();
Reader r=new InputStreamReader(new ByteArrayInputStream(baos.toByteArray()));
StringWriter s=new StringWriter();
char[] cbuf=new char[4096];
int i;
while ((i=r.read(cbuf))!=-1) s.write(cbuf, 0, i);
s.close();
return s.toString();
}
if (sWriter!=null) {
return sWriter.toString();
}
return "<B>Resource not found!</B>";
}
public Reader getResponseReader() throws IOException {
if (errorString!=null) {
return new StringReader(errorString);
}
if (responseObtained) {
throw new IllegalStateException("Response already obtained");
}
responseObtained=true;
if (baos!=null) {
baos.close();
return new InputStreamReader(new ByteArrayInputStream(baos.toByteArray()));
}
if (sWriter!=null) {
return new StringReader(sWriter.toString());
}
return new StringReader("<B>Resource not found!</B>");
}
HttpServletResponse response;
public ResponseWrapper(HttpServletResponse response) {
super(response);
this.response=response;
}
public void setContentLength(int len) {
logger.debug("setContentLength("+len+") - ignored");
}
public void setContentType(String type) {
logger.debug("setContentType("+type+") - ignored");
}
public void addDateHeader(String name, long date) {
logger.debug("addDateHeader("+name+", "+date+")");
response.addDateHeader(name, date);
}
public void addHeader(String name, String value) {
logger.debug("addHeader("+name+", "+value+")");
response.addHeader(name, value);
}
public void addIntHeader(String name, int value) {
logger.debug("addIntHeader("+name+", "+value+")");
response.addIntHeader(name, value);
}
public void setDateHeader(String name, long date) {
logger.debug("setDateHeader("+name+", "+date+")");
response.setDateHeader(name, date);
}
public void setHeader(String name, String value) {
logger.debug("setHeader("+name+", "+value+")");
if ("Content-Length".equalsIgnoreCase(name)) {
logger.debug(" Ignored");
} else {
response.setHeader(name, value);
}
}
public void setIntHeader(String name, int value) {
logger.debug("setIntHeader("+name+", "+value+")");
response.setIntHeader(name, value);
}
public void sendError(int sc) throws IOException {
errorString="Error: "+sc;
logger.error(errorString);
response.sendError(sc);
}
public void sendError(int sc, String msg) throws IOException {
errorString="Error: "+sc+" ("+msg+")";
logger.error(errorString);
response.sendError(sc, msg);
}
public ServletOutputStream getOutputStream() throws IOException {
if (sWriter!=null) {
throw new IllegalStateException("getWriter() already called");
}
if (baos==null) {
baos=new ByteArrayOutputStream();
sos=new ServletOutputStream() {
public void write(int b) throws IOException {
baos.write(b);
}
};
logger.debug("ServletOutputStream obtained");
}
return sos;
}
public PrintWriter getWriter() throws IOException {
if (baos!=null) {
throw new IllegalStateException("getOutputStream() already called");
}
if (sWriter==null) {
sWriter=new StringWriter();
pWriter=new PrintWriter(sWriter);
logger.debug("PrintWriter obtained");
}
return pWriter;
}
}
|