KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > icesoft > faces > webapp > http > portlet > MainPortlet


1 package com.icesoft.faces.webapp.http.portlet;
2
3 import org.apache.commons.logging.Log;
4 import org.apache.commons.logging.LogFactory;
5
6 import javax.portlet.ActionRequest;
7 import javax.portlet.ActionResponse;
8 import javax.portlet.Portlet;
9 import javax.portlet.PortletConfig;
10 import javax.portlet.PortletContext;
11 import javax.portlet.PortletException;
12 import javax.portlet.PortletMode;
13 import javax.portlet.PortletRequest;
14 import javax.portlet.PortletRequestDispatcher;
15 import javax.portlet.PortletSession;
16 import javax.portlet.RenderRequest;
17 import javax.portlet.RenderResponse;
18 import java.io.IOException JavaDoc;
19 import java.util.Enumeration JavaDoc;
20
21 import com.icesoft.jasper.Constants;
22
23 /**
24  * The MainPortlet is the entry point for ICEfaces-based portlets. The goal is
25  * we set up the environment as required and then dispatch the request to the
26  * MainServlet and let the framework do all the normal processing. It's
27  * basically only the initial page load that we care about. The rest of the
28  * processing is handled between the ICEfaces JavaScript bridge and the
29  * MainServlet via AJAX mechanisms. The main activities we do on the first page
30  * load are:
31  * <p/>
32  * - Get the initial view from the portlet config and set it as a request
33  * attribute. We use the key "javax.servlet.include.request_uri" as portlets
34  * are fragrments and so to the framework, they are treated much like includes.
35  * <p/>
36  * - Get a request dispatcher for the view (typically an .iface resource) and
37  * call the include() method of the dispatcher. By checking for the include
38  * attribute on the request, the framework should process it correctly.
39  */

40 public class MainPortlet implements Portlet {
41
42     private static Log log = LogFactory.getLog(MainPortlet.class);
43
44     private static final String JavaDoc PORTLET_MARKER = "portlet";
45     private PortletConfig portletConfig;
46
47     public void init(PortletConfig portletConfig)
48             throws PortletException {
49
50         this.portletConfig = portletConfig;
51
52         if (log.isTraceEnabled()) {
53             log.trace("portlet config: " + portletConfig);
54         }
55     }
56
57     public void destroy() {
58         if (log.isTraceEnabled()) {
59             log.trace("portlet config: " + portletConfig);
60         }
61     }
62
63     public void processAction(
64             ActionRequest actionRequest, ActionResponse actionResponse)
65             throws IOException JavaDoc, PortletException {
66
67         if (log.isTraceEnabled()) {
68             dumpMaps(actionRequest, "portlet action request");
69         }
70
71     }
72
73     public void render(
74             RenderRequest renderRequest, RenderResponse renderResponse)
75             throws IOException JavaDoc, PortletException {
76
77         //Tracing for development purposes to see what's in all the different
78
//request maps.
79
if (log.isTraceEnabled()) {
80             dumpMaps(renderRequest, "portlet render request");
81         }
82
83         //Portlets are provided in a namespace which is used to uniquely
84
//identify aspects (e.g. JavaScript, JSF component IDs) of the portlet.
85
//JSF uses the ExternalContext.encodeNamespace() method to do this.
86
//Because we are dispatching, we have to ensure that we make this
87
//setting available to the ICEfaces framework.
88
addAttribute(renderRequest,Constants.NAMESPACE_KEY,renderResponse.getNamespace());
89
90         //General marker attribute that shows that this request originated from
91
//a portlet environment.
92
addAttribute(renderRequest,Constants.PORTLET_KEY, PORTLET_MARKER);
93
94         //Get the inital view that is configured in the portlet.xml file
95
PortletMode portletMode = portletMode = renderRequest.getPortletMode();
96         String JavaDoc viewId = null;
97         if (portletMode == PortletMode.VIEW) {
98             viewId = portletConfig.getInitParameter(Constants.VIEW_KEY);
99             if(viewId == null){
100                 if( log.isErrorEnabled() ){
101                     log.error(Constants.VIEW_KEY + " is not properly configured");
102                 }
103                 throw new PortletException(Constants.VIEW_KEY + " is not properly configured");
104             }
105         } else if (portletMode == PortletMode.EDIT) {
106             viewId = portletConfig.getInitParameter(Constants.EDIT_KEY);
107             if(viewId == null){
108                 if( log.isErrorEnabled() ){
109                     log.error(Constants.EDIT_KEY + " is not properly configured");
110                 }
111                 throw new PortletException(Constants.EDIT_KEY + " is not properly configured");
112             }
113         } else if (portletMode == PortletMode.HELP) {
114             viewId = portletConfig.getInitParameter(Constants.HELP_KEY);
115             if(viewId == null){
116                 if( log.isErrorEnabled() ){
117                     log.error(Constants.HELP_KEY + " is not properly configured");
118                 }
119                 throw new PortletException(Constants.HELP_KEY + " is not properly configured");
120             }
121         }
122
123         //We request a dispatcher for the actual resource which is typically
124
//an .iface. This maps to the proper handler, typically the ICEfaces
125
//MainServlet which takes over the processing.
126
PortletContext ctxt = portletConfig.getPortletContext();
127         PortletRequestDispatcher disp = ctxt.getRequestDispatcher(viewId);
128
129         if(disp == null){
130             throw new PortletException("could not find dispatcher for " + viewId);
131         }
132
133         //IMPORTANT: See the JavaDoc for this class
134
PortletArtifactHack hack = new PortletArtifactHack(portletConfig,
135                                                            renderRequest);
136         addAttribute(renderRequest,PortletArtifactHack.PORTLET_HACK_KEY, hack);
137
138         // Jack: This is a temporary fix for JBoss Portal. We should come up
139
// with a better fix in our framework that makes sure the
140
// Content-Type is set either before or when the
141
// ServletExternalContext.getWriter(String encoding) method is
142
// invoked.
143
renderResponse.setContentType("text/html");
144         disp.include(renderRequest, renderResponse);
145
146     }
147
148
149     private static void addAttribute(RenderRequest req, String JavaDoc key, Object JavaDoc value){
150         if (key != null && value != null) {
151             req.setAttribute(key, value);
152         }
153         if (log.isTraceEnabled()) {
154             log.trace( key + ": " + value);
155         }
156     }
157
158
159     //For some debugging help, we dump out the contents of various
160
//parameter, attribute, etc maps related to requests, sessions, etc.
161
private void dumpMaps(PortletRequest req, String JavaDoc header) {
162
163         log.trace(header + "\n-------------------------------");
164
165         Enumeration JavaDoc keys;
166         String JavaDoc key;
167         StringBuffer JavaDoc buff;
168
169         keys = portletConfig.getInitParameterNames();
170         buff = new StringBuffer JavaDoc("portlet config init parameters:\n");
171         while (keys.hasMoreElements()) {
172             key = (String JavaDoc) keys.nextElement();
173             buff.append("\t");
174             buff.append(key);
175             buff.append(" - ");
176             buff.append(portletConfig.getInitParameter(key));
177             buff.append("\n");
178         }
179         log.trace(buff.toString());
180
181         PortletContext portletContext = portletConfig.getPortletContext();
182         keys = portletContext.getAttributeNames();
183         buff = new StringBuffer JavaDoc("portlet context attributes:\n");
184         while (keys.hasMoreElements()) {
185             key = (String JavaDoc) keys.nextElement();
186             buff.append("\t");
187             buff.append(key);
188             buff.append(" - ");
189             buff.append(portletContext.getAttribute(key));
190             buff.append("\n");
191         }
192         log.trace(buff.toString());
193
194         keys = portletContext.getInitParameterNames();
195         buff = new StringBuffer JavaDoc("portlet context init parameters:\n");
196         while (keys.hasMoreElements()) {
197             key = (String JavaDoc) keys.nextElement();
198             buff.append("\t");
199             buff.append(key);
200             buff.append(" - ");
201             buff.append(portletContext.getInitParameter(key));
202             buff.append("\n");
203         }
204         log.trace(buff.toString());
205
206         PortletSession session = req.getPortletSession();
207         keys = session.getAttributeNames();
208         buff = new StringBuffer JavaDoc("portlet session attributes:\n");
209         while (keys.hasMoreElements()) {
210             key = (String JavaDoc) keys.nextElement();
211             buff.append("\t");
212             buff.append(key);
213             buff.append(" - ");
214             buff.append(session.getAttribute(key));
215             buff.append("\n");
216         }
217         log.trace(buff.toString());
218
219         keys = req.getAttributeNames();
220         buff = new StringBuffer JavaDoc("request attributes:\n");
221         while (keys.hasMoreElements()) {
222             key = (String JavaDoc) keys.nextElement();
223             buff.append("\t");
224             buff.append(key);
225             buff.append(" - ");
226             buff.append(req.getAttribute(key));
227             buff.append("\n");
228         }
229         log.trace(buff.toString());
230
231         keys = req.getParameterNames();
232         buff = new StringBuffer JavaDoc("request parameters:\n");
233         while (keys.hasMoreElements()) {
234             key = (String JavaDoc) keys.nextElement();
235             buff.append("\t");
236             buff.append(key);
237             buff.append(" - ");
238             buff.append(req.getParameter(key));
239             buff.append("\n");
240         }
241         log.trace(buff.toString());
242
243         keys = req.getPropertyNames();
244         buff = new StringBuffer JavaDoc("request properties:\n");
245         while (keys.hasMoreElements()) {
246             key = (String JavaDoc) keys.nextElement();
247             buff.append("\t");
248             buff.append(key);
249             buff.append(" - ");
250             buff.append(req.getProperty(key));
251             buff.append("\n");
252         }
253         log.trace(buff.toString());
254
255     }
256 }
257
Popular Tags