View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.chain.web.portlet;
18  
19  
20  import java.util.Collections;
21  import java.util.Map;
22  import javax.portlet.PortletContext;
23  import javax.portlet.PortletRequest;
24  import javax.portlet.PortletResponse;
25  import org.apache.commons.chain.web.WebContext;
26  
27  
28  /**
29   * <p>Concrete implementation of {@link WebContext} suitable for use in
30   * portlets.  The abstract methods are mapped to the appropriate
31   * collections of the underlying portlet context, request, and response
32   * instances that are passed to the constructor (or the initialize method).</p>
33   *
34   * @author Craig R. McClanahan
35   * @version $Revision: 480477 $ $Date: 2006-11-29 08:34:52 +0000 (Wed, 29 Nov 2006) $
36   */
37  
38  public class PortletWebContext extends WebContext {
39  
40  
41      // ------------------------------------------------------------ Constructors
42  
43  
44      /**
45       * <p>Construct an uninitialized {@link PortletWebContext} instance.</p>
46       */
47      public PortletWebContext() {
48      }
49  
50  
51      /**
52       * <p>Construct a {@link PortletWebContext} instance that is initialized
53       * with the specified Portlet API objects.</p>
54       *
55       * @param context The <code>PortletContext</code> for this web application
56       * @param request The <code>PortletRequest</code> for this request
57       * @param response The <code>PortletResponse</code> for this request
58       */
59      public PortletWebContext(PortletContext context,
60                               PortletRequest request,
61                               PortletResponse response) {
62  
63          initialize(context, request, response);
64  
65      }
66  
67  
68      // ------------------------------------------------------ Instance Variables
69  
70  
71      /**
72       * <p>The lazily instantiated <code>Map</code> of application scope
73       * attributes.</p>
74       */
75      private Map applicationScope = null;
76  
77  
78      /**
79       * <p>The <code>PortletContext</code> for this web application.</p>
80       */
81      protected PortletContext context = null;
82  
83  
84      /**
85       * <p>The lazily instantiated <code>Map</code> of header name-value
86       * combinations (immutable).</p>
87       */
88      private Map header = null;
89  
90  
91      /**
92       * <p>The lazily instantitated <code>Map</code> of header name-values
93       * combinations (immutable).</p>
94       */
95      private Map headerValues = null;
96  
97  
98      /**
99       * <p>The lazily instantiated <code>Map</code> of context initialization
100      * parameters.</p>
101      */
102     private Map initParam = null;
103 
104 
105     /**
106      * <p>The lazily instantiated <code>Map</code> of request
107      * parameter name-value.</p>
108      */
109     private Map param = null;
110 
111 
112     /**
113      * <p>The lazily instantiated <code>Map</code> of request
114      * parameter name-values.</p>
115      */
116     private Map paramValues = null;
117 
118 
119     /**
120      * <p>The <code>PortletRequest</code> for this request.</p>
121      */
122     protected PortletRequest request = null;
123 
124 
125     /**
126      * <p>The lazily instantiated <code>Map</code> of request scope
127      * attributes.</p>
128      */
129     private Map requestScope = null;
130 
131 
132     /**
133      * <p>The <code>PortletResponse</code> for this request.</p>
134      */
135     protected PortletResponse response = null;
136 
137 
138     /**
139      * <p>The lazily instantiated <code>Map</code> of session scope
140      * attributes.</p>
141      */
142     private Map sessionScope = null;
143 
144 
145     // ---------------------------------------------------------- Public Methods
146 
147 
148     /**
149      * <p>Return the {@link PortletContext} for this context.</p>
150      *
151      * @return The <code>PortletContext</code> for this request
152      */
153     public PortletContext getContext() {
154 
155     return (this.context);
156 
157     }
158 
159 
160     /**
161      * <p>Return the {@link PortletRequest} for this context.</p>
162      *
163      * @return The <code>PortletRequest</code> for this context.
164      */
165     public PortletRequest getRequest() {
166 
167     return (this.request);
168 
169     }
170 
171 
172     /**
173      * <p>Return the {@link PortletResponse} for this context.</p>
174      *
175      * @return The <code>PortletResponse</code> for this context.
176      */
177     public PortletResponse getResponse() {
178 
179     return (this.response);
180 
181     }
182 
183 
184     /**
185      * <p>Initialize (or reinitialize) this {@link PortletWebContext} instance
186      * for the specified Portlet API objects.</p>
187      *
188      * @param context The <code>PortletContext</code> for this web application
189      * @param request The <code>PortletRequest</code> for this request
190      * @param response The <code>PortletResponse</code> for this request
191      */
192     public void initialize(PortletContext context,
193                            PortletRequest request,
194                            PortletResponse response) {
195 
196         // Save the specified Portlet API object references
197         this.context = context;
198         this.request = request;
199         this.response = response;
200 
201         // Perform other setup as needed
202 
203     }
204 
205 
206     /**
207      * <p>Release references to allocated resources acquired in
208      * <code>initialize()</code> of via subsequent processing.  After this
209      * method is called, subsequent calls to any other method than
210      * <code>initialize()</code> will return undefined results.</p>
211      */
212     public void release() {
213 
214         // Release references to allocated collections
215         applicationScope = null;
216         header = null;
217         headerValues = null;
218         initParam = null;
219         param = null;
220         paramValues = null;
221         requestScope = null;
222         sessionScope = null;
223 
224         // Release references to Portlet API objects
225         context = null;
226         request = null;
227         response = null;
228 
229     }
230 
231 
232 
233     // ------------------------------------------------------ WebContext Methods
234 
235 
236     /**
237      * See the {@link WebContext}'s Javadoc.
238      *
239      * @return Application scope Map.
240      */
241     public Map getApplicationScope() {
242 
243         if ((applicationScope == null) && (context != null)) {
244             applicationScope = new PortletApplicationScopeMap(context);
245         }
246         return (applicationScope);
247 
248     }
249 
250 
251     /**
252      * See the {@link WebContext}'s Javadoc.
253      *
254      * @return Header values Map.
255      */
256     public Map getHeader() {
257 
258         if ((header == null) && (request != null)) {
259         //            header = new PortletHeaderMap(request);
260         header = Collections.EMPTY_MAP;
261         }
262         return (header);
263 
264     }
265 
266 
267     /**
268      * See the {@link WebContext}'s Javadoc.
269      *
270      * @return Header values Map.
271      */
272     public Map getHeaderValues() {
273 
274         if ((headerValues == null) && (request != null)) {
275         //            headerValues = new PortletHeaderValuesMap(request);
276         headerValues = Collections.EMPTY_MAP;
277         }
278         return (headerValues);
279 
280     }
281 
282 
283     /**
284      * See the {@link WebContext}'s Javadoc.
285      *
286      * @return Initialization parameter Map.
287      */
288     public Map getInitParam() {
289 
290         if ((initParam == null) && (context != null)) {
291             initParam = new PortletInitParamMap(context);
292         }
293         return (initParam);
294 
295     }
296 
297 
298     /**
299      * See the {@link WebContext}'s Javadoc.
300      *
301      * @return Request parameter Map.
302      */
303     public Map getParam() {
304 
305         if ((param == null) && (request != null)) {
306             param = new PortletParamMap(request);
307         }
308         return (param);
309 
310     }
311 
312 
313     /**
314      * See the {@link WebContext}'s Javadoc.
315      *
316      * @return Request parameter Map.
317      */
318     public Map getParamValues() {
319 
320         if ((paramValues == null) && (request != null)) {
321             paramValues = new PortletParamValuesMap(request);
322         }
323         return (paramValues);
324 
325     }
326 
327 
328     /**
329      * Returns an empty Map - portlets don't support Cookies.
330      *
331      * @return An empty Map.
332      * @since Chain 1.1
333      */
334     public Map getCookies() {
335 
336         return Collections.EMPTY_MAP;
337 
338     }
339 
340 
341     /**
342      * See the {@link WebContext}'s Javadoc.
343      *
344      * @return Request scope Map.
345      */
346     public Map getRequestScope() {
347 
348         if ((requestScope == null) && (request != null)) {
349             requestScope = new PortletRequestScopeMap(request);
350         }
351         return (requestScope);
352 
353     }
354 
355 
356     /**
357      * See the {@link WebContext}'s Javadoc.
358      *
359      * @return Session scope Map.
360      */
361     public Map getSessionScope() {
362 
363         if ((sessionScope == null) && (request != null)) {
364             sessionScope =
365             new PortletSessionScopeMap(request);
366         }
367         return (sessionScope);
368 
369     }
370 
371 
372 
373 }