private List<Event> _doProcessEvent(
      HttpServletRequest request,
      HttpServletResponse response,
      Portlet portlet,
      Layout layout,
      Event event)
      throws Exception {

    ServletContext servletContext = (ServletContext) request.getAttribute(WebKeys.CTX);

    InvokerPortlet invokerPortlet = PortletInstanceFactoryUtil.create(portlet, servletContext);

    PortletConfig portletConfig = PortletConfigFactoryUtil.create(portlet, servletContext);
    PortletContext portletContext = portletConfig.getPortletContext();

    LayoutTypePortlet layoutTypePortlet = (LayoutTypePortlet) layout.getLayoutType();

    WindowState windowState = null;

    if (layoutTypePortlet.hasStateMaxPortletId(portlet.getPortletId())) {
      windowState = WindowState.MAXIMIZED;
    } else if (layoutTypePortlet.hasStateMinPortletId(portlet.getPortletId())) {

      windowState = WindowState.MINIMIZED;
    } else {
      windowState = WindowState.NORMAL;
    }

    PortletMode portletMode = null;

    if (layoutTypePortlet.hasModeAboutPortletId(portlet.getPortletId())) {
      portletMode = LiferayPortletMode.ABOUT;
    } else if (layoutTypePortlet.hasModeConfigPortletId(portlet.getPortletId())) {

      portletMode = LiferayPortletMode.CONFIG;
    } else if (layoutTypePortlet.hasModeEditPortletId(portlet.getPortletId())) {

      portletMode = PortletMode.EDIT;
    } else if (layoutTypePortlet.hasModeEditDefaultsPortletId(portlet.getPortletId())) {

      portletMode = LiferayPortletMode.EDIT_DEFAULTS;
    } else if (layoutTypePortlet.hasModeEditGuestPortletId(portlet.getPortletId())) {

      portletMode = LiferayPortletMode.EDIT_GUEST;
    } else if (layoutTypePortlet.hasModeHelpPortletId(portlet.getPortletId())) {

      portletMode = PortletMode.HELP;
    } else if (layoutTypePortlet.hasModePreviewPortletId(portlet.getPortletId())) {

      portletMode = LiferayPortletMode.PREVIEW;
    } else if (layoutTypePortlet.hasModePrintPortletId(portlet.getPortletId())) {

      portletMode = LiferayPortletMode.PRINT;
    } else {
      portletMode = PortletMode.VIEW;
    }

    long scopeGroupId = getScopeGroupId(request, layout, portlet.getPortletId());

    PortletPreferences portletPreferences =
        PortletPreferencesFactoryUtil.getPortletSetup(
            scopeGroupId, layout, portlet.getPortletId(), null);

    EventRequestImpl eventRequestImpl =
        EventRequestFactory.create(
            request,
            portlet,
            invokerPortlet,
            portletContext,
            windowState,
            portletMode,
            portletPreferences,
            layout.getPlid());

    eventRequestImpl.setEvent(serializeEvent(event, invokerPortlet.getPortletClassLoader()));

    User user = PortalUtil.getUser(request);
    Layout requestLayout = (Layout) request.getAttribute(WebKeys.LAYOUT);

    EventResponseImpl eventResponseImpl =
        EventResponseFactory.create(
            eventRequestImpl, response, portlet.getPortletId(), user, requestLayout);

    eventRequestImpl.defineObjects(portletConfig, eventResponseImpl);

    try {
      invokerPortlet.processEvent(eventRequestImpl, eventResponseImpl);

      if (eventResponseImpl.isCalledSetRenderParameter()) {
        Map<String, String[]> renderParameterMap = new HashMap<String, String[]>();

        renderParameterMap.putAll(eventResponseImpl.getRenderParameterMap());

        RenderParametersPool.put(
            request, requestLayout.getPlid(), portlet.getPortletId(), renderParameterMap);
      }

      return eventResponseImpl.getEvents();
    } finally {
      eventRequestImpl.cleanUp();
    }
  }