1   /**
2    * Copyright (c) 2000-2010 Liferay, Inc. All rights reserved.
3    *
4    * This library is free software; you can redistribute it and/or modify it under
5    * the terms of the GNU Lesser General Public License as published by the Free
6    * Software Foundation; either version 2.1 of the License, or (at your option)
7    * any later version.
8    *
9    * This library is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11   * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12   * details.
13   */
14  
15  package com.liferay.portlet;
16  
17  import com.liferay.util.servlet.NullServletOutputStream;
18  
19  import java.io.IOException;
20  import java.io.PrintWriter;
21  
22  import java.util.Locale;
23  
24  import javax.portlet.ActionResponse;
25  import javax.portlet.MimeResponse;
26  import javax.portlet.PortletRequest;
27  
28  import javax.servlet.ServletOutputStream;
29  import javax.servlet.http.Cookie;
30  import javax.servlet.http.HttpServletResponse;
31  import javax.servlet.http.HttpServletResponseWrapper;
32  
33  /**
34   * <a href="PortletServletResponse.java.html"><b><i>View Source</i></b></a>
35   *
36   * @author Brian Wing Shun Chan
37   */
38  public class PortletServletResponse extends HttpServletResponseWrapper {
39  
40      public PortletServletResponse(
41          HttpServletResponse response, PortletResponseImpl portletResponseImpl,
42          boolean include) {
43  
44          super(response);
45  
46          _response = response;
47          _portletResponseImpl = portletResponseImpl;
48          _include = include;
49          _lifecycle = _portletResponseImpl.getLifecycle();
50      }
51  
52      public void addCookie(Cookie cookie) {
53          if (!_include) {
54              _portletResponseImpl.addProperty(cookie);
55          }
56      }
57  
58      public void addDateHeader(String name, long date) {
59          addHeader(name, String.valueOf(date));
60      }
61  
62      public void addHeader(String name, String value) {
63          if (!_include) {
64              if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
65                  _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
66  
67                  HttpServletResponse response =
68                      _portletResponseImpl.getHttpServletResponse();
69  
70                  response.addHeader(name, value);
71              }
72          }
73      }
74  
75      public void addIntHeader(String name, int value) {
76          addHeader(name, String.valueOf(value));
77      }
78  
79      public boolean containsHeader(String name) {
80          return false;
81      }
82  
83      public String encodeRedirectURL(String url) {
84          return null;
85      }
86  
87      public String encodeRedirectUrl(String url) {
88          return null;
89      }
90  
91      public String encodeURL(String url) {
92          return _portletResponseImpl.encodeURL(url);
93      }
94  
95      public String encodeUrl(String url) {
96          return _portletResponseImpl.encodeURL(url);
97      }
98  
99      public void flushBuffer() throws IOException {
100         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
101             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
102 
103             _response.flushBuffer();
104         }
105     }
106 
107     public int getBufferSize() {
108         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
109             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
110 
111             return _response.getBufferSize();
112         }
113         else {
114             return 0;
115         }
116     }
117 
118     public String getCharacterEncoding() {
119         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
120             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
121 
122             return _response.getCharacterEncoding();
123         }
124         else {
125             return null;
126         }
127     }
128 
129     public String getContentType() {
130         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
131             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
132 
133             return ((MimeResponse)_portletResponseImpl).getContentType();
134         }
135         else {
136             return null;
137         }
138     }
139 
140     public Locale getLocale() {
141         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
142             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
143 
144             return _response.getLocale();
145         }
146         else {
147             return null;
148         }
149     }
150 
151     public ServletOutputStream getOutputStream() throws IOException {
152         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
153             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
154 
155             return _response.getOutputStream();
156         }
157         else {
158             return new NullServletOutputStream();
159         }
160     }
161 
162     public PrintWriter getWriter() throws IOException {
163         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
164             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
165 
166             return _response.getWriter();
167         }
168         else {
169             return new PrintWriter(new NullServletOutputStream());
170         }
171     }
172 
173     public boolean isCommitted() {
174         if (!_include) {
175             if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
176                 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
177 
178                 return _response.isCommitted();
179             }
180             else {
181                 return false;
182             }
183         }
184         else {
185             if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
186                 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
187 
188                 return _response.isCommitted();
189             }
190             else {
191                 return true;
192             }
193         }
194     }
195 
196     public void reset() {
197         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
198             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
199 
200             _response.reset();
201         }
202     }
203 
204     public void resetBuffer() {
205         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
206             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
207 
208             _response.resetBuffer();
209         }
210     }
211 
212     public void sendError(int status) {
213     }
214 
215     public void sendError(int status, String msg) {
216     }
217 
218     public void sendRedirect(String location) throws IOException {
219         if (!_include) {
220             if (_lifecycle.equals(PortletRequest.ACTION_PHASE)) {
221                 ((ActionResponse)_portletResponseImpl).sendRedirect(location);
222             }
223         }
224     }
225 
226     public void setBufferSize(int bufferSize) {
227         if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
228             _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
229 
230             _response.setBufferSize(bufferSize);
231         }
232     }
233 
234     public void setCharacterEncoding(String encoding) {
235         if (!_include) {
236             if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
237                 _response.setCharacterEncoding(encoding);
238             }
239         }
240     }
241 
242     public void setContentLength(int length) {
243         if (!_include) {
244             if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
245                 _response.setContentLength(length);
246             }
247         }
248     }
249 
250     public void setContentType(String contentType) {
251         if (!_include) {
252             if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
253                 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
254 
255                 ((MimeResponse)_portletResponseImpl).setContentType(
256                     contentType);
257             }
258         }
259     }
260 
261     public void setDateHeader(String name, long date) {
262         setHeader(name, String.valueOf(date));
263     }
264 
265     public void setHeader(String name, String value) {
266         if (!_include) {
267             if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
268                 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
269 
270                 HttpServletResponse response =
271                     _portletResponseImpl.getHttpServletResponse();
272 
273                 response.setHeader(name, value);
274             }
275         }
276     }
277 
278     public void setIntHeader(String name, int value) {
279         setHeader(name, String.valueOf(value));
280     }
281 
282     public void setLocale(Locale locale) {
283         if (!_include) {
284             if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
285                 _response.setLocale(locale);
286             }
287         }
288     }
289 
290     public void setStatus(int status) {
291         if (!_include) {
292             if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
293                 _response.setStatus(status);
294             }
295         }
296     }
297 
298     public void setStatus(int status, String msg) {
299         setStatus(status);
300     }
301 
302     private HttpServletResponse _response;
303     private PortletResponseImpl _portletResponseImpl;
304     private boolean _include;
305     private String _lifecycle;
306 
307 }