KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > infoglue > deliver > portal > PortletWindowIGImpl


1 /*
2  * ===============================================================================
3  *
4  * Part of the InfoGlue Content Management Platform (www.infoglue.org)
5  *
6  * ===============================================================================
7  *
8  * Copyright (C)
9  *
10  * This program is free software; you can redistribute it and/or modify it under
11  * the terms of the GNU General Public License version 2, as published by the
12  * Free Software Foundation. See the file LICENSE.html for more information.
13  *
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17  * details.
18  *
19  * You should have received a copy of the GNU General Public License along with
20  * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
21  * Place, Suite 330 / Boston, MA 02111-1307 / USA.
22  *
23  * ===============================================================================
24  */

25 package org.infoglue.deliver.portal;
26
27 import java.io.PrintWriter JavaDoc;
28 import java.io.StringWriter JavaDoc;
29
30 import javax.portlet.PortletException;
31 import javax.servlet.http.HttpServletRequest JavaDoc;
32 import javax.servlet.http.HttpServletResponse JavaDoc;
33
34 import org.apache.commons.logging.Log;
35 import org.apache.commons.logging.LogFactory;
36 import org.apache.pluto.PortletContainer;
37 import org.apache.pluto.PortletContainerException;
38 import org.apache.pluto.om.window.PortletWindow;
39 import org.apache.pluto.portalImpl.core.PortletContainerFactory;
40 import org.apache.pluto.portalImpl.servlet.ServletObjectAccess;
41 import org.apache.pluto.portalImpl.servlet.ServletResponseImpl;
42 import org.infoglue.cms.security.InfoGluePrincipal;
43
44 class PortletWindowIGImpl implements PortletWindowIG
45 {
46     private final Log log = LogFactory.getLog(PortletWindowIGImpl.class);
47
48     private HttpServletResponse JavaDoc response;
49
50     private HttpServletRequest JavaDoc wrappedRequest;
51
52     private PortletWindow renderWindow;
53
54     private PortletContainer portletContainer;
55
56     PortletWindowIGImpl(PortletWindow window, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) throws PortletException, PortletContainerException
57     {
58         this.response = response;
59         this.renderWindow = window;
60
61         // Locate portlet container
62
portletContainer = PortletContainerFactory.getPortletContainer();
63         if (portletContainer == null)
64         {
65             log.error("Portlet container not found!");
66         }
67
68         // -- Ask portlet container to load portlet
69
wrappedRequest = ServletObjectAccess.getServletRequest(request, renderWindow);
70
71         log.debug("Loading portlet: " + renderWindow);
72         portletContainer.portletLoad(renderWindow, wrappedRequest, response);
73         log.debug("Loading OK!");
74     }
75
76     /*
77      * (non-Javadoc)
78      *
79      * @see org.infoglue.cms.portal.PortletWindowIG#render()
80      */

81     
82     public String JavaDoc render() throws PortalException
83     {
84         log.debug("render(" + renderWindow.getPortletEntity().getId() + ", " + renderWindow.getId() + ") invoked");
85         
86         try
87         {
88             // Create a buffered response to "catch" output from rendering the
89
// portlet
90
StringWriter JavaDoc sw = new StringWriter JavaDoc();
91             PrintWriter JavaDoc pw = new PrintWriter JavaDoc(sw);
92             ServletResponseImpl wrappedResponse = (ServletResponseImpl) ServletObjectAccess.getStoredServletResponse(response, pw);
93             
94             InfoGluePrincipal infogluePrincipal = (InfoGluePrincipal)wrappedRequest.getSession().getAttribute("infogluePrincipal");
95             if(infogluePrincipal != null)
96             {
97                 wrappedRequest.setAttribute("infogluePrincipal", infogluePrincipal);
98                 wrappedRequest.setAttribute("infoglueRemoteUser", infogluePrincipal.getName());
99             }
100             
101             // -- Ask portlet container to render the portlet (into buffer)
102
portletContainer.renderPortlet(renderWindow, wrappedRequest, wrappedResponse);
103             log.debug("Rendering OK!");
104             
105             // Return the contents of rendering
106
String JavaDoc contents = sw.toString();
107             if (contents.length() == 0)
108             {
109                 log.warn("Rendering generated an empty string");
110             }
111             
112             log.debug("render(" + renderWindow.getPortletEntity().getId() + ", " + renderWindow.getId() + ") done");
113
114             return contents;
115         }
116         catch (Throwable JavaDoc t)
117         {
118             t.printStackTrace();
119             throw new PortalException(t);
120         }
121     }
122
123     /*
124      * (non-Javadoc)
125      *
126      * @see org.infoglue.cms.portal.PortletWindowIG#setParameter(java.lang.String,
127      * java.lang.Object)
128      */

129     
130     public void setAttribute(String JavaDoc key, Object JavaDoc value)
131     {
132         wrappedRequest.setAttribute(key, value);
133     }
134
135     /*
136      * (non-Javadoc)
137      *
138      * @see org.infoglue.cms.portal.PortletWindowIG#setParameter(java.lang.String,
139      * java.lang.String[])
140      */

141     
142     public void setParameter(String JavaDoc key, String JavaDoc value)
143     {
144         if (wrappedRequest.getParameter(key) == null || wrappedRequest.getParameter(key).equalsIgnoreCase(""))
145             wrappedRequest.getParameterMap().put(key, new String JavaDoc[] { value });
146     }
147
148 }
Popular Tags