001 package railo.runtime.net.http; 002 003 import java.io.IOException; 004 import java.io.OutputStream; 005 import java.io.PrintWriter; 006 import java.io.Serializable; 007 import java.util.Locale; 008 009 import javax.servlet.ServletOutputStream; 010 import javax.servlet.http.Cookie; 011 import javax.servlet.http.HttpServletResponse; 012 013 import railo.commons.io.DevNullOutputStream; 014 import railo.commons.lang.Pair; 015 import railo.commons.net.URLEncoder; 016 import railo.runtime.type.dt.DateTimeImpl; 017 018 019 020 /** 021 * 022 */ 023 public final class HttpServletResponseDummy implements HttpServletResponse,Serializable { 024 025 private Cookie[] cookies=new Cookie[0]; 026 private Pair[] headers=new Pair[0]; 027 private int status=200; 028 private String statusCode="OK"; 029 private String charset="ISO-8859-1"; 030 private int contentLength=-1; 031 private String contentType=null; 032 private Locale locale=Locale.getDefault(); 033 private int bufferSize=-1; 034 private boolean commited; 035 //private byte[] outputDatad; 036 private OutputStream out;//=new DevNullOutputStream(); 037 private boolean outInit=false; 038 039 /** 040 * Constructor of the class 041 */ 042 public HttpServletResponseDummy() { 043 this(DevNullOutputStream.DEV_NULL_OUTPUT_STREAM); 044 } 045 046 public HttpServletResponseDummy(OutputStream out) { 047 this.out=out; 048 } 049 050 /** 051 * @see javax.servlet.http.HttpServletResponse#addCookie(javax.servlet.http.Cookie) 052 */ 053 public void addCookie(Cookie cookie) { 054 Cookie[] tmp = new Cookie[cookies.length+1]; 055 for(int i=0;i<cookies.length;i++) { 056 tmp[i]=cookies[i]; 057 } 058 tmp[cookies.length]=cookie; 059 cookies=tmp; 060 } 061 062 /** 063 * @see javax.servlet.http.HttpServletResponse#containsHeader(java.lang.String) 064 */ 065 public boolean containsHeader(String key) { 066 return ReqRspUtil.get(headers, key)!=null; 067 } 068 069 /** 070 * @see javax.servlet.http.HttpServletResponse#encodeURL(java.lang.String) 071 */ 072 public String encodeURL(String value) { 073 return URLEncoder.encode(value); 074 } 075 /** 076 * @see javax.servlet.http.HttpServletResponse#encodeRedirectURL(java.lang.String) 077 */ 078 public String encodeRedirectURL(String url) { 079 return URLEncoder.encode(url); 080 } 081 /** 082 * @see javax.servlet.http.HttpServletResponse#encodeUrl(java.lang.String) 083 */ 084 public String encodeUrl(String value) { 085 return URLEncoder.encode(value); 086 } 087 /** 088 * @see javax.servlet.http.HttpServletResponse#encodeRedirectUrl(java.lang.String) 089 */ 090 public String encodeRedirectUrl(String value) { 091 return URLEncoder.encode(value); 092 } 093 094 /* (non-Javadoc) 095 * @see javax.servlet.http.HttpServletResponse#sendError(int, java.lang.String) 096 */ 097 public void sendError(int code, String codeText) throws IOException { 098 // TODO impl 099 } 100 /* (non-Javadoc) 101 * @see javax.servlet.http.HttpServletResponse#sendError(int) 102 */ 103 public void sendError(int code) throws IOException { 104 // TODO impl 105 } 106 107 /** 108 * @see javax.servlet.http.HttpServletResponse#sendRedirect(java.lang.String) 109 */ 110 public void sendRedirect(String location) throws IOException { 111 addHeader("location",location); 112 } 113 /** 114 * @see javax.servlet.http.HttpServletResponse#setDateHeader(java.lang.String, long) 115 */ 116 public void setDateHeader(String key, long value) { 117 setHeader(key, new DateTimeImpl(value,false).castToString()); 118 } 119 120 /** 121 * @see javax.servlet.http.HttpServletResponse#addDateHeader(java.lang.String, long) 122 */ 123 public void addDateHeader(String key, long value) { 124 addHeader(key, new DateTimeImpl(value,false).castToString()); 125 } 126 127 /** 128 * @see javax.servlet.http.HttpServletResponse#setHeader(java.lang.String, java.lang.String) 129 */ 130 public void setHeader(String key, String value) { 131 headers=ReqRspUtil.set(headers, key, value); 132 } 133 134 /** 135 * @see javax.servlet.http.HttpServletResponse#addHeader(java.lang.String, java.lang.String) 136 */ 137 public void addHeader(String key, String value) { 138 headers=ReqRspUtil.add(headers, key, value); 139 } 140 141 /** 142 * @see javax.servlet.http.HttpServletResponse#setIntHeader(java.lang.String, int) 143 */ 144 public void setIntHeader(String key, int value) { 145 setHeader(key, String.valueOf(value)); 146 } 147 148 /** 149 * @see javax.servlet.http.HttpServletResponse#addIntHeader(java.lang.String, int) 150 */ 151 public void addIntHeader(String key, int value) { 152 addHeader(key, String.valueOf(value)); 153 } 154 /** 155 * @see javax.servlet.http.HttpServletResponse#setStatus(int) 156 */ 157 public void setStatus(int status) { 158 this.status=status; 159 } 160 /** 161 * @see javax.servlet.http.HttpServletResponse#setStatus(int, java.lang.String) 162 */ 163 public void setStatus(int status, String statusCode) { 164 setStatus(status); 165 this.statusCode=statusCode; 166 } 167 168 /** 169 * @see javax.servlet.ServletResponse#getCharacterEncoding() 170 */ 171 public String getCharacterEncoding() { 172 return charset; 173 } 174 175 public void setCharacterEncoding(String charset) { 176 this.charset = charset; 177 } 178 179 /* (non-Javadoc) 180 * @see javax.servlet.ServletResponse#getOutputStream() 181 */ 182 public ServletOutputStream getOutputStream() throws IOException { 183 if(outInit) throw new IOException("output already initallised"); 184 outInit=true; 185 return new ServletOutputStreamDummy(out); 186 } 187 /* (non-Javadoc) 188 * @see javax.servlet.ServletResponse#getWriter() 189 */ 190 public PrintWriter getWriter() throws IOException { 191 if(outInit) throw new IOException("output already initallised"); 192 outInit=true; 193 return new PrintWriter(out); 194 } 195 /* (non-Javadoc) 196 * @see javax.servlet.ServletResponse#setContentLength(int) 197 */ 198 public void setContentLength(int contentLength) { 199 this.contentLength=contentLength; 200 } 201 /* (non-Javadoc) 202 * @see javax.servlet.ServletResponse#setContentType(java.lang.String) 203 */ 204 public void setContentType(String contentType) { 205 this.contentType=contentType; 206 } 207 /** 208 * @see javax.servlet.ServletResponse#setBufferSize(int) 209 */ 210 public void setBufferSize(int size) { 211 this.bufferSize=size; 212 } 213 /** 214 * @see javax.servlet.ServletResponse#getBufferSize() 215 */ 216 public int getBufferSize() { 217 return bufferSize; 218 } 219 /** 220 * @see javax.servlet.ServletResponse#flushBuffer() 221 */ 222 public void flushBuffer() throws IOException { 223 commited = true; 224 } 225 /** 226 * @see javax.servlet.ServletResponse#resetBuffer() 227 */ 228 public void resetBuffer() { 229 commited = true; 230 } 231 /** 232 * @see javax.servlet.ServletResponse#isCommitted() 233 */ 234 public boolean isCommitted() { 235 return commited; 236 } 237 /** 238 * @see javax.servlet.ServletResponse#reset() 239 */ 240 public void reset() { 241 commited = true; 242 } 243 /** 244 * @see javax.servlet.ServletResponse#setLocale(java.util.Locale) 245 */ 246 public void setLocale(Locale locale) { 247 this.locale=locale; 248 } 249 /** 250 * @see javax.servlet.ServletResponse#getLocale() 251 */ 252 public Locale getLocale() { 253 return locale; 254 } 255 256 /** 257 * @return the charset 258 */ 259 public String getCharsetEncoding() { 260 return charset; 261 } 262 263 /** 264 * @return the commited 265 */ 266 public boolean isCommited() { 267 return commited; 268 } 269 270 /** 271 * @return the contentLength 272 */ 273 public int getContentLength() { 274 return contentLength; 275 } 276 277 /** 278 * @return the contentType 279 */ 280 public String getContentType() { 281 return contentType; 282 } 283 284 /** 285 * @return the cookies 286 */ 287 public Cookie[] getCookies() { 288 return cookies; 289 } 290 291 /** 292 * @return the headers 293 */ 294 public Pair[] getHeaders() { 295 return headers; 296 } 297 298 /* * 299 * @return the outputData 300 * / 301 public byte[] getOutputData() { 302 return outputData; 303 } 304 305 public void setOutputData(byte[] outputData) { 306 this.outputData=outputData; 307 }*/ 308 309 /** 310 * @return the status 311 */ 312 public int getStatus() { 313 return status; 314 } 315 316 /** 317 * @return the statusCode 318 */ 319 public String getStatusCode() { 320 return statusCode; 321 } 322 323 }