protected PortletWindowCache<IPortletWindow> getPortletWindowMap(HttpServletRequest request) {
    request = portalRequestUtils.getOriginalPortletOrPortalRequest(request);

    final String mapAttributeName = PORTLET_WINDOW_ATTRIBUTE + Thread.currentThread().getId();

    // No need to do this in a request attribute mutex since the map is scoped to a specific thread
    @SuppressWarnings("unchecked")
    PortletWindowCache<IPortletWindow> windowCache =
        (PortletWindowCache<IPortletWindow>) request.getAttribute(mapAttributeName);
    if (windowCache == null) {
      windowCache = new PortletWindowCache<IPortletWindow>(false);
      request.setAttribute(mapAttributeName, windowCache);
    }

    return windowCache;
  }
  @SuppressWarnings("unchecked")
  protected PortletWindowCache<PortletWindowData> getStatelessPortletWindowDataMap(
      HttpServletRequest request, boolean create) {
    request = portalRequestUtils.getOriginalPortalRequest(request);

    PortletWindowCache<PortletWindowData> windowCache;

    final Object mutex = PortalWebUtils.getRequestAttributeMutex(request);
    synchronized (mutex) {
      windowCache =
          (PortletWindowCache<PortletWindowData>)
              request.getAttribute(PORTLET_WINDOW_DATA_ATTRIBUTE);
      if (windowCache == null) {
        windowCache = new PortletWindowCache<PortletWindowData>();
        request.setAttribute(PORTLET_WINDOW_DATA_ATTRIBUTE, windowCache);
      }
    }

    return windowCache;
  }
  @SuppressWarnings("unchecked")
  protected PortletWindowCache<PortletWindowData> getPortletWindowDataMap(
      HttpServletRequest request, boolean create) {
    request = portalRequestUtils.getOriginalPortalRequest(request);
    final HttpSession session = request.getSession(create);
    if (!create && session == null) {
      return null;
    }

    PortletWindowCache<PortletWindowData> windowCache;

    final Object mutex = WebUtils.getSessionMutex(session);
    synchronized (mutex) {
      windowCache =
          (PortletWindowCache<PortletWindowData>)
              session.getAttribute(PORTLET_WINDOW_DATA_ATTRIBUTE);
      if (windowCache == null) {
        windowCache = new PortletWindowCache<PortletWindowData>();
        session.setAttribute(PORTLET_WINDOW_DATA_ATTRIBUTE, windowCache);
      }
    }

    return windowCache;
  }