/**
   * Gerando o objeto que referencia o arquivo que será anexado ao RA
   *
   * @author Raphael Rossiter
   * @date 30/07/2009
   * @param FileItem
   * @param String
   */
  private RegistroAtendimentoAnexo gerarRegistroAtendimentoAnexo(
      FileItem arquivoAnexo, String observacaoAnexo) {

    RegistroAtendimentoAnexo anexo = new RegistroAtendimentoAnexo();

    // ARQUIVO EM BYTES
    anexo.setImagemDocumento(arquivoAnexo.get());

    // EXTENSÃO
    anexo.setNomeExtensaoDocumento(Util.obterExtensaoDoArquivo(arquivoAnexo));

    // OBSERVAÇÃO
    if (observacaoAnexo != null && !observacaoAnexo.equals("")) {

      anexo.setDescricaoDocumento(observacaoAnexo.trim());
    }

    // ÚLTIMA ALTERAÇÃO
    anexo.setUltimaAlteracao(new Date());

    return anexo;
  }
  public ActionForward execute(
      ActionMapping actionMapping,
      ActionForm actionForm,
      HttpServletRequest httpServletRequest,
      HttpServletResponse httpServletResponse) {

    ActionForward retorno = actionMapping.findForward("atualizarRegistroAtendimentoAnexos");

    Fachada fachada = Fachada.getInstancia();
    HttpSession sessao = httpServletRequest.getSession(false);

    String adicionar = httpServletRequest.getParameter("adicionar");
    String remover = httpServletRequest.getParameter("remover");
    String visualizar = httpServletRequest.getParameter("visualizar");

    // ADICIONANDO UM ARQUIVO
    if (adicionar != null && !adicionar.equals("")) {

      Object[] parametrosFormulario = null;
      FileItem arquivoInformado = null;
      String observacaoAnexo = null;

      // ARQUIVO
      try {

        parametrosFormulario = recebendoObjetos(httpServletRequest);

      } catch (FileUploadException e) {
        throw new ActionServletException("erro.sistema", e);
      }

      arquivoInformado = (FileItem) parametrosFormulario[0];
      observacaoAnexo = (String) parametrosFormulario[1];

      // VALIDAÇÃO DO ARQUIVO
      fachada.validarRegistroAtendimentoAnexos(arquivoInformado);

      RegistroAtendimentoAnexo registroAtendimentoanexo =
          this.gerarRegistroAtendimentoAnexo(arquivoInformado, observacaoAnexo);

      // INSERINDO O ARQUIVO NA COLEÇÃO DE VISUALIZAÇÃO
      Collection colecaoRegistroAtendimentoAnexo = null;

      if (sessao.getAttribute("colecaoRegistroAtendimentoAnexo") != null) {

        colecaoRegistroAtendimentoAnexo =
            (Collection) sessao.getAttribute("colecaoRegistroAtendimentoAnexo");

        colecaoRegistroAtendimentoAnexo.add(registroAtendimentoanexo);

      } else {

        colecaoRegistroAtendimentoAnexo = new ArrayList();
        colecaoRegistroAtendimentoAnexo.add(registroAtendimentoanexo);

        sessao.setAttribute("colecaoRegistroAtendimentoAnexo", colecaoRegistroAtendimentoAnexo);
      }
    }

    // REMOVENDO UM ARQUIVO
    this.removerArquivo(remover, sessao);

    // OBTENDO ARQUIVO PARA VISUALIZAÇÃO
    RegistroAtendimentoAnexo registroAtendimentoAnexo =
        this.obterArquivoParaVisualizacao(visualizar, sessao);

    // PREPARANDO VISUALIZAÇÃO DO ARQUIVO
    if (registroAtendimentoAnexo != null) {

      OutputStream out = null;

      String mimeType = ConstantesSistema.CONTENT_TYPE_GENERICO;

      if (registroAtendimentoAnexo
          .getNomeExtensaoDocumento()
          .equals(ConstantesSistema.EXTENSAO_DOC)) {
        mimeType = ConstantesSistema.CONTENT_TYPE_MSWORD;
      } else if (registroAtendimentoAnexo
          .getNomeExtensaoDocumento()
          .equals(ConstantesSistema.EXTENSAO_PDF)) {
        mimeType = ConstantesSistema.CONTENT_TYPE_PDF;
      } else if (registroAtendimentoAnexo
          .getNomeExtensaoDocumento()
          .equals(ConstantesSistema.EXTENSAO_JPG)) {
        mimeType = ConstantesSistema.CONTENT_TYPE_JPEG;
      }

      try {
        httpServletResponse.setContentType(mimeType);
        out = httpServletResponse.getOutputStream();

        out.write(registroAtendimentoAnexo.getImagemDocumento());
        out.flush();
        out.close();
      } catch (IOException e) {
        throw new ActionServletException("erro.sistema", e);
      }
    }

    // CARREGANDO OS ANEXOS QUE ESTÃO CADASTRADOS NA BASE
    if (sessao.getAttribute("colecaoRegistroAtendimentoAnexo") == null) {

      StatusWizard statusWizard = (StatusWizard) sessao.getAttribute("statusWizard");

      FiltroRegistroAtendimentoAnexo filtroRegistroAtendimentoAnexo =
          new FiltroRegistroAtendimentoAnexo();

      filtroRegistroAtendimentoAnexo.adicionarParametro(
          new ParametroSimples(
              FiltroRegistroAtendimentoAnexo.REGISTRO_ATENDIMENTO_ID, statusWizard.getId()));

      Collection colecaoRegistroAtendimentoAnexo =
          fachada.pesquisar(
              filtroRegistroAtendimentoAnexo, RegistroAtendimentoAnexo.class.getName());

      sessao.setAttribute("colecaoRegistroAtendimentoAnexo", colecaoRegistroAtendimentoAnexo);
    }

    httpServletRequest.setAttribute("nomeCampo", "arquivoAnexo");

    return retorno;
  }