1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.pluto.core.impl;
21
22 import java.io.IOException;
23 import java.io.PrintWriter;
24 import java.io.UnsupportedEncodingException;
25 import java.util.HashMap;
26 import java.util.Map;
27
28 import javax.portlet.PortletResponse;
29 import javax.servlet.ServletOutputStream;
30 import javax.servlet.http.HttpServletRequest;
31
32 import org.apache.pluto.core.InternalPortletResponse;
33 import org.apache.pluto.om.window.PortletWindow;
34 import org.apache.pluto.services.information.InformationProviderAccess;
35 import org.apache.pluto.services.information.ResourceURLProvider;
36 import org.apache.pluto.services.property.PropertyManager;
37 import org.apache.pluto.util.PrintWriterServletOutputStream;
38
39 public abstract class PortletResponseImpl extends javax.servlet.http.HttpServletResponseWrapper
40 implements InternalPortletResponse, PortletResponse
41 {
42
43 PortletWindow portletWindow;
44
45 /***
46 * this variable holds the servlet request of the target/portlet's
47 * web module
48 */
49 private javax.servlet.http.HttpServletRequest webModuleServletRequest;
50
51 private boolean usingWriter;
52 private boolean usingStream;
53
54 private ServletOutputStream wrappedWriter;
55 private Map properties;
56
57 /***
58 * true if we are in an include call
59 */
60 private boolean included;
61
62 public PortletResponseImpl(PortletWindow portletWindow,
63 javax.servlet.http.HttpServletRequest servletRequest,
64 javax.servlet.http.HttpServletResponse servletResponse)
65 {
66 super(servletResponse);
67
68 this.webModuleServletRequest = servletRequest;
69 this.portletWindow = portletWindow;
70 }
71
72
73 public void addProperty(String key, String value)
74 {
75 if (key == null)
76 {
77 throw new IllegalArgumentException("Property key == null");
78 }
79
80 Map props = getProperties();
81
82 String[] oldValues = (String[]) props.get(key);
83 String[] newValues = null;
84 if (oldValues == null)
85 {
86 newValues = new String[]{value};
87 }
88 else
89 {
90 int len = oldValues.length;
91 newValues = new String[len+1];
92 System.arraycopy(oldValues, 0, newValues, 0, len);
93 newValues[len] = value;
94 }
95 props.put(key, newValues);
96
97 PropertyManager.setResponseProperties(portletWindow, this.getHttpServletRequest(), _getHttpServletResponse(), props);
98
99 }
100
101 public void setProperty(String key, String value)
102 {
103 if (key == null)
104 {
105 throw new IllegalArgumentException("Property key == null");
106 }
107
108 Map props = getProperties();
109
110 String[] newValues = new String[]{value};
111 props.put(key, newValues);
112
113 PropertyManager.setResponseProperties(portletWindow, this.getHttpServletRequest(), _getHttpServletResponse(), props);
114 }
115
116 public String encodeURL(String path)
117 {
118 if (path.indexOf("://") == -1 && !path.startsWith("/"))
119 {
120 throw new IllegalArgumentException("only absolute URLs or full path URIs are allowed");
121 }
122 ResourceURLProvider provider = InformationProviderAccess.getDynamicProvider(getHttpServletRequest()).getResourceURLProvider(portletWindow);
123 if (path.indexOf("://") != -1)
124 {
125 provider.setAbsoluteURL(path);
126 }
127 else
128 {
129 provider.setFullPath(path);
130 }
131 return this._getHttpServletResponse().encodeURL(provider.toString());
132 }
133
134
135
136 public void lateInit(javax.servlet.http.HttpServletRequest webModuleServletRequest,
137 javax.servlet.http.HttpServletResponse webModuleServletResponse)
138 {
139 this.webModuleServletRequest = webModuleServletRequest;
140 this.setResponse(webModuleServletResponse);
141 }
142
143
144
145 protected javax.servlet.http.HttpServletResponse _getHttpServletResponse()
146 {
147 return(javax.servlet.http.HttpServletResponse) super.getResponse();
148 }
149
150 protected javax.servlet.http.HttpServletRequest getHttpServletRequest()
151 {
152 return webModuleServletRequest;
153 }
154
155 private Map getProperties() {
156 if (properties == null)
157 properties = new HashMap();
158 return properties;
159 }
160
161
162
163
164
165 public void addCookie(javax.servlet.http.Cookie cookie)
166 {
167 this._getHttpServletResponse().addCookie(cookie);
168 }
169
170 public boolean containsHeader(String name)
171 {
172 return this._getHttpServletResponse().containsHeader(name);
173 }
174
175 public String encodeRedirectUrl(String url)
176 {
177 return included ? null : this._getHttpServletResponse().encodeRedirectUrl(url);
178 }
179
180 public String encodeRedirectURL(String url)
181 {
182 return included ? null : this._getHttpServletResponse().encodeRedirectURL(url);
183 }
184
185 public void sendRedirect(String location) throws java.io.IOException
186 {
187 this._getHttpServletResponse().sendRedirect(location);
188 }
189
190 public void setDateHeader(String name, long date)
191 {
192 this._getHttpServletResponse().setDateHeader(name,date);
193 }
194
195 public void sendError(int sc, String msg) throws java.io.IOException
196 {
197 this._getHttpServletResponse().sendError(sc,msg);
198 }
199
200 public void sendError(int sc) throws java.io.IOException
201 {
202 this._getHttpServletResponse().sendError(sc);
203 }
204
205 public void addHeader(String name, String value)
206 {
207 this._getHttpServletResponse().addHeader(name,value);
208 }
209
210 public void setIntHeader(String name, int value)
211 {
212 this._getHttpServletResponse().setIntHeader(name,value);
213 }
214
215 public void addDateHeader(String name, long date)
216 {
217 this._getHttpServletResponse().addDateHeader(name,date);
218 }
219
220 public void setHeader(String name, String value)
221 {
222 this._getHttpServletResponse().setHeader(name,value);
223 }
224
225 public void setStatus(int sc)
226 {
227 this._getHttpServletResponse().setStatus(sc);
228 }
229
230 public void setStatus(int sc, String sm)
231 {
232 this._getHttpServletResponse().setStatus(sc,sm);
233 }
234
235 public void addIntHeader(String name, int value)
236 {
237 this._getHttpServletResponse().addIntHeader(name,value);
238 }
239
240 public void setContentLength(int len)
241 {
242 this._getHttpServletResponse().setContentLength(len);
243 }
244
245 public String encodeUrl(String url)
246 {
247 return this.encodeURL(url);
248 }
249
250 public void setLocale(java.util.Locale loc)
251 {
252 this._getHttpServletResponse().setLocale(loc);
253 }
254
255 public ServletOutputStream getOutputStream() throws IllegalStateException, IOException {
256 if (usingWriter)
257 {
258 throw new IllegalStateException("getPortletOutputStream can't be used after getWriter was invoked");
259 }
260
261 if (wrappedWriter == null)
262 {
263 wrappedWriter = new PrintWriterServletOutputStream(_getHttpServletResponse().getWriter());
264 }
265
266 usingStream = true;
267
268 return wrappedWriter;
269 }
270
271 public PrintWriter getWriter() throws UnsupportedEncodingException, IllegalStateException, IOException {
272 if (usingStream)
273 {
274 throw new IllegalStateException("getWriter can't be used after getOutputStream was invoked");
275 }
276
277 usingWriter = true;
278
279 return _getHttpServletResponse().getWriter();
280 }
281
282
283 public PortletWindow getInternalPortletWindow()
284 {
285 return portletWindow;
286 }
287
288
289
290 HttpServletRequest getHttpDServletRequest()
291 {
292 return webModuleServletRequest;
293 }
294
295 public void setIncluded(boolean included)
296 {
297 this.included = included;
298 }
299
300 public boolean isIncluded()
301 {
302 return included;
303 }
304 }