package org.ripla.rap; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletResponse; /** * <p> * <strong>IMPORTANT:</strong> This class is <em>not</em> part the public RAP * API. It may change or disappear without further notice. Use this class at * your own risk. * </p> */ public class TestResponse implements HttpServletResponse { private TestServletOutputStream outStream; private String contentType; private String characterEncoding; private final Map<String, Cookie> cookies; private final Map<String, String> headers; private int errorStatus; private int status; private String redirect; private PrintWriter printWriter; public TestResponse() { characterEncoding = "UTF-8"; outStream = new TestServletOutputStream(); cookies = new HashMap<String, Cookie>(); headers = new HashMap<String, String>(); } @Override public void addCookie(final Cookie arg0) { cookies.put(arg0.getName(), arg0); } public Cookie getCookie(final String cookieName) { return cookies.get(cookieName); } @Override public boolean containsHeader(final String arg0) { return false; } @Override public String encodeURL(final String arg0) { return arg0; } @Override public String encodeRedirectURL(final String arg0) { return arg0; } @Override public String encodeUrl(final String arg0) { return arg0; } @Override public String encodeRedirectUrl(final String arg0) { return arg0; } @Override public void sendError(final int code, final String message) throws IOException { errorStatus = code; getWriter().write("HTTP ERROR " + code + "\nReason: " + message); } @Override public void sendError(final int code) throws IOException { errorStatus = code; getWriter().write("HTTP ERROR " + code); } public int getErrorStatus() { return errorStatus; } @Override public void sendRedirect(final String arg0) throws IOException { redirect = arg0; } public String getRedirect() { return redirect; } @Override public void setDateHeader(final String arg0, final long arg1) { headers.put(arg0, new Date(arg1).toString()); } @Override public void addDateHeader(final String arg0, final long arg1) { headers.put(arg0, new Date(arg1).toString()); } @Override public void setHeader(final String arg0, final String arg1) { headers.put(arg0, arg1); } @Override public String getHeader(final String name) { return headers.get(name); } @Override public void addHeader(final String arg0, final String arg1) { headers.put(arg0, arg1); } @Override public void setIntHeader(final String arg0, final int arg1) { } @Override public void addIntHeader(final String arg0, final int arg1) { } @Override public void setStatus(final int arg0) { status = arg0; } @Override public void setStatus(final int arg0, final String arg1) { } @Override public ServletOutputStream getOutputStream() throws IOException { return outStream; } @Override public PrintWriter getWriter() throws IOException { if (printWriter == null) { printWriter = new PrintWriter(new OutputStreamWriter(outStream, characterEncoding)); } return printWriter; } @Override public void setContentLength(final int arg0) { } @Override public void setContentType(final String contentType) { this.contentType = contentType; setHeader("Content-Type", contentType); } @Override public String getContentType() { return getHeader("Content-Type"); } @Override public void setCharacterEncoding(final String charset) { characterEncoding = charset; setHeader("Content-Type", contentType + "; charset=" + charset); } @Override public String getCharacterEncoding() { return characterEncoding; } @Override public void setBufferSize(final int arg0) { } @Override public int getBufferSize() { return 0; } @Override public void flushBuffer() throws IOException { } @Override public void resetBuffer() { } @Override public boolean isCommitted() { return false; } @Override public void reset() { } @Override public void setLocale(final Locale arg0) { } @Override public Locale getLocale() { return null; } public String getContent() { String result = ""; if (printWriter != null) { printWriter.flush(); final ByteArrayOutputStream content = outStream.getContent(); try { result = content.toString(characterEncoding); } catch (final UnsupportedEncodingException exception) { throw new RuntimeException(exception); } } return result; } public void clearContent() { outStream = new TestServletOutputStream(); printWriter = null; } @Override public int getStatus() { return status; } @Override public Collection<String> getHeaders(final String name) { return null; } @Override public Collection<String> getHeaderNames() { return null; } }