/**
   * Creates a response that is a copy of another response
   *
   * @param response The response to copy
   */
  public Response(Response response) {
    this._nIdResponse = response.getIdResponse();
    this._strToStringValueResponse = response.getToStringValueResponse();
    this._entry = response.getEntry();
    this._field = response.getField();
    this._strResponseValue = response.getResponseValue();
    this._nStatus = response.getStatus();

    File file = response.getFile();

    if (file != null) {
      _file = new File();
      _file.setExtension(file.getExtension());
      _file.setIdFile(file.getIdFile());
      _file.setMimeType(file.getMimeType());
      _file.setSize(file.getSize());
      _file.setTitle(file.getTitle());

      PhysicalFile physicalFile = file.getPhysicalFile();

      if (physicalFile != null) {
        PhysicalFile pfDuplicated = new PhysicalFile();
        pfDuplicated.setIdPhysicalFile(pfDuplicated.getIdPhysicalFile());
        pfDuplicated.setValue(pfDuplicated.getValue());
        _file.setPhysicalFile(pfDuplicated);
      }
    }
  }
  /**
   * Get a generic attributes response from a file item
   *
   * @param fileItem The file item
   * @param entry The entry
   * @param bCreatePhysicalFile True to create the physical file associated with the file of the
   *     response, false otherwise. Note that the physical file will never be saved in the database
   *     by this method, like any other created object.
   * @return The created response
   */
  private Response getResponseFromFile(
      FileItem fileItem, Entry entry, boolean bCreatePhysicalFile) {
    if (fileItem instanceof GenAttFileItem) {
      GenAttFileItem genAttFileItem = (GenAttFileItem) fileItem;

      if (genAttFileItem.getIdResponse() > 0) {
        Response response = ResponseHome.findByPrimaryKey(genAttFileItem.getIdResponse());
        response.setEntry(entry);
        response.setFile(FileHome.findByPrimaryKey(response.getFile().getIdFile()));

        if (bCreatePhysicalFile) {
          response.getFile().getPhysicalFile().setValue(fileItem.get());
        }

        return response;
      }
    }

    Response response = new Response();
    response.setEntry(entry);

    File file = new File();
    file.setTitle(fileItem.getName());
    file.setSize(
        (fileItem.getSize() < Integer.MAX_VALUE) ? (int) fileItem.getSize() : Integer.MAX_VALUE);

    if (bCreatePhysicalFile) {
      file.setMimeType(FileSystemUtil.getMIMEType(file.getTitle()));

      PhysicalFile physicalFile = new PhysicalFile();
      physicalFile.setValue(fileItem.get());
      file.setPhysicalFile(physicalFile);
    }

    response.setFile(file);

    return response;
  }
  /** {@inheritDoc} */
  @Override
  public GenericAttributeError getResponseData(
      Entry entry, HttpServletRequest request, List<Response> listResponse, Locale locale) {
    List<FileItem> listFilesSource = null;

    if (request instanceof MultipartHttpServletRequest) {
      List<FileItem> asynchronousFileItem = getFileSources(entry, request);

      if (asynchronousFileItem != null) {
        listFilesSource = asynchronousFileItem;
      }

      GenericAttributeError genAttError = null;

      if (getAsynchronousUploadHandler()
              .hasRemoveFlag(
                  request,
                  IEntryTypeService.PREFIX_ATTRIBUTE + Integer.toString(entry.getIdEntry()))
          || getAsynchronousUploadHandler()
              .hasAddFileFlag(
                  request,
                  IEntryTypeService.PREFIX_ATTRIBUTE + Integer.toString(entry.getIdEntry()))) {
        if ((listFilesSource != null) && !listFilesSource.isEmpty()) {
          for (FileItem fileItem : listFilesSource) {
            listResponse.add(getResponseFromFile(fileItem, entry, false));
          }
        }

        genAttError = new GenericAttributeError();
        genAttError.setErrorMessage(StringUtils.EMPTY);
        genAttError.setMandatoryError(false);
        genAttError.setIsDisplayableError(false);

        return genAttError;
      }

      if ((listFilesSource != null) && !listFilesSource.isEmpty()) {
        genAttError = checkResponseData(entry, listFilesSource, locale, request);

        for (FileItem fileItem : listFilesSource) {
          listResponse.add(getResponseFromFile(fileItem, entry, genAttError == null));
        }

        if (genAttError != null) {
          return genAttError;
        }

        for (FileItem fileItem : listFilesSource) {
          if (checkForImages()) {
            genAttError = doCheckforImages(fileItem, entry, request.getLocale());
          }
        }

        return genAttError;
      }

      if (entry.isMandatory()) {
        genAttError = new MandatoryError(entry, locale);

        Response response = new Response();
        response.setEntry(entry);
        listResponse.add(response);
      }

      return genAttError;
    }

    return entry.isMandatory() ? new MandatoryError(entry, locale) : null;
  }