@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);
          }
        }
      }
    }
  }
  public static MultipartRequest lookupRequest(FacesContext context, String uploadId) {
    Map<String, Object> sessionMap = context.getExternalContext().getSessionMap();
    @SuppressWarnings("unchecked")
    Map<String, String> requestKeys =
        (Map<String, String>) sessionMap.get(FileUploadConstants.REQUEST_KEYS_BEAN_NAME);
    if (requestKeys != null) {
      String requestKey = requestKeys.get(uploadId);
      if (requestKey != null) {
        MultipartRequestRegistry requestRegistry = MultipartRequestRegistry.getInstance(context);
        if (requestRegistry != null) {
          MultipartRequest request = requestRegistry.getRequest(requestKey);
          if (request != null) {
            return request;
          }
        }
      }
    }

    return null;
  }
  public void clearRequestData() {
    String uploadId = getUploadId();

    if (percentMap != null) {
      percentMap.remove(uploadId);
    }

    if (requestSizeMap != null) {
      requestSizeMap.remove(uploadId);
    }

    if (requestKeysMap != null) {
      requestKeysMap.remove(uploadId);
    }

    if (requestRegistry != null) {
      requestRegistry.removeRequest(requestKey);
    }
  }