1 16 19 20 package org.apache.pluto.core; 21 22 import java.io.IOException ; 23 import java.util.Enumeration ; 24 25 import javax.portlet.ActionRequest; 26 import javax.portlet.ActionResponse; 27 import javax.portlet.Portlet; 28 import javax.portlet.PortletConfig; 29 import javax.portlet.PortletContext; 30 import javax.portlet.PortletException; 31 import javax.portlet.RenderRequest; 32 import javax.portlet.RenderResponse; 33 import javax.servlet.ServletConfig ; 34 import javax.servlet.ServletContext ; 35 import javax.servlet.ServletException ; 36 import javax.servlet.ServletRequest ; 37 import javax.servlet.ServletResponse ; 38 import javax.servlet.http.HttpServlet ; 39 import javax.servlet.http.HttpServletRequest ; 40 import javax.servlet.http.HttpServletResponse ; 41 42 import org.apache.pluto.factory.PortletObjectAccess; 43 import org.apache.pluto.om.ControllerObjectAccess; 44 import org.apache.pluto.om.portlet.PortletDefinition; 45 import org.apache.pluto.om.portlet.PortletDefinitionCtrl; 46 import org.apache.pluto.services.information.InformationProviderAccess; 47 48 public class PortletServlet extends HttpServlet 49 { 50 51 private boolean portletInitialized = false; 52 private Portlet portletClass = null; 53 54 private PortletContext portletContext; 55 private PortletConfig portletConfig; 56 57 public void init(ServletConfig config) throws ServletException 59 { 60 super.init(config); 61 portletInitialized = false; 62 63 String classString = config.getInitParameter("portlet-class"); 64 try 65 { 66 portletClass = (Portlet)Thread.currentThread().getContextClassLoader().loadClass(classString).newInstance(); 67 } 68 catch (ClassNotFoundException e) 69 { 70 throw new ServletException (e); 71 } 72 catch (IllegalAccessException e) 73 { 74 throw new ServletException (e); 75 } 76 catch (InstantiationException e) 77 { 78 throw new ServletException (e); 79 } 80 81 84 String portletGUID = config.getInitParameter("portlet-guid"); 86 PortletDefinition portletDefinition = 87 InformationProviderAccess.getStaticProvider().getPortletDefinition(org.apache.pluto.util.ObjectIDAccess.createObjectID(portletGUID)); 88 if (portletDefinition==null) 89 { 90 throw new ServletException ("portlet definition not found from GUID: " + portletGUID); 91 } 92 else 93 { 94 PortletDefinitionCtrl portletDefCtrl = (PortletDefinitionCtrl)ControllerObjectAccess.get(portletDefinition); 95 portletDefCtrl.setPortletClassLoader(Thread.currentThread().getContextClassLoader()); 96 } 97 98 portletContext = PortletObjectAccess.getPortletContext(config.getServletContext(), 99 portletDefinition.getPortletApplicationDefinition()); 100 portletConfig = PortletObjectAccess.getPortletConfig(config, 101 portletContext, 102 portletDefinition); 103 104 try 105 { 106 portletClass.init(portletConfig); 107 } 108 catch (PortletException e) 109 { 110 throw new ServletException (e); 111 } 112 113 portletInitialized = true; 114 115 } 116 117 public void init() throws ServletException 118 { 119 } 120 121 public final ServletConfig getServletConfig () 122 { 123 return super.getServletConfig(); 124 } 125 126 public final String getInitParameter(String name) 127 { 128 return getServletConfig().getInitParameter(name); 129 } 130 131 public final Enumeration getInitParameterNames() 132 { 133 return getServletConfig().getInitParameterNames(); 134 } 135 136 public ServletContext getServletContext() 137 { 138 return getServletConfig().getServletContext(); 139 } 140 141 protected long getLastModified(HttpServletRequest req) 142 { 143 return -1; 144 } 145 146 public String getServletInfo() 147 { 148 return ""; 149 } 150 151 public final void service(ServletRequest request, ServletResponse response) throws ServletException , IOException 152 { 153 super.service(request,response); 154 } 155 156 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException 157 { 158 dispatch(req,resp); 159 } 160 161 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException 162 { 163 dispatch(req,resp); 164 } 165 166 protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException 167 { 168 dispatch(req,resp); 169 } 170 171 protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException 172 { 173 super.doDelete(req,resp); 174 } 175 176 protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException 177 { 178 super.doOptions(req,resp); 179 } 180 181 protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException , IOException 182 { 183 super.doTrace(req,resp); 184 } 185 186 public void destroy() 187 { 188 if (portletClass != null) 189 { 190 portletClass.destroy(); 191 } 192 super.destroy(); 193 } 194 196 private void dispatch(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException 198 { 199 if (!portletInitialized) 200 { 201 throw new ServletException ("this portlet uses the <load-on-startup> flag. You have to turn it off"); 202 } 203 try 204 { 205 request.setAttribute(org.apache.pluto.Constants.PORTLET_CONFIG, portletConfig); 207 208 Integer method_id = (Integer )request.getAttribute(org.apache.pluto.Constants.METHOD_ID); 209 if (method_id == org.apache.pluto.Constants.METHOD_RENDER) 210 { 211 RenderRequest renderRequest = (RenderRequest)request.getAttribute(org.apache.pluto.Constants.PORTLET_REQUEST); 212 RenderResponse renderResponse = (RenderResponse)request.getAttribute(org.apache.pluto.Constants.PORTLET_RESPONSE); 213 214 prepareRenderRequest(renderRequest, request); 216 prepareRenderResponse(renderResponse, request, response); 217 218 portletClass.render(renderRequest,renderResponse); 219 } 220 else if (method_id==org.apache.pluto.Constants.METHOD_ACTION) 221 { 222 ActionRequest actionRequest = (ActionRequest)request.getAttribute(org.apache.pluto.Constants.PORTLET_REQUEST); 223 ActionResponse actionResponse = (ActionResponse)request.getAttribute(org.apache.pluto.Constants.PORTLET_RESPONSE); 224 225 prepareActionRequest(actionRequest, request); 227 prepareActionResponse(actionResponse, request, response); 228 229 portletClass.processAction(actionRequest,actionResponse); 230 } 231 else if (method_id == org.apache.pluto.Constants.METHOD_NOOP) 232 { 233 } 235 236 } 237 catch (javax.portlet.UnavailableException e) 238 { 239 244 245 try 247 { 248 portletClass.destroy(); 249 } 250 catch (Throwable t) 251 { 252 } 254 255 throw new javax.servlet.UnavailableException (e.getMessage()); 257 } 258 catch (PortletException e) 259 { 260 throw new ServletException (e); 261 } 262 finally 263 { 264 request.removeAttribute(org.apache.pluto.Constants.PORTLET_CONFIG); 265 } 266 267 } 268 269 private void prepareActionRequest(ActionRequest portletRequest, 270 HttpServletRequest servletRequest) 271 { 272 InternalPortletRequest internalPortletRequest = 273 CoreUtils.getInternalRequest(portletRequest); 274 275 internalPortletRequest.lateInit(servletRequest); 276 } 277 278 private void prepareRenderRequest(RenderRequest portletRequest, 279 HttpServletRequest servletRequest) 280 { 281 InternalPortletRequest internalPortletRequest = 282 CoreUtils.getInternalRequest(portletRequest); 283 284 internalPortletRequest.lateInit(servletRequest); 285 } 286 287 private void prepareRenderResponse(RenderResponse portletResponse, 288 HttpServletRequest servletRequest, 289 HttpServletResponse servletResponse) 290 { 291 InternalPortletResponse internalPortletResponse = 292 CoreUtils.getInternalResponse(portletResponse); 293 294 internalPortletResponse.lateInit(servletRequest, servletResponse); 295 } 296 297 private void prepareActionResponse(ActionResponse portletResponse, 298 HttpServletRequest servletRequest, 299 HttpServletResponse servletResponse) 300 { 301 InternalPortletResponse internalPortletResponse = 302 CoreUtils.getInternalResponse(portletResponse); 303 304 internalPortletResponse.lateInit(servletRequest, servletResponse); 305 } 306 } 308 | Popular Tags |