protected ActionForward processLayout( ActionMapping mapping, HttpServletRequest request, HttpServletResponse response, long plid) throws Exception { HttpSession session = request.getSession(); ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); try { Layout layout = themeDisplay.getLayout(); boolean resetLayout = ParamUtil.getBoolean(request, "p_l_reset", PropsValues.LAYOUT_DEFAULT_P_L_RESET); String portletId = ParamUtil.getString(request, "p_p_id"); Layout previousLayout = (Layout) session.getAttribute(WebKeys.PREVIOUS_LAYOUT); if ((previousLayout == null) || (layout.getPlid() != previousLayout.getPlid())) { session.setAttribute(WebKeys.PREVIOUS_LAYOUT, layout); if (themeDisplay.isSignedIn() && PropsValues.AUDIT_MESSAGE_COM_LIFERAY_PORTAL_MODEL_LAYOUT_VIEW && MessageBusUtil.hasMessageListener(DestinationNames.AUDIT)) { User user = themeDisplay.getUser(); AuditMessage auditMessage = new AuditMessage( ActionKeys.VIEW, user.getCompanyId(), user.getUserId(), user.getFullName(), Layout.class.getName(), String.valueOf(layout.getPlid())); AuditRouterUtil.route(auditMessage); } } if (!PropsValues.TCK_URL && resetLayout && (Validator.isNull(portletId) || ((previousLayout != null) && (layout.getPlid() != previousLayout.getPlid())))) { // Always clear render parameters on a layout url, but do not // clear on portlet urls invoked on the same layout RenderParametersPool.clear(request, plid); } if (themeDisplay.isLifecycleAction()) { Portlet portlet = processPortletRequest(request, response, PortletRequest.ACTION_PHASE); if (portlet != null) { ActionResponseImpl actionResponseImpl = (ActionResponseImpl) request.getAttribute(JavaConstants.JAVAX_PORTLET_RESPONSE); String redirectLocation = actionResponseImpl.getRedirectLocation(); if (Validator.isNotNull(redirectLocation)) { response.sendRedirect(redirectLocation); return null; } if (portlet.isActionURLRedirect()) { redirectActionURL(request, response, actionResponseImpl, portlet); return null; } } } else if (themeDisplay.isLifecycleRender()) { processPortletRequest(request, response, PortletRequest.RENDER_PHASE); } if (themeDisplay.isLifecycleResource()) { processPortletRequest(request, response, PortletRequest.RESOURCE_PHASE); return null; } else { if (response.isCommitted()) { return null; } if (layout != null) { // Include layout content before the page loads because // portlets on the page can set the page title and page // subtitle includeLayoutContent(request, response, themeDisplay, layout); if (themeDisplay.isStateExclusive()) { renderExclusive(request, response, themeDisplay); return null; } } return mapping.findForward("portal.layout"); } } catch (Exception e) { PortalUtil.sendError(e, request, response); return null; } finally { if (!ServerDetector.isResin()) { PortletRequest portletRequest = (PortletRequest) request.getAttribute(JavaConstants.JAVAX_PORTLET_REQUEST); if (portletRequest != null) { PortletRequestImpl portletRequestImpl = (PortletRequestImpl) portletRequest; portletRequestImpl.cleanUp(); } } } }
protected Portlet processPortletRequest( HttpServletRequest request, HttpServletResponse response, String lifecycle) throws Exception { HttpSession session = request.getSession(); long companyId = PortalUtil.getCompanyId(request); User user = PortalUtil.getUser(request); Layout layout = (Layout) request.getAttribute(WebKeys.LAYOUT); String portletId = ParamUtil.getString(request, "p_p_id"); if (Validator.isNull(portletId)) { return null; } Portlet portlet = PortletLocalServiceUtil.getPortletById(companyId, portletId); if (portlet == null) { return null; } ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY); themeDisplay.setScopeGroupId(PortalUtil.getScopeGroupId(request, portletId)); ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX); InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(portlet, servletContext); if (user != null) { InvokerPortletImpl.clearResponse( session, layout.getPrimaryKey(), portletId, LanguageUtil.getLanguageId(request)); } PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext); PortletContext portletContext = portletConfig.getPortletContext(); WindowState windowState = WindowStateFactory.getWindowState(ParamUtil.getString(request, "p_p_state")); if (layout.isTypeControlPanel() && ((windowState == null) || windowState.equals(WindowState.NORMAL) || (Validator.isNull(windowState.toString())))) { windowState = WindowState.MAXIMIZED; } PortletMode portletMode = PortletModeFactory.getPortletMode(ParamUtil.getString(request, "p_p_mode")); PortletPreferencesIds portletPreferencesIds = PortletPreferencesFactoryUtil.getPortletPreferencesIds(request, portletId); PortletPreferences portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(portletPreferencesIds); processPublicRenderParameters(request, layout, portlet); if (lifecycle.equals(PortletRequest.ACTION_PHASE)) { String contentType = request.getHeader(HttpHeaders.CONTENT_TYPE); if (_log.isDebugEnabled()) { _log.debug("Content type " + contentType); } UploadServletRequest uploadRequest = null; try { if ((contentType != null) && (contentType.startsWith(ContentTypes.MULTIPART_FORM_DATA))) { PortletConfigImpl invokerPortletConfigImpl = (PortletConfigImpl) invokerPortlet.getPortletConfig(); if (invokerPortlet.isStrutsPortlet() || ((invokerPortletConfigImpl != null) && (!invokerPortletConfigImpl.isWARFile()))) { uploadRequest = new UploadServletRequestImpl(request); request = uploadRequest; } } if (PropsValues.AUTH_TOKEN_CHECK_ENABLED && invokerPortlet.isCheckAuthToken()) { AuthTokenUtil.check(request); } ActionRequestImpl actionRequestImpl = ActionRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layout.getPlid()); ActionResponseImpl actionResponseImpl = ActionResponseFactory.create( actionRequestImpl, response, portletId, user, layout, windowState, portletMode); actionRequestImpl.defineObjects(portletConfig, actionResponseImpl); ServiceContext serviceContext = ServiceContextFactory.getInstance(actionRequestImpl); ServiceContextThreadLocal.pushServiceContext(serviceContext); invokerPortlet.processAction(actionRequestImpl, actionResponseImpl); actionResponseImpl.transferHeaders(response); RenderParametersPool.put( request, layout.getPlid(), portletId, actionResponseImpl.getRenderParameterMap()); List<LayoutTypePortlet> layoutTypePortlets = null; if (!actionResponseImpl.getEvents().isEmpty()) { if (PropsValues.PORTLET_EVENT_DISTRIBUTION_LAYOUT_SET) { layoutTypePortlets = getLayoutTypePortlets(layout.getGroupId(), layout.isPrivateLayout()); } else { if (layout.isTypePortlet()) { LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType(); layoutTypePortlets = new ArrayList<LayoutTypePortlet>(); layoutTypePortlets.add(layoutTypePortlet); } } processEvents(actionRequestImpl, actionResponseImpl, layoutTypePortlets); actionRequestImpl.defineObjects(portletConfig, actionResponseImpl); } } finally { if (uploadRequest != null) { uploadRequest.cleanUp(); } ServiceContextThreadLocal.popServiceContext(); } } else if (lifecycle.equals(PortletRequest.RENDER_PHASE) || lifecycle.equals(PortletRequest.RESOURCE_PHASE)) { PortalUtil.updateWindowState(portletId, user, layout, windowState, request); PortalUtil.updatePortletMode(portletId, user, layout, portletMode, request); } if (lifecycle.equals(PortletRequest.RESOURCE_PHASE)) { PortletDisplay portletDisplay = themeDisplay.getPortletDisplay(); String portletPrimaryKey = PortletPermissionUtil.getPrimaryKey(layout.getPlid(), portletId); portletDisplay.setId(portletId); portletDisplay.setRootPortletId(portlet.getRootPortletId()); portletDisplay.setInstanceId(portlet.getInstanceId()); portletDisplay.setResourcePK(portletPrimaryKey); portletDisplay.setPortletName(portletConfig.getPortletName()); portletDisplay.setNamespace(PortalUtil.getPortletNamespace(portletId)); ResourceRequestImpl resourceRequestImpl = ResourceRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layout.getPlid()); ResourceResponseImpl resourceResponseImpl = ResourceResponseFactory.create(resourceRequestImpl, response, portletId, companyId); resourceRequestImpl.defineObjects(portletConfig, resourceResponseImpl); try { ServiceContext serviceContext = ServiceContextFactory.getInstance(resourceRequestImpl); ServiceContextThreadLocal.pushServiceContext(serviceContext); invokerPortlet.serveResource(resourceRequestImpl, resourceResponseImpl); } finally { ServiceContextThreadLocal.popServiceContext(); } } return portlet; }
protected void processEvent( PortletRequestImpl portletRequestImpl, StateAwareResponseImpl stateAwareResponseImpl, List<LayoutTypePortlet> layoutTypePortlets, LayoutTypePortlet layoutTypePortlet, Portlet portlet, Event event) throws Exception { HttpServletRequest request = portletRequestImpl.getHttpServletRequest(); HttpServletResponse response = stateAwareResponseImpl.getHttpServletResponse(); HttpSession session = request.getSession(); String portletId = portlet.getPortletId(); ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX); InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(portlet, servletContext); PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext); PortletContext portletContext = portletConfig.getPortletContext(); WindowState windowState = null; if (layoutTypePortlet.hasStateMaxPortletId(portletId)) { windowState = WindowState.MAXIMIZED; } else if (layoutTypePortlet.hasStateMinPortletId(portletId)) { windowState = WindowState.MINIMIZED; } else { windowState = WindowState.NORMAL; } PortletMode portletMode = null; if (layoutTypePortlet.hasModeAboutPortletId(portletId)) { portletMode = LiferayPortletMode.ABOUT; } else if (layoutTypePortlet.hasModeConfigPortletId(portletId)) { portletMode = LiferayPortletMode.CONFIG; } else if (layoutTypePortlet.hasModeEditPortletId(portletId)) { portletMode = PortletMode.EDIT; } else if (layoutTypePortlet.hasModeEditDefaultsPortletId(portletId)) { portletMode = LiferayPortletMode.EDIT_DEFAULTS; } else if (layoutTypePortlet.hasModeEditGuestPortletId(portletId)) { portletMode = LiferayPortletMode.EDIT_GUEST; } else if (layoutTypePortlet.hasModeHelpPortletId(portletId)) { portletMode = PortletMode.HELP; } else if (layoutTypePortlet.hasModePreviewPortletId(portletId)) { portletMode = LiferayPortletMode.PREVIEW; } else if (layoutTypePortlet.hasModePrintPortletId(portletId)) { portletMode = LiferayPortletMode.PRINT; } else { portletMode = PortletMode.VIEW; } User user = stateAwareResponseImpl.getUser(); Layout layout = stateAwareResponseImpl.getLayout(); PortletPreferences portletPreferences = portletRequestImpl.getPreferencesImpl(); EventRequestImpl eventRequestImpl = EventRequestFactory.create( request, portlet, invokerPortlet, portletContext, windowState, portletMode, portletPreferences, layoutTypePortlet.getLayout().getPlid()); eventRequestImpl.setEvent(serializeEvent(event, invokerPortlet.getPortletClassLoader())); EventResponseImpl eventResponseImpl = EventResponseFactory.create(eventRequestImpl, response, portletId, user, layout); eventRequestImpl.defineObjects(portletConfig, eventResponseImpl); try { try { InvokerPortletImpl.clearResponse( session, layout.getPrimaryKey(), portletId, LanguageUtil.getLanguageId(eventRequestImpl)); invokerPortlet.processEvent(eventRequestImpl, eventResponseImpl); if (eventResponseImpl.isCalledSetRenderParameter()) { Map<String, String[]> renderParameterMap = new HashMap<String, String[]>(); MapUtil.copy(eventResponseImpl.getRenderParameterMap(), renderParameterMap); RenderParametersPool.put(request, layout.getPlid(), portletId, renderParameterMap); } } catch (UnavailableException ue) { throw ue; } processEvents(eventRequestImpl, eventResponseImpl, layoutTypePortlets); } finally { eventRequestImpl.cleanUp(); } }