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    }