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 @Override
094 public String encodeRedirectUrl(String url) {
095 return null;
096 }
097
098 @Override
099 public String encodeRedirectURL(String url) {
100 return null;
101 }
102
103 @Override
104 public String encodeUrl(String url) {
105 return _portletResponse.encodeURL(url);
106 }
107
108 @Override
109 public String encodeURL(String url) {
110 return _portletResponse.encodeURL(url);
111 }
112
113 @Override
114 public void flushBuffer() throws IOException {
115 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
116 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
117
118 MimeResponse mimeResponse = _getMimeResponse();
119
120 mimeResponse.flushBuffer();
121 }
122 }
123
124 @Override
125 public int getBufferSize() {
126 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
127 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
128
129 MimeResponse mimeResponse = _getMimeResponse();
130
131 return mimeResponse.getBufferSize();
132 }
133 else {
134 return 0;
135 }
136 }
137
138 @Override
139 public String getCharacterEncoding() {
140 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
141 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
142
143 MimeResponse mimeResponse = _getMimeResponse();
144
145 return mimeResponse.getCharacterEncoding();
146 }
147 else {
148 return null;
149 }
150 }
151
152 @Override
153 public String getContentType() {
154 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
155 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
156
157 MimeResponse mimeResponse = _getMimeResponse();
158
159 return mimeResponse.getContentType();
160 }
161 else {
162 return null;
163 }
164 }
165
166 @Override
167 public Locale getLocale() {
168 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
169 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
170
171 MimeResponse mimeResponse = _getMimeResponse();
172
173 return mimeResponse.getLocale();
174 }
175 else {
176 return null;
177 }
178 }
179
180 @Override
181 public ServletOutputStream getOutputStream() throws IOException {
182 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
183 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
184
185 MimeResponse mimeResponse = _getMimeResponse();
186
187 OutputStream portletOutputStream =
188 mimeResponse.getPortletOutputStream();
189
190 ServletOutputStream servletOutputStream =
191 new ServletOutputStreamAdapter(portletOutputStream);
192
193 return servletOutputStream;
194 }
195 else {
196 return new NullServletOutputStream();
197 }
198 }
199
200 @Override
201 public PrintWriter getWriter() throws IOException {
202 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
203 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
204
205 MimeResponse mimeResponse = _getMimeResponse();
206
207 return mimeResponse.getWriter();
208 }
209 else {
210 return UnsyncPrintWriterPool.borrow(
211 new NullServletOutputStream(), getCharacterEncoding());
212 }
213 }
214
215 @Override
216 public boolean isCommitted() {
217 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
218 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
219
220 MimeResponse mimeResponse = _getMimeResponse();
221
222 return mimeResponse.isCommitted();
223 }
224 else if (!_include) {
225 return false;
226 }
227 else {
228 return true;
229 }
230 }
231
232 @Override
233 public void reset() {
234 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
235 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
236
237 MimeResponse mimeResponse = _getMimeResponse();
238
239 mimeResponse.reset();
240 }
241 }
242
243 @Override
244 public void resetBuffer() {
245 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
246 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
247
248 MimeResponse mimeResponse = _getMimeResponse();
249
250 mimeResponse.resetBuffer();
251 }
252 }
253
254 @Override
255 public void sendError(int status) {
256 }
257
258 @Override
259 public void sendError(int status, String message) {
260 }
261
262 @Override
263 public void sendRedirect(String location) throws IOException {
264 if (!_include) {
265 if (_lifecycle.equals(PortletRequest.ACTION_PHASE)) {
266 ActionResponse actionResponse = _getActionResponse();
267
268 actionResponse.sendRedirect(location);
269 }
270 }
271 }
272
273 @Override
274 public void setBufferSize(int bufferSize) {
275 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
276 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
277
278 MimeResponse mimeResponse = _getMimeResponse();
279
280 mimeResponse.setBufferSize(bufferSize);
281 }
282 }
283
284 @Override
285 public void setCharacterEncoding(String characterEncoding) {
286 if (!_include) {
287 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
288 ResourceResponse resourceResponse = _getResourceResponse();
289
290 resourceResponse.setCharacterEncoding(characterEncoding);
291 }
292 }
293 }
294
295 @Override
296 public void setContentLength(int contentLength) {
297 if (!_include) {
298 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
299 ResourceResponse resourceResponse = _getResourceResponse();
300
301 resourceResponse.setContentLength(contentLength);
302 }
303 }
304 }
305
306 @Override
307 public void setContentType(String contentType) {
308 if (!_include) {
309 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
310 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
311
312 MimeResponse mimeResponse = _getMimeResponse();
313
314 mimeResponse.setContentType(contentType);
315 }
316 }
317 }
318
319 @Override
320 public void setDateHeader(String name, long date) {
321 setHeader(name, String.valueOf(date));
322 }
323
324 @Override
325 public void setHeader(String name, String value) {
326 if (!_include) {
327 if (_lifecycle.equals(PortletRequest.RENDER_PHASE) ||
328 _lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
329
330 MimeResponse mimeResponse = _getMimeResponse();
331
332 mimeResponse.setProperty(name, value);
333 }
334 }
335 }
336
337 @Override
338 public void setIntHeader(String name, int value) {
339 setHeader(name, String.valueOf(value));
340 }
341
342 @Override
343 public void setLocale(Locale locale) {
344 if (!_include) {
345 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
346 ResourceResponse resourceResponse = _getResourceResponse();
347
348 resourceResponse.setLocale(locale);
349 }
350 }
351 }
352
353 @Override
354 public void setStatus(int status) {
355 if (!_include) {
356 if (_lifecycle.equals(PortletRequest.RESOURCE_PHASE)) {
357 ResourceResponse resourceResponse = _getResourceResponse();
358
359 resourceResponse.setProperty(
360 ResourceResponse.HTTP_STATUS_CODE, String.valueOf(status));
361 }
362 }
363 }
364
365 @Override
366 public void setStatus(int status, String message) {
367 setStatus(status);
368 }
369
370 private ActionResponse _getActionResponse() {
371 return (ActionResponse)_portletResponse;
372 }
373
374 private MimeResponse _getMimeResponse() {
375 return (MimeResponse)_portletResponse;
376 }
377
378 private ResourceResponse _getResourceResponse() {
379 return (ResourceResponse)_portletResponse;
380 }
381
382 private boolean _include;
383 private String _lifecycle;
384 private PortletResponse _portletResponse;
385
386 }