001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.servlet.ServletOutputStreamAdapter;
018 import com.liferay.portal.kernel.util.UnsyncPrintWriterPool;
019 import com.liferay.util.servlet.NullServletOutputStream;
020
021 import java.io.IOException;
022 import java.io.OutputStream;
023 import java.io.PrintWriter;
024
025 import java.util.Locale;
026
027 import javax.portlet.ActionResponse;
028 import javax.portlet.MimeResponse;
029 import javax.portlet.PortletRequest;
030 import javax.portlet.PortletResponse;
031 import javax.portlet.ResourceResponse;
032
033 import javax.servlet.ServletOutputStream;
034 import javax.servlet.http.Cookie;
035 import javax.servlet.http.HttpServletResponse;
036 import javax.servlet.http.HttpServletResponseWrapper;
037
038
041 public class PortletServletResponse extends HttpServletResponseWrapper {
042
043 public PortletServletResponse(
044 HttpServletResponse response, PortletResponse portletResponse,
045 boolean include) {
046
047 super(response);
048
049 _portletResponse = portletResponse;
050 _include = include;
051
052 PortletResponseImpl portletResponseImpl =
053 PortletResponseImpl.getPortletResponseImpl(portletResponse);
054
055 _lifecycle = portletResponseImpl.getLifecycle();
056 }
057
058 @Override
059 public void addCookie(Cookie cookie) {
060 if (!_include) {
061 _portletResponse.addProperty(cookie);
062 }
063 }
064
065 @Override
066 public void addDateHeader(String name, long value) {
067 addHeader(name, String.valueOf(value));
068 }
069
070 @Override
071 public void addHeader(String name, String value) {
072 if (!_include) {
073 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
074 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
075
076 MimeResponse mimeResponse = _getMimeResponse();
077
078 mimeResponse.setProperty(name, value);
079 }
080 }
081 }
082
083 @Override
084 public void addIntHeader(String name, int value) {
085 addHeader(name, String.valueOf(value));
086 }
087
088 @Override
089 public boolean containsHeader(String name) {
090 return false;
091 }
092
093
096 @Deprecated
097 @Override
098 public String encodeRedirectUrl(String url) {
099 return null;
100 }
101
102 @Override
103 public String encodeRedirectURL(String url) {
104 return null;
105 }
106
107
110 @Deprecated
111 @Override
112 public String encodeUrl(String url) {
113 return _portletResponse.encodeURL(url);
114 }
115
116 @Override
117 public String encodeURL(String url) {
118 return _portletResponse.encodeURL(url);
119 }
120
121 @Override
122 public void flushBuffer() throws IOException {
123 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
124 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
125
126 MimeResponse mimeResponse = _getMimeResponse();
127
128 mimeResponse.flushBuffer();
129 }
130 }
131
132 @Override
133 public int getBufferSize() {
134 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
135 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
136
137 MimeResponse mimeResponse = _getMimeResponse();
138
139 return mimeResponse.getBufferSize();
140 }
141 else {
142 return 0;
143 }
144 }
145
146 @Override
147 public String getCharacterEncoding() {
148 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
149 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
150
151 MimeResponse mimeResponse = _getMimeResponse();
152
153 return mimeResponse.getCharacterEncoding();
154 }
155 else {
156 return null;
157 }
158 }
159
160 @Override
161 public String getContentType() {
162 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
163 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
164
165 MimeResponse mimeResponse = _getMimeResponse();
166
167 return mimeResponse.getContentType();
168 }
169 else {
170 return null;
171 }
172 }
173
174 @Override
175 public Locale getLocale() {
176 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
177 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
178
179 MimeResponse mimeResponse = _getMimeResponse();
180
181 return mimeResponse.getLocale();
182 }
183 else {
184 return null;
185 }
186 }
187
188 @Override
189 public ServletOutputStream getOutputStream() throws IOException {
190 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
191 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
192
193 MimeResponse mimeResponse = _getMimeResponse();
194
195 OutputStream portletOutputStream =
196 mimeResponse.getPortletOutputStream();
197
198 ServletOutputStream servletOutputStream =
199 new ServletOutputStreamAdapter(portletOutputStream);
200
201 return servletOutputStream;
202 }
203 else {
204 return new NullServletOutputStream();
205 }
206 }
207
208 @Override
209 public PrintWriter getWriter() throws IOException {
210 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
211 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
212
213 MimeResponse mimeResponse = _getMimeResponse();
214
215 return mimeResponse.getWriter();
216 }
217 else {
218 return UnsyncPrintWriterPool.borrow(
219 new NullServletOutputStream(), getCharacterEncoding());
220 }
221 }
222
223 @Override
224 public boolean isCommitted() {
225 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
226 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
227
228 MimeResponse mimeResponse = _getMimeResponse();
229
230 return mimeResponse.isCommitted();
231 }
232 else if (!_include) {
233 return false;
234 }
235 else {
236 return true;
237 }
238 }
239
240 @Override
241 public void reset() {
242 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
243 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
244
245 MimeResponse mimeResponse = _getMimeResponse();
246
247 mimeResponse.reset();
248 }
249 }
250
251 @Override
252 public void resetBuffer() {
253 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
254 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
255
256 MimeResponse mimeResponse = _getMimeResponse();
257
258 mimeResponse.resetBuffer();
259 }
260 }
261
262 @Override
263 public void sendError(int status) {
264 }
265
266 @Override
267 public void sendError(int status, String message) {
268 }
269
270 @Override
271 public void sendRedirect(String location) throws IOException {
272 if (!_include) {
273 if (_lifecycle.equals(PortletRequest.ACTION_PHASE)) {
274 ActionResponse actionResponse = _getActionResponse();
275
276 actionResponse.sendRedirect(location);
277 }
278 }
279 }
280
281 @Override
282 public void setBufferSize(int bufferSize) {
283 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
284 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
285
286 MimeResponse mimeResponse = _getMimeResponse();
287
288 mimeResponse.setBufferSize(bufferSize);
289 }
290 }
291
292 @Override
293 public void setCharacterEncoding(String characterEncoding) {
294 if (!_include) {
295 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
296 ResourceResponse resourceResponse = _getResourceResponse();
297
298 resourceResponse.setCharacterEncoding(characterEncoding);
299 }
300 }
301 }
302
303 @Override
304 public void setContentLength(int contentLength) {
305 if (!_include) {
306 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
307 ResourceResponse resourceResponse = _getResourceResponse();
308
309 resourceResponse.setContentLength(contentLength);
310 }
311 }
312 }
313
314 @Override
315 public void setContentType(String contentType) {
316 if (!_include) {
317 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
318 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
319
320 MimeResponse mimeResponse = _getMimeResponse();
321
322 mimeResponse.setContentType(contentType);
323 }
324 }
325 }
326
327 @Override
328 public void setDateHeader(String name, long date) {
329 setHeader(name, String.valueOf(date));
330 }
331
332 @Override
333 public void setHeader(String name, String value) {
334 if (!_include) {
335 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
336 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
337
338 MimeResponse mimeResponse = _getMimeResponse();
339
340 mimeResponse.setProperty(name, value);
341 }
342 }
343 }
344
345 @Override
346 public void setIntHeader(String name, int value) {
347 setHeader(name, String.valueOf(value));
348 }
349
350 @Override
351 public void setLocale(Locale locale) {
352 if (!_include) {
353 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
354 ResourceResponse resourceResponse = _getResourceResponse();
355
356 resourceResponse.setLocale(locale);
357 }
358 }
359 }
360
361 @Override
362 public void setStatus(int status) {
363 if (!_include) {
364 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
365 ResourceResponse resourceResponse = _getResourceResponse();
366
367 resourceResponse.setProperty(
368 ResourceResponse.HTTP_STATUS_CODE, String.valueOf(status));
369 }
370 }
371 }
372
373
376 @Deprecated
377 @Override
378 public void setStatus(int status, String message) {
379 setStatus(status);
380 }
381
382 private ActionResponse _getActionResponse() {
383 return (ActionResponse)_portletResponse;
384 }
385
386 private MimeResponse _getMimeResponse() {
387 return (MimeResponse)_portletResponse;
388 }
389
390 private ResourceResponse _getResourceResponse() {
391 return (ResourceResponse)_portletResponse;
392 }
393
394 private final boolean _include;
395 private final String _lifecycle;
396 private final PortletResponse _portletResponse;
397
398 }