@Override
  public String getWindowId(FacesContext facesContext) {
    ExternalContext externalContext = facesContext.getExternalContext();
    Map<String, Object> requestMap = externalContext.getRequestMap();

    // try to lookup from cache
    String windowId = (String) requestMap.get(WINDOW_ID_REQUEST_MAP_KEY);
    if (windowId != null) {
      return windowId;
    }

    ClientWindowRenderMode clientWindowRenderMode =
        clientWindowConfig.getClientWindowRenderMode(facesContext);
    if (ClientWindowRenderMode.NONE.equals(clientWindowRenderMode)) {
      // if this request should not get any window detection then we are done
      windowId = DEFAULT_WINDOW_ID;
    } else if (ClientWindowRenderMode.DELEGATED.equals(clientWindowRenderMode)) {
      windowId = ClientWindowAdapter.getWindowIdFromJsf(facesContext);
    } else if (ClientWindowRenderMode.LAZY.equals(clientWindowRenderMode)) {
      windowId = ClientWindowHelper.getInitialRedirectWindowId(facesContext);

      if (StringUtils.isEmpty(windowId)) {
        windowId = externalContext.getRequestParameterMap().get(DELTASPIKE_WINDOW_ID_URL_PARAM);
      }

      if (StringUtils.isEmpty(windowId)) {
        if (this.jsfModuleConfig.isInitialRedirectEnabled()) {
          ClientWindowHelper.handleInitialRedirect(facesContext, generateNewWindowId());
          facesContext.responseComplete();
          windowId = null;
        } else {
          windowId = generateNewWindowId();
        }
      }
    } else if (ClientWindowRenderMode.CLIENTWINDOW.equals(clientWindowRenderMode)) {
      if (facesContext.isPostback()) {
        windowId = getPostBackWindowId(facesContext);
      } else if (isNoscriptRequest(externalContext)) {
        // the client has JavaScript disabled
        clientWindowConfig.setJavaScriptEnabled(false);

        windowId = DEFAULT_WINDOW_ID;
      } else {
        windowId = getVerifiedWindowIdFromCookie(externalContext);

        boolean newWindowIdRequested = false;
        if (AUTOMATED_ENTRY_POINT_PARAMETER_KEY.equals(windowId)) {
          // this is a marker for generating a new windowId
          windowId = generateNewWindowId();
          newWindowIdRequested = true;
        }

        if (windowId == null || newWindowIdRequested) {
          // GET request without windowId - send windowhandlerfilter.html to get the windowId
          sendWindowHandlerHtml(externalContext, windowId);
          facesContext.responseComplete();
        }
      }
    }

    // we have a valid windowId - set it and continue with the request
    if (windowId != null) {
      requestMap.put(WINDOW_ID_REQUEST_MAP_KEY, windowId);
    }

    return windowId;
  }