1 25 package org.infoglue.deliver.portal; 26 27 import java.io.PrintWriter ; 28 import java.io.StringWriter ; 29 30 import javax.portlet.PortletException; 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 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 response; 49 50 private HttpServletRequest wrappedRequest; 51 52 private PortletWindow renderWindow; 53 54 private PortletContainer portletContainer; 55 56 PortletWindowIGImpl(PortletWindow window, HttpServletRequest request, HttpServletResponse response) throws PortletException, PortletContainerException 57 { 58 this.response = response; 59 this.renderWindow = window; 60 61 portletContainer = PortletContainerFactory.getPortletContainer(); 63 if (portletContainer == null) 64 { 65 log.error("Portlet container not found!"); 66 } 67 68 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 81 82 public String render() throws PortalException 83 { 84 log.debug("render(" + renderWindow.getPortletEntity().getId() + ", " + renderWindow.getId() + ") invoked"); 85 86 try 87 { 88 StringWriter sw = new StringWriter (); 91 PrintWriter pw = new PrintWriter (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 portletContainer.renderPortlet(renderWindow, wrappedRequest, wrappedResponse); 103 log.debug("Rendering OK!"); 104 105 String 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 t) 117 { 118 t.printStackTrace(); 119 throw new PortalException(t); 120 } 121 } 122 123 129 130 public void setAttribute(String key, Object value) 131 { 132 wrappedRequest.setAttribute(key, value); 133 } 134 135 141 142 public void setParameter(String key, String value) 143 { 144 if (wrappedRequest.getParameter(key) == null || wrappedRequest.getParameter(key).equalsIgnoreCase("")) 145 wrappedRequest.getParameterMap().put(key, new String [] { value }); 146 } 147 148 } | Popular Tags |