@SuppressWarnings("unchecked")
  private void setupProgressData() {
    if (percentMap == null || requestSizeMap == null || requestKeysMap == null) {
      FacesContext facesContext = FacesContext.getCurrentInstance();
      if (facesContext != null) {
        ExternalContext externalContext = facesContext.getExternalContext();
        if (externalContext != null) {
          Map<String, Object> sessionMap = externalContext.getSessionMap();
          if (sessionMap != null) {
            String uploadId = getUploadId();

            synchronized (sessionMap) {
              if (percentMap == null) {
                percentMap =
                    (Map<String, Object>) sessionMap.get(FileUploadConstants.PERCENT_BEAN_NAME);
                if (percentMap == null) {
                  percentMap = new ConcurrentHashMap<String, Object>();
                  sessionMap.put(FileUploadConstants.PERCENT_BEAN_NAME, percentMap);
                }
              }

              if (requestSizeMap == null) {
                requestSizeMap =
                    (Map<String, Integer>)
                        sessionMap.get(FileUploadConstants.REQUEST_SIZE_BEAN_NAME);
                if (requestSizeMap == null) {
                  requestSizeMap = new ConcurrentHashMap<String, Integer>();
                  sessionMap.put(FileUploadConstants.REQUEST_SIZE_BEAN_NAME, requestSizeMap);
                }
              }

              if (requestKeysMap == null) {
                requestKeysMap =
                    (Map<String, String>)
                        sessionMap.get(FileUploadConstants.REQUEST_KEYS_BEAN_NAME);
                if (requestKeysMap == null) {
                  requestKeysMap = new ConcurrentHashMap<String, String>();
                  sessionMap.put(FileUploadConstants.REQUEST_KEYS_BEAN_NAME, requestKeysMap);
                }
              }
            }

            percentMap.put(uploadId, Double.valueOf(0));

            requestSizeMap.put(uploadId, getSize());

            requestRegistry = MultipartRequestRegistry.getInstance(facesContext);
            requestKey = requestRegistry.registerRequest(this);
            requestKeysMap.put(uploadId, requestKey);
          }
        }
      }
    }
  }