/* * =============================================================================== * * Part of the InfoGlue Content Management Platform (www.infoglue.org) * * =============================================================================== * * Copyright (C) * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2, as published by the * Free Software Foundation. See the file LICENSE.html for more information. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc. / 59 Temple * Place, Suite 330 / Boston, MA 02111-1307 / USA. * * =============================================================================== */ package org.infoglue.deliver.portal; import java.io.PrintWriter; import java.io.StringWriter; import javax.portlet.PortletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.pluto.PortletContainer; import org.apache.pluto.PortletContainerException; import org.apache.pluto.om.window.PortletWindow; import org.apache.pluto.portalImpl.core.PortletContainerFactory; import org.apache.pluto.portalImpl.servlet.ServletObjectAccess; import org.apache.pluto.portalImpl.servlet.ServletResponseImpl; import org.infoglue.cms.security.InfoGluePrincipal; class PortletWindowIGImpl implements PortletWindowIG { private final Log log = LogFactory.getLog(PortletWindowIGImpl.class); private HttpServletResponse response; private HttpServletRequest wrappedRequest; private PortletWindow renderWindow; private PortletContainer portletContainer; PortletWindowIGImpl(PortletWindow window, HttpServletRequest request, HttpServletResponse response) throws PortletException, PortletContainerException { this.response = response; this.renderWindow = window; // Locate portlet container portletContainer = PortletContainerFactory.getPortletContainer(); if (portletContainer == null) { log.error("Portlet container not found!"); } // -- Ask portlet container to load portlet wrappedRequest = ServletObjectAccess.getServletRequest(request, renderWindow); log.debug("Loading portlet: " + renderWindow); portletContainer.portletLoad(renderWindow, wrappedRequest, response); log.debug("Loading OK!"); } /* * (non-Javadoc) * * @see org.infoglue.cms.portal.PortletWindowIG#render() */ public String render() throws PortalException { log.debug("render(" + renderWindow.getPortletEntity().getId() + ", " + renderWindow.getId() + ") invoked"); try { // Create a buffered response to "catch" output from rendering the // portlet StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); ServletResponseImpl wrappedResponse = (ServletResponseImpl) ServletObjectAccess.getStoredServletResponse(response, pw); InfoGluePrincipal infogluePrincipal = (InfoGluePrincipal)wrappedRequest.getSession().getAttribute("infogluePrincipal"); if(infogluePrincipal != null) { wrappedRequest.setAttribute("infogluePrincipal", infogluePrincipal); wrappedRequest.setAttribute("infoglueRemoteUser", infogluePrincipal.getName()); wrappedRequest.setAttribute("cmsUserName", infogluePrincipal.getName()); } // -- Ask portlet container to render the portlet (into buffer) portletContainer.renderPortlet(renderWindow, wrappedRequest, wrappedResponse); log.debug("Rendering OK!"); // Return the contents of rendering String contents = sw.toString(); if (contents.length() == 0) { log.warn("Rendering generated an empty string"); } log.debug("render(" + renderWindow.getPortletEntity().getId() + ", " + renderWindow.getId() + ") done"); return contents; } catch (Throwable t) { t.printStackTrace(); throw new PortalException(t); } } /* * (non-Javadoc) * * @see org.infoglue.cms.portal.PortletWindowIG#setParameter(java.lang.String, * java.lang.Object) */ public void setAttribute(String key, Object value) { wrappedRequest.setAttribute(key, value); } /* * (non-Javadoc) * * @see org.infoglue.cms.portal.PortletWindowIG#setParameter(java.lang.String, * java.lang.String[]) */ public void setParameter(String key, String value) { if (wrappedRequest.getParameter(key) == null || wrappedRequest.getParameter(key).equalsIgnoreCase("")) wrappedRequest.getParameterMap().put(key, new String[] { value }); } }