/**
   * 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 file contained in the request from the name of the parameter
   *
   * @param strFileInputName name of the file parameter of the request
   * @param request the request
   * @return file the file contained in the request with the given parameter key
   */
  private static File getFileData(String strFileInputName, HttpServletRequest request) {
    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
    FileItem fileItem = multipartRequest.getFile(strFileInputName);

    if ((fileItem != null)
        && (fileItem.getName() != null)
        && !EMPTY_STRING.equals(fileItem.getName())) {
      File file = new File();
      PhysicalFile physicalFile = new PhysicalFile();
      physicalFile.setValue(fileItem.get());
      file.setTitle(FileUploadService.getFileNameOnly(fileItem));
      file.setSize((int) fileItem.getSize());
      file.setPhysicalFile(physicalFile);
      file.setMimeType(FileSystemUtil.getMIMEType(FileUploadService.getFileNameOnly(fileItem)));

      return file;
    }

    return null;
  }
  /**
   * 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;
  }
  /**
   * Initiate a download of a XSL file
   *
   * @param request The request
   * @param response The response
   * @throws IOException Throw an exception if the outputstream has error.
   */
  public void doDownloadXslExport(HttpServletRequest request, HttpServletResponse response)
      throws IOException {
    String strXslExportId = request.getParameter(PARAMETER_ID_XSL_EXPORT);

    if (strXslExportId != null) {
      int nXslExportId = Integer.parseInt(strXslExportId);
      XslExport xslExport = XslExportHome.findByPrimaryKey(nXslExportId);

      String strMimetype = xslExport.getFile().getMimeType();
      response.setContentType((strMimetype != null) ? strMimetype : "application/octet-stream");
      response.setHeader(
          "Content-Disposition",
          "attachement; filename=\"" + xslExport.getFile().getTitle() + "\"");

      OutputStream out = response.getOutputStream();
      PhysicalFile physicalFile =
          PhysicalFileHome.findByPrimaryKey(
              xslExport.getFile().getPhysicalFile().getIdPhysicalFile());
      out.write(physicalFile.getValue());
      out.flush();
      out.close();
    }
  }