public ActionForward exibir(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    Orgao localOrgao = null;

    final String idOrgao = request.getParameter("id");
    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(getDaoFactory());
    ConfiguracoesOrgaoCtrl configuracoesOrgaoCtrl = new ConfiguracoesOrgaoCtrl(getDaoFactory());

    if (idOrgao == null) {
      localOrgao = getOrgao(request);
    } else {
      localOrgao = orgaoCtrl.get(new Long(idOrgao));
    }

    ConfiguracoesOrgao configuracoes = localOrgao.getConfiguracoes();
    if (configuracoes == null) {
      configuracoes = new ConfiguracoesOrgao();
      request.setAttribute("function", "incluir");
    } else request.setAttribute("function", "alterar");

    request.setAttribute("orgao", localOrgao);
    request.setAttribute("configuracoes", configuracoes);

    request.setAttribute(
        "listaMeioEnvioRespostaTodos", configuracoesOrgaoCtrl.listarMeioEnvioResposta());

    request.setAttribute(
        "diretorioContextoAplicacao",
        configuracoesOrgaoCtrl.getParametrosGerais().getDiretorioContextoAplicacao());

    request.setAttribute(
        "listaDiretoriosCores",
        configuracoesOrgaoCtrl.listarDiretoriosCores(
            this.servlet.getServletContext().getRealPath("")));

    horaAgendadaAntiga = configuracoes.getHoraEnvioNotificacao();

    return mapping.findForward("exibir");
  }
  public void process(HttpServletRequest request, HttpServletResponse response)
      throws IOException, ServletException {

    Orgao orgao = null;
    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    // Instancia a sessao
    HttpSession session = request.getSession(true);

    boolean flagPesquisa = false;

    // se houverem dados de pesquisa na sessao entao starta o flag
    if (session.getAttribute("possuiPesquisa") != null) {
      if (session.getAttribute("possuiPesquisa").equals("sim")) {
        flagPesquisa = true;
      }
    }

    if (flagPesquisa) {

      int caminho = 0;

      // qq um desses links preservam os dados da sessao
      if ((request.getServletPath().equals("/andamento/ExibeMsgPorRespons.do"))
          || (request.getServletPath().equals("/andamento/ConsultaSolucoes.do"))
          || (request.getServletPath().equals("/andamento/ConsultarBancoScriptsMsg.do"))
          || (request.getServletPath().equals("/andamento/RedirecionarMensagem.do"))
          || (request.getServletPath().equals("/andamento/ReclassificarMensagem.do"))
          || (request.getServletPath().equals("/andamento/ConfirmaResposta.do"))
          || (request.getServletPath().equals("/andamento/RespondeAcionamento.do"))
          || (request.getServletPath().equals("/andamento/ConsultaMsgPorRespons.do"))
          || (request.getServletPath().equals("/andamento/SalvaRascunhoResp.do"))
          || (request.getServletPath().equals("/andamento/ListaMsgPorRespons.do"))
          || (request.getServletPath().equals("/andamento/ConfirmaRedirecionarMensagem.do"))) {

        caminho = 1;
      }

      switch (caminho) {
        case 0:
          // caso saia da tela, então a sessao é limpa
          limpaSessao(request, session);
          break;
        case 1:
          break;
      }
    }

    // obter o ID da sessão
    String orgaoSessionId = request.getParameter(Constants.ID_SESSAO_ORGAO);
    if (orgaoSessionId == null) {

      // verificar se a sessão expirou
      if (request.getSession() == null) {
        doForward(Constants.LOGIN_EXPIRED_ACTION, request, response);
        return;
      }

      // tentar obter o ID do atributo correspondente na sessão
      orgaoSessionId = (String) request.getSession().getAttribute(Constants.ID_SESSAO_ORGAO);

      // se não achou o ID no atributo da sessão, procurar pelo cookie
      if (orgaoSessionId == null) {
        Cookie[] cookies = request.getCookies();
        for (int i = 0; (cookies != null && i < cookies.length); i++) {
          Cookie cookie = cookies[i];
          if (cookie.getName().equals(Constants.ID_SESSAO_ORGAO)) {
            orgaoSessionId = cookie.getValue();
          }
        }
      }
    }

    // se não obteve o ID, redirecionar o usuário para página adequada
    if (orgaoSessionId == null) {
      doForward(Constants.NOT_FOUND_PAGE, request, response);
      return;
    }

    // obter o órgão
    orgao = orgaoCtrl.get(orgaoSessionId);
    if (orgao == null) {
      doForward(Constants.NOT_FOUND_PAGE, request, response);
      return;
    }

    /* adiciono o sessionId na sessão */
    HttpSession ses = request.getSession(true);
    ses.setAttribute(Constants.ID_SESSAO_ORGAO, orgaoSessionId);

    ses.setAttribute("_ORGAO_", new OrgaoDto(orgao));

    /* adiciono um cookie com o id do orgão */
    if (orgaoSessionId != null) {
      Cookie cookie = new Cookie(Constants.ID_SESSAO_ORGAO, orgaoSessionId);
      cookie.setPath("/");
      response.addCookie(cookie);
    }

    /*
     * adiciono um cookie com um identificador único para verificação do
     * timeout da sessão
     */
    if (request.getSession().getAttribute(Constants.PA_FUNCIONARIO) != null) {
      Cookie cookie = new Cookie(Constants.PA_EXPIRE, String.valueOf(System.currentTimeMillis()));
      cookie.setPath("/");
      response.addCookie(cookie);
    }

    /* adiciono o layout à sessão */
    setOrgaoLayout(request, orgao);

    try {

      ConfiguracoesOrgao configuracaoes = orgao.getConfiguracoes();
      request.setAttribute("configuracoes", configuracaoes);

      if (configuracaoes.getNotificacaoEmail() != null
          && configuracaoes.getNotificacaoEmail().equals("S")) {

        if ((OuvidoriaScheduler.sched == null)
            || (OuvidoriaScheduler.sched != null && !OuvidoriaScheduler.sched.isStarted())) {

          OuvidoriaScheduler.init(request);
        }
      }

    } catch (SchedulerException se) {

      se.printStackTrace();

    } catch (Exception e) {

      e.printStackTrace();
    }

    super.process(request, response);
  }
  protected boolean processRoles(
      HttpServletRequest request, HttpServletResponse response, ActionMapping mapping)
      throws IOException, ServletException {

    String role = null;

    ArrayList regras = new ArrayList();

    /*
     * Trecho responsável por pegar as regras de acesso definidas no Struts
     * Este tratamento foi feito para permitir/restringir acesso a mais de
     * uma opção por url. No caso Reclassificar Assunto e Mensagem através
     * da url reclassificar
     */
    if (mapping.getRoles() != null) {

      String[] roles = mapping.getRoles().split(",");

      for (int cont = 0; cont < roles.length; cont++) {

        try {

          new Long(roles[cont]);

        } catch (Exception e) {

          e.printStackTrace();
          throw new ServletException("Código de regra de acesso inválido.");
        }

        regras.add(roles[cont]);
        role = (String) regras.get(0); // Pega a primeira regra(role)
      }
    }

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(daoFactory);

    /* Não existe bloqueio para esta acão */
    if (role == null || role.trim().length() == 0) {
      return true;
    }

    request.setAttribute(Constants.SR_FUNCIONALIDADE, role);

    /*Coloca a funcionalidade na sessão para
     * ser recuperada na tela de ajuda
     */
    request.getSession().setAttribute(Constants.SR_FUNCIONALIDADE, role);

    ControleAcessoCtrl controleAcessoCtrl = new ControleAcessoCtrl(daoFactory);

    Orgao orgao =
        orgaoCtrl.get((String) request.getSession().getAttribute(Constants.ID_SESSAO_ORGAO));

    /* verifico a vigência do órgão para acionamento e consulta resposta */
    String redirect = null;

    int vigenciaOrgao = controleAcessoCtrl.verificaVigenciaOrgao(orgao, role);

    switch (vigenciaOrgao) {
      case ControleAcessoCtrl.VG_FORA_PERIODO_ACIONAMENTO:
        redirect = Constants.CAD_ACNMNT_FORA_VIGENCIA_PAGE;
        break;
      case ControleAcessoCtrl.VG_FORA_PERIODO_CONSULTA_RESPOSTA:
        redirect = Constants.CON_RESPTA_FORA_VIGENCIA_PAGE;
        break;
      case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO:
        redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE;
        break;
      default:
        // DO NOTHING
    }

    if (redirect != null) {

      controleAcessoCtrl = null;

      /* retiro o controle do struts */
      doForward(redirect, request, response);
      return false;
    }

    /* verifico o acesso do funcionario ao sistema */
    int possuiAcesso = ControleAcessoCtrl.CA_NECESSARIO_LOGIN;

    try {

      Long funcionarioId = (Long) request.getSession().getAttribute(Constants.PA_FUNCIONARIO);

      FuncionarioCtrl funcionarioCtrl = new FuncionarioCtrl(daoFactory);

      Funcionario funcionario = (Funcionario) funcionarioCtrl.get(funcionarioId);

      possuiAcesso = controleAcessoCtrl.permiteAcesso(orgao, funcionario, regras);

    } catch (DaoException e) {
      System.out.println(e.getMessage());
      e.printStackTrace();

      throw new ServletException(e);
    }

    redirect = Constants.LOGIN_ACTION;

    switch (possuiAcesso) {
      case ControleAcessoCtrl.CA_ACESSO_PERMITIDO:
        request.getSession().setAttribute(Constants.SR_FUNCIONALIDADES, regras);
        return true;
      case ControleAcessoCtrl.CA_ACESSO_NEGADO:
        redirect = Constants.DENIED_ACCESS_ACTION;
        break;
      case ControleAcessoCtrl.CA_NECESSARIO_LOGIN:
        redirect = Constants.LOGIN_ACTION;
        break;
      case ControleAcessoCtrl.VG_FORA_PERIODO_OPERACAO:
        redirect = Constants.CAD_OPERACAO_FORA_VIGENCIA_PAGE;
        break;
      default:
        redirect = Constants.LOGIN_ACTION;
    }

    controleAcessoCtrl = null;

    /* retiro o funcionario da sessão */
    request.getSession().removeAttribute(Constants.PA_FUNCIONARIO);

    /* retiro o controle do struts */
    doForward(redirect, request, response);

    return false;
  }
  public ActionForward salvar(
      ActionMapping mapping,
      ActionForm form,
      HttpServletRequest request,
      HttpServletResponse response)
      throws Exception {

    ActionMessages msgs = new ActionMessages();

    final String id = request.getParameter("id");
    final String idOrgao = request.getParameter("idOrgao");
    final String meiosEnvioResp = request.getParameter("meiosEnvioResp");

    /*Campos de notificação por email*/

    final String textoNotificacaoPendencia = request.getParameter("textoNotificacaoPendencia");

    final String textoNotificacaoAtraso = request.getParameter("textoNotificacaoAtraso");
    ;

    final String textoNotificacaoAtrasoCritico =
        request.getParameter("textoNotificacaoAtrasoCritico");

    final String notificacaoEmail = request.getParameter("notificacaoEmail");

    final String horaEnvioNotificacao = request.getParameter("horaEnvioNotificacao");

    /**/

    final String[] tipoAcionador = request.getParameterValues("tipoAcionador");

    Collection listaMeioEnvioResposta = new ArrayList();

    final String strPermiteMsgDigitalizadaAcionamento =
        request.getParameter("permiteMsgDigitalizadaAcionamento");
    Boolean permiteMsgDigitalizadaAcionamento;

    final String strTamanhoMaxArquivoCartaDigitalizada =
        request.getParameter("tamanhoMaxArquivoCartaDigitalizada");
    Integer tamanhoMaxArquivoCartaDigitalizada = null;

    final String strPermiteArquivoAnexoAcionamento =
        request.getParameter("permiteArquivoAnexoAcionamento");
    Boolean permiteArquivoAnexoAcionamento;

    final String strTamanhoMaxArquivoAnexo = request.getParameter("tamanhoMaxArquivoAnexo");
    Integer tamanhoMaxArquivoAnexo = null;

    final String strPossuiCodigoAcesso = request.getParameter("possuiCodigoAcesso");
    Boolean possuiCodigoAcesso;

    final String strAtendenteConsultaMsgNoAtendimento =
        request.getParameter("atendenteConsultaMsgNoAtendimento");
    Boolean atendenteConsultaMsgNoAtendimento;

    final String strExigeCertificadoDigitalGeral =
        request.getParameter("exigeCertificadoDigitalGeral");
    Boolean exigeCertificadoDigitalGeral;

    final String strExigeCertificadoDigitalOrgao =
        request.getParameter("exigeCertificadoDigitalOrgao");
    Boolean exigeCertificadoDigitalOrgao;

    final String strExisteBloqueioProtocoloPeloCodigo =
        request.getParameter("existeBloqueioProtocoloPeloCodigo");
    Boolean existeBloqueioProtocoloPeloCodigo;

    final String strExisteBloqueioProtocoloPelaPergunta =
        request.getParameter("existeBloqueioProtocoloPelaPergunta");
    Boolean existeBloqueioProtocoloPelaPergunta;

    final String strTempoBloqueioProtocoloPeloCodigo =
        request.getParameter("tempoBloqueioProtocoloPeloCodigo");
    Integer tempoBloqueioProtocoloPeloCodigo = null;

    final String strTempoBloqueioProtocoloPelaPergunta =
        request.getParameter("tempoBloqueioProtocoloPelaPergunta");
    Integer tempoBloqueioProtocoloPelaPergunta = null;

    final String strQtdeTentativasPossiveisCodigoAcesso =
        request.getParameter("qtdeTentativasPossiveisCodigoAcesso");
    Integer qtdeTentativasPossiveisCodigoAcesso = null;

    final String strQtdeTentativasPossiveisPergunta =
        request.getParameter("qtdeTentativasPossiveisPergunta");
    Integer qtdeTentativasPossiveisPergunta = null;

    final String textoApresentacaoOuvidoria = request.getParameter("textoApresentacaoOuvidoria");

    final String textoRespostaAcionamento = request.getParameter("textoRespostaAcionamento");

    final String textoApresentacaoFormulario = request.getParameter("textoApresentacaoFormulario");

    final String textoCanaisComunicacao = request.getParameter("textoCanaisComunicacao");

    final String textoApresentacaoResposta = request.getParameter("textoApresentacaoResposta");

    final String textoInformacaoOuvidoria = request.getParameter("textoInformacaoOuvidoria");

    final String esquemaCoresLayout = request.getParameter("esquemaCoresLayout");

    final String nomeExibicaoOrgao = request.getParameter("nomeExibicaoOrgao");

    final String descricaoImagemLogo = request.getParameter("descricaoImagemLogo");

    final String descricaoImagemBanner = request.getParameter("descricaoImagemBanner");

    final String descricaoImagem3 = request.getParameter("descricaoImagem3");

    final String descricaoImagem4 = request.getParameter("descricaoImagem4");

    final String descricaoImagem5 = request.getParameter("descricaoImagem5");

    final String linkImagemLogo = request.getParameter("linkImagemLogo");

    final String linkImagemBanner = request.getParameter("linkImagemBanner");

    final String linkImagem3 = request.getParameter("linkImagem3");

    final String linkImagem4 = request.getParameter("linkImagem4");

    final String linkImagem5 = request.getParameter("linkImagem5");

    CadastrarConfiguracoesOrgaoForm _form = (CadastrarConfiguracoesOrgaoForm) form;
    final FormFile imagemLogo = _form.getImagemLogo();
    final FormFile imagemBanner = _form.getImagemBanner();
    final FormFile imagem3 = _form.getImagem3();
    final FormFile imagem4 = _form.getImagem4();
    final FormFile imagem5 = _form.getImagem5();

    final String urlBaseFuncionarios = request.getParameter("urlBaseFuncionarios");
    final String textoConsultaRespostaNoPrazo =
        request.getParameter("textoConsultaRespostaNoPrazo");
    final String textoConsultaRespostaSemPrazo =
        request.getParameter("textoConsultaRespostaSemPrazo");
    final String textoConsultaRespostaEmAtraso =
        request.getParameter("textoConsultaRespostaEmAtraso");
    final String textoAvaliacaoResposta = request.getParameter("textoAvaliacaoResposta");
    final String nomeDiretorioOrgao = request.getParameter("nomeDiretorioOrgao");
    final String remetenteEmail = request.getParameter("remetenteEmail");
    final String textoLegislacaoOuvidoria = request.getParameter("textoLegislacaoOuvidoria");
    final String corCabecalhoLogo = request.getParameter("corCabecalhoLogo");
    final String corCabecalhoBanner = request.getParameter("corCabecalhoBanner");
    final String urlSuporteUsuario = request.getParameter("urlSuporteUsuario");

    OrgaoCtrl orgaoCtrl = new OrgaoCtrl(getDaoFactory());
    ConfiguracoesOrgaoCtrl configuracoesOrgaoCtrl = new ConfiguracoesOrgaoCtrl(getDaoFactory());

    try {

      if (idOrgao == null || idOrgao.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage("error.atualizarConfiguracoesOrgao.masc", "Orgão"));

      if (strPermiteMsgDigitalizadaAcionamento != null) {
        permiteMsgDigitalizadaAcionamento = Boolean.TRUE;

        if (strTamanhoMaxArquivoCartaDigitalizada == null
            || strTamanhoMaxArquivoCartaDigitalizada.trim().length() == 0)
          msgs.add(
              ActionMessages.GLOBAL_MESSAGE,
              new ActionMessage(
                  "error.atualizarConfiguracoesOrgao.masc",
                  "Tamanho máximo para carta digitalizada"));
        else
          tamanhoMaxArquivoCartaDigitalizada = new Integer(strTamanhoMaxArquivoCartaDigitalizada);
      } else {
        permiteMsgDigitalizadaAcionamento = Boolean.FALSE;
        tamanhoMaxArquivoCartaDigitalizada = null;
      }

      if (strPermiteArquivoAnexoAcionamento != null) {
        permiteArquivoAnexoAcionamento = Boolean.TRUE;

        if (strTamanhoMaxArquivoAnexo == null || strTamanhoMaxArquivoAnexo.trim().length() == 0)
          msgs.add(
              ActionMessages.GLOBAL_MESSAGE,
              new ActionMessage(
                  "error.atualizarConfiguracoesOrgao.masc", "Tamanho máximo para arquivos anexos"));
        else tamanhoMaxArquivoAnexo = new Integer(strTamanhoMaxArquivoAnexo);
      } else {
        permiteArquivoAnexoAcionamento = Boolean.FALSE;
        tamanhoMaxArquivoAnexo = null;
      }

      // possui código de acesso
      if (strPossuiCodigoAcesso != null) {
        possuiCodigoAcesso = Boolean.TRUE;

        // existe bloqueio pelo código de acesso
        if (strExisteBloqueioProtocoloPeloCodigo != null) {
          existeBloqueioProtocoloPeloCodigo = Boolean.TRUE;

          if (strTempoBloqueioProtocoloPeloCodigo == null
              || strTempoBloqueioProtocoloPeloCodigo.trim().length() == 0)
            msgs.add(
                ActionMessages.GLOBAL_MESSAGE,
                new ActionMessage(
                    "error.atualizarConfiguracoesOrgao.masc",
                    "Tempo de bloqueio pelo código de acesso"));
          else tempoBloqueioProtocoloPeloCodigo = new Integer(strTempoBloqueioProtocoloPeloCodigo);

          if (strQtdeTentativasPossiveisCodigoAcesso == null
              || strQtdeTentativasPossiveisCodigoAcesso.trim().length() == 0)
            msgs.add(
                ActionMessages.GLOBAL_MESSAGE,
                new ActionMessage(
                    "error.atualizarConfiguracoesOrgao.masc",
                    "Número máximo de falhas no código de acesso"));
          else
            qtdeTentativasPossiveisCodigoAcesso =
                new Integer(strQtdeTentativasPossiveisCodigoAcesso);
        } else {
          existeBloqueioProtocoloPeloCodigo = Boolean.FALSE;
          tempoBloqueioProtocoloPeloCodigo = null;
          qtdeTentativasPossiveisCodigoAcesso = null;
        }

        // existe bloqueio pela pergunta
        if (strExisteBloqueioProtocoloPelaPergunta != null) {
          existeBloqueioProtocoloPelaPergunta = Boolean.TRUE;

          if (strTempoBloqueioProtocoloPelaPergunta == null
              || strTempoBloqueioProtocoloPelaPergunta.trim().length() == 0)
            msgs.add(
                ActionMessages.GLOBAL_MESSAGE,
                new ActionMessage(
                    "error.atualizarConfiguracoesOrgao.masc", "Tempo de bloqueio pela pergunta"));
          else
            tempoBloqueioProtocoloPelaPergunta = new Integer(strTempoBloqueioProtocoloPelaPergunta);

          if (strQtdeTentativasPossiveisPergunta == null
              || strQtdeTentativasPossiveisPergunta.trim().length() == 0)
            msgs.add(
                ActionMessages.GLOBAL_MESSAGE,
                new ActionMessage(
                    "error.atualizarConfiguracoesOrgao.masc",
                    "Número máximo de falhas na pergunta"));
          else qtdeTentativasPossiveisPergunta = new Integer(strQtdeTentativasPossiveisPergunta);
        } else {
          existeBloqueioProtocoloPelaPergunta = Boolean.FALSE;
          tempoBloqueioProtocoloPelaPergunta = null;
          qtdeTentativasPossiveisPergunta = null;
        }

      } else {
        possuiCodigoAcesso = Boolean.FALSE;
        existeBloqueioProtocoloPeloCodigo = null;
        existeBloqueioProtocoloPelaPergunta = null;
        tempoBloqueioProtocoloPeloCodigo = null;
        tempoBloqueioProtocoloPelaPergunta = null;
        qtdeTentativasPossiveisCodigoAcesso = null;
        qtdeTentativasPossiveisPergunta = null;
      }

      if (strAtendenteConsultaMsgNoAtendimento != null)
        atendenteConsultaMsgNoAtendimento = Boolean.TRUE;
      else atendenteConsultaMsgNoAtendimento = Boolean.FALSE;

      if (strExigeCertificadoDigitalGeral != null) exigeCertificadoDigitalGeral = Boolean.TRUE;
      else exigeCertificadoDigitalGeral = Boolean.FALSE;

      if (strExigeCertificadoDigitalOrgao != null) exigeCertificadoDigitalOrgao = Boolean.TRUE;
      else exigeCertificadoDigitalOrgao = Boolean.FALSE;

      if (textoApresentacaoOuvidoria == null || textoApresentacaoOuvidoria.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc", "Texto de apresentação da ouvidoria"));

      if (textoRespostaAcionamento == null || textoRespostaAcionamento.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc",
                "Texto de resposta no momento do acionamento"));

      if (textoApresentacaoResposta == null || textoApresentacaoResposta.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc", "Texto de apresentação da resposta"));

      if (textoInformacaoOuvidoria == null || textoInformacaoOuvidoria.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc",
                "Texto com informações sobre a ouvidoria"));

      if (textoConsultaRespostaNoPrazo == null || textoConsultaRespostaNoPrazo.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc",
                "Texto de consulta de resposta no prazo"));

      if (textoConsultaRespostaSemPrazo == null
          || textoConsultaRespostaSemPrazo.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc",
                "Texto de consulta de resposta sem prazo"));

      if (textoConsultaRespostaEmAtraso == null
          || textoConsultaRespostaEmAtraso.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc",
                "Texto de consulta de resposta em atraso"));

      if (textoAvaliacaoResposta == null || textoAvaliacaoResposta.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc", "Texto de avaliação da resposta"));

      if (esquemaCoresLayout == null || esquemaCoresLayout.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc", "Diretório de esquema de cores"));

      if (nomeExibicaoOrgao == null || nomeExibicaoOrgao.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc", "Nome do órgão para exibição"));

      if (id == null || id.trim().length() == 0) {

        if (nomeDiretorioOrgao == null || nomeDiretorioOrgao.trim().length() == 0)
          msgs.add(
              ActionMessages.GLOBAL_MESSAGE,
              new ActionMessage(
                  "error.atualizarConfiguracoesOrgao.masc", "Nome do diretório do órgão"));
      }

      if (remetenteEmail == null || remetenteEmail.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.masc",
                "Remetente dos emails que serão enviados pela aplicação"));

      if (corCabecalhoLogo == null || corCabecalhoLogo.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.fem", "Cor referente a página do logo"));

      if (corCabecalhoBanner == null || corCabecalhoBanner.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.fem", "Cor referente a página do banner"));

      if (urlSuporteUsuario == null || urlSuporteUsuario.trim().length() == 0)
        msgs.add(
            ActionMessages.GLOBAL_MESSAGE,
            new ActionMessage(
                "error.atualizarConfiguracoesOrgao.fem", "URL de suporte ao usuário"));

      Collection listaTipoAcionador = new ArrayList();
      if (tipoAcionador != null) {
        for (int i = 0; i < tipoAcionador.length; i++) {
          listaTipoAcionador.add(TipoAcionador.get(new Long(tipoAcionador[i])));
        }
      }

      if (meiosEnvioResp != null) {
        int posIni = 0;
        int pos = 0;
        String idMeioEnvioRespSel = "";
        // Recupera meios de envio de resposta selecionados para
        // o órgão
        while (posIni < meiosEnvioResp.length()) {
          pos = meiosEnvioResp.indexOf(",", posIni);
          if (pos > 0) {
            idMeioEnvioRespSel = meiosEnvioResp.substring(posIni, pos);

            MeioEnvioResposta mer =
                configuracoesOrgaoCtrl.getMeioEnvioResposta(new Long(idMeioEnvioRespSel));
            listaMeioEnvioResposta.add(mer);
          }

          posIni = pos + 1;
        }
      }

      if (!msgs.isEmpty()) {
        saveErrors(request, msgs);
        return mapping.findForward("error");
      }

      Orgao localOrgao = orgaoCtrl.get(new Long(idOrgao));
      if (id != null && id.trim().length() > 0) {
        configuracoesOrgaoCtrl.update(
            id,
            localOrgao,
            permiteMsgDigitalizadaAcionamento,
            tamanhoMaxArquivoCartaDigitalizada,
            permiteArquivoAnexoAcionamento,
            tamanhoMaxArquivoAnexo,
            atendenteConsultaMsgNoAtendimento,
            exigeCertificadoDigitalGeral,
            exigeCertificadoDigitalOrgao,
            possuiCodigoAcesso,
            existeBloqueioProtocoloPeloCodigo,
            existeBloqueioProtocoloPelaPergunta,
            tempoBloqueioProtocoloPeloCodigo,
            tempoBloqueioProtocoloPelaPergunta,
            qtdeTentativasPossiveisCodigoAcesso,
            qtdeTentativasPossiveisPergunta,
            textoApresentacaoOuvidoria,
            textoRespostaAcionamento,
            textoApresentacaoFormulario,
            textoCanaisComunicacao,
            textoApresentacaoResposta,
            textoInformacaoOuvidoria,
            textoConsultaRespostaNoPrazo,
            textoConsultaRespostaSemPrazo,
            textoConsultaRespostaEmAtraso,
            textoAvaliacaoResposta,
            textoLegislacaoOuvidoria,
            esquemaCoresLayout,
            nomeExibicaoOrgao,
            imagemLogo,
            corCabecalhoLogo,
            imagemBanner,
            corCabecalhoBanner,
            imagem3,
            imagem4,
            imagem5,
            descricaoImagemLogo,
            descricaoImagemBanner,
            descricaoImagem3,
            descricaoImagem4,
            descricaoImagem5,
            linkImagemLogo,
            linkImagemBanner,
            linkImagem3,
            linkImagem4,
            linkImagem5,
            urlBaseFuncionarios,
            urlSuporteUsuario,
            remetenteEmail,
            listaMeioEnvioResposta,
            listaTipoAcionador,
            notificacaoEmail,
            horaEnvioNotificacao,
            textoNotificacaoPendencia,
            textoNotificacaoAtraso,
            textoNotificacaoAtrasoCritico);

        msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.atualizar.alterar"));
      } else {
        configuracoesOrgaoCtrl.insert(
            localOrgao,
            permiteMsgDigitalizadaAcionamento,
            tamanhoMaxArquivoCartaDigitalizada,
            permiteArquivoAnexoAcionamento,
            tamanhoMaxArquivoAnexo,
            atendenteConsultaMsgNoAtendimento,
            exigeCertificadoDigitalGeral,
            exigeCertificadoDigitalOrgao,
            possuiCodigoAcesso,
            existeBloqueioProtocoloPeloCodigo,
            existeBloqueioProtocoloPelaPergunta,
            tempoBloqueioProtocoloPeloCodigo,
            tempoBloqueioProtocoloPelaPergunta,
            qtdeTentativasPossiveisCodigoAcesso,
            qtdeTentativasPossiveisPergunta,
            textoApresentacaoOuvidoria,
            textoRespostaAcionamento,
            textoApresentacaoFormulario,
            textoCanaisComunicacao,
            textoApresentacaoResposta,
            textoInformacaoOuvidoria,
            textoConsultaRespostaNoPrazo,
            textoConsultaRespostaSemPrazo,
            textoConsultaRespostaEmAtraso,
            textoAvaliacaoResposta,
            textoLegislacaoOuvidoria,
            esquemaCoresLayout,
            nomeExibicaoOrgao,
            nomeDiretorioOrgao,
            imagemLogo,
            corCabecalhoLogo,
            imagemBanner,
            corCabecalhoBanner,
            imagem3,
            imagem4,
            imagem5,
            descricaoImagemLogo,
            descricaoImagemBanner,
            descricaoImagem3,
            descricaoImagem4,
            descricaoImagem5,
            linkImagemLogo,
            linkImagemBanner,
            linkImagem3,
            linkImagem4,
            linkImagem5,
            urlBaseFuncionarios,
            urlSuporteUsuario,
            remetenteEmail,
            listaMeioEnvioResposta,
            listaTipoAcionador,
            notificacaoEmail,
            horaEnvioNotificacao,
            textoNotificacaoPendencia,
            textoNotificacaoAtraso,
            textoNotificacaoAtrasoCritico);

        msgs.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("message.atualizar.incluir"));
      }

    } catch (DaoException daoe) {
      if (Constants.DEBUG) {
        daoe.printStackTrace(System.out);
      }
      msgs.add(
          ActionMessages.GLOBAL_MESSAGE, new ActionMessage("error.atualizarConfiguracoesOrgao"));
    }

    // Caso o admistrador retire a indicação de agendamento o agendador será parado
    if (notificacaoEmail == null || notificacaoEmail.equals("")) {

      boolean agendamentoFinalizado =
          OuvidoriaScheduler.sched.deleteJob("EnviarAlertaJob", Scheduler.DEFAULT_GROUP);

      if (agendamentoFinalizado) {

        getLog()
            .info(
                "\n\n Job 'EnviarAlertaJob' Finalizado em:" + new Date(System.currentTimeMillis()));
      }

    } else if (horaAgendadaAntiga != null
        && horaEnvioNotificacao != null
        && !horaAgendadaAntiga.equals(horaEnvioNotificacao)) {
      // Caso a hora antiga seja diferente da atual o agendador deverá ser reiniciado
      OuvidoriaScheduler.restart(request);
    }

    saveMessages(request, msgs);

    return mapping.findForward("success");
  }