public List<SelectItem> getListaGrupoCidade() {
   List<SelectItem> grupo = new ArrayList<SelectItem>();
   ConvencaoCidadeDB convencaoCidadeDB = new ConvencaoCidadeDBToplink();
   Dao dao = new Dao();
   Convencao convencao =
       (Convencao)
           dao.find(
               new Convencao(),
               Integer.parseInt(
                   ((SelectItem) getListaConvencoes().get(idConvencao)).getDescription()));
   if (convencao == null) {
     return grupo;
   }
   int i = 0;
   List select = convencaoCidadeDB.pesquisarGruposPorConvencao(convencao.getId());
   if (select != null) {
     while (i < select.size()) {
       grupo.add(
           new SelectItem(
               i,
               (String) ((GrupoCidade) select.get(i)).getDescricao(),
               Integer.toString(((GrupoCidade) select.get(i)).getId())));
       i++;
     }
   }
   return grupo;
 }
  public synchronized String salvar() {
    MensagemConvencaoDB db = new MensagemConvencaoDBToplink();
    ConvencaoCidadeDB dbc = new ConvencaoCidadeDBToplink();
    DataHoje dataHoje = new DataHoje();
    mensagemConvencao.setVencimento(vencimento);

    if (!mensagemConvencao.getVencimento().equals(vencimento)) {
      msgConfirma = "Este vencimento esta incorreto!";
      GenericaMensagem.warn("Erro", msgConfirma);
      return null;
    }

    if ((mensagemConvencao.getReferencia().length() != 7)
        && (Integer.parseInt(this.getListaTipoServico().get(idTipoServico).getDescription())
            != 4)) {
      msgConfirma = "Referência esta incorreta";
      GenericaMensagem.warn("Erro", msgConfirma);
      return null;
    }

    if (DataHoje.converteData(mensagemConvencao.getDtVencimento()) == null) {
      msgConfirma = "Informe o vencimento";
      GenericaMensagem.warn("Erro", msgConfirma);
      return null;
    }

    try {
      if (mensagemConvencao.getId() == -1) {
        // SE ACORDO FOR FALSO ----------------------------------------------------
        if (mensagemConvencao.getReferencia().length() != 7 && !disAcordo) {
          msgConfirma = "Digite uma referencia!";
          GenericaMensagem.warn("Erro", msgConfirma);
          return null;
        }

        int ano = 0;
        String referencia = "", vencto = "", diaOriginal = "";
        int iservicos = Integer.parseInt(this.getListaServico().get(idServico).getDescription()),
            itiposervico =
                Integer.parseInt(this.getListaTipoServico().get(idTipoServico).getDescription());
        if (gerarAno && !disAcordo) {
          ano = 12;
          referencia = "01/01/" + mensagemConvencao.getReferencia().substring(3);
          diaOriginal = mensagemConvencao.getVencimento().substring(0, 2);
          vencto = diaOriginal + "/01/" + mensagemConvencao.getVencimento().substring(6, 10);
          if (iservicos == 1) {
            vencto = dataHoje.incrementarMesesUltimoDia(1, vencto);
          } else {
            vencto = dataHoje.incrementarMeses(1, vencto);
          }
        } else {
          ano = 1;
          referencia = mensagemConvencao.getReferencia();
          diaOriginal = mensagemConvencao.getVencimento().substring(0, 2);
          vencto = mensagemConvencao.getVencimento();
        }

        switch (processarGrupos) {
            //  SALVAR PARA TODOS OS GRUPOS DESTA CONVENÇÃO
          case 1:
            {
              int conv =
                  Integer.parseInt(this.getListaConvencoes().get(idConvencao).getDescription());
              List<GrupoCidade> listgc = dbc.pesquisarGruposPorConvencao(conv);
              for (int l = 0; l < ano; l++) {
                for (int k = 0; k < listgc.size(); k++) {
                  if (gerarAno && !disAcordo) {
                    msgConfirma =
                        this.insertMensagem(
                            conv,
                            listgc.get(k).getId(),
                            iservicos,
                            itiposervico,
                            referencia.substring(3),
                            vencto);
                  } else {
                    msgConfirma =
                        this.insertMensagem(
                            conv,
                            listgc.get(k).getId(),
                            iservicos,
                            itiposervico,
                            referencia,
                            vencto);
                  }
                }
                referencia = dataHoje.incrementarMeses(1, referencia);
                if (iservicos == 1) {
                  vencto = dataHoje.incrementarMesesUltimoDia(1, vencto);
                } else {
                  vencto = diaOriginal + vencto.substring(2, 10);
                  vencto = dataHoje.incrementarMeses(1, vencto);
                }
              }
              break;
            }
            // SALVAR PARA TODAS AS CONVENÇÕES DESTE GRUPO
          case 2:
            {
              int grupoC =
                  Integer.parseInt(this.getListaGrupoCidade().get(idGrupo).getDescription());
              List<Convencao> listc = dbc.pesquisarConvencaoPorGrupos(grupoC);
              for (int l = 0; l < ano; l++) {
                for (int k = 0; k < listc.size(); k++) {
                  if (gerarAno && !disAcordo) {
                    msgConfirma =
                        this.insertMensagem(
                            listc.get(k).getId(),
                            grupoC,
                            iservicos,
                            itiposervico,
                            referencia.substring(3),
                            vencto);
                  } else {
                    msgConfirma =
                        this.insertMensagem(
                            listc.get(k).getId(),
                            grupoC,
                            iservicos,
                            itiposervico,
                            referencia,
                            vencto);
                  }
                }
                referencia = dataHoje.incrementarMeses(1, referencia);
                if (iservicos == 1) {
                  vencto = dataHoje.incrementarMesesUltimoDia(1, vencto);
                } else {
                  vencto = diaOriginal + vencto.substring(2, 10);
                  vencto = dataHoje.incrementarMeses(1, vencto);
                }
              }
              break;
            }
            // SALVAR PARA TODOS OS GRUPOS E CONVENÇÕES
          case 3:
            {
              List<SelectItem> listc = this.getListaConvencoes();
              for (int l = 0; l < ano; l++) {
                for (int k = 0; k < listc.size(); k++) {
                  List<GrupoCidade> listgc =
                      dbc.pesquisarGruposPorConvencao(
                          Integer.parseInt(listc.get(k).getDescription()));
                  for (int w = 0; w < listgc.size(); w++) {
                    if (gerarAno && !disAcordo) {
                      msgConfirma =
                          this.insertMensagem(
                              Integer.parseInt(listc.get(k).getDescription()),
                              listgc.get(w).getId(),
                              iservicos,
                              itiposervico,
                              referencia.substring(3),
                              vencto);
                    } else {
                      msgConfirma =
                          this.insertMensagem(
                              Integer.parseInt(listc.get(k).getDescription()),
                              listgc.get(w).getId(),
                              iservicos,
                              itiposervico,
                              referencia,
                              vencto);
                    }
                  }
                }
                referencia = dataHoje.incrementarMeses(1, referencia);
                if (iservicos == 1) {
                  vencto = dataHoje.incrementarMesesUltimoDia(1, vencto);
                } else {
                  vencto = diaOriginal + vencto.substring(2, 10);
                  vencto = dataHoje.incrementarMeses(1, vencto);
                }
              }
              break;
            }
            // NENHUMA DESTAS OPÇÕES
          case 4:
            {
              int
                  conv =
                      Integer.parseInt(this.getListaConvencoes().get(idConvencao).getDescription()),
                  grupoC =
                      Integer.parseInt(this.getListaGrupoCidade().get(idGrupo).getDescription());
              for (int l = 0; l < ano; l++) {
                if (gerarAno && !disAcordo) {
                  msgConfirma =
                      this.insertMensagem(
                          conv, grupoC, iservicos, itiposervico, referencia.substring(3), vencto);
                } else {
                  msgConfirma =
                      this.insertMensagem(
                          conv, grupoC, iservicos, itiposervico, referencia, vencto);
                }

                referencia = dataHoje.incrementarMeses(1, referencia);
                if (iservicos == 1) {
                  vencto = dataHoje.incrementarMesesUltimoDia(1, vencto);
                } else {
                  vencto = diaOriginal + vencto.substring(2, 10);
                  vencto = dataHoje.incrementarMeses(1, vencto);
                }
              }
              break;
            }
        }
      } else {
        Dao dao = new Dao();
        MensagemConvencao men = null;
        NovoLog novoLog = new NovoLog();
        if (processarTipoServicos) {
          List<MensagemConvencao> lista =
              db.mesmoTipoServico(
                  Integer.parseInt(this.getListaServico().get(idServico).getDescription()),
                  Integer.parseInt(this.getListaTipoServico().get(idTipoServico).getDescription()),
                  mensagemConvencao.getReferencia().substring(3));
          for (int i = 0; i < lista.size(); i++) {
            lista.get(i).setMensagemCompensacao(mensagemConvencao.getMensagemCompensacao());
            lista.get(i).setMensagemContribuinte(mensagemConvencao.getMensagemContribuinte());
            lista.get(i).setVencimento(vencimento);
            men =
                db.verificaMensagem(
                    lista.get(i).getConvencao().getId(),
                    lista.get(i).getServicos().getId(),
                    lista.get(i).getTipoServico().getId(),
                    lista.get(i).getGrupoCidade().getId(),
                    lista.get(i).getReferencia());
            if ((men == null) || (men.getId() != -1)) {
              MensagemConvencao mcBefore = (MensagemConvencao) dao.find(men);
              String beforeUpdate =
                  " - Referência: "
                      + mcBefore.getReferencia()
                      + " - Vencimento: "
                      + mcBefore.getVencimento()
                      + " - Serviço: ("
                      + mcBefore.getServicos().getId()
                      + ") "
                      + " - Tipo Serviço: ("
                      + mcBefore.getTipoServico().getId()
                      + ") "
                      + mcBefore.getTipoServico().getDescricao()
                      + " - Convenção: ("
                      + mcBefore.getConvencao().getId()
                      + ") "
                      + mcBefore.getConvencao().getDescricao()
                      + " - Grupo Cidade: ("
                      + mcBefore.getGrupoCidade().getId()
                      + ") "
                      + mcBefore.getGrupoCidade().getDescricao()
                      + " - Mensagem Compensação: "
                      + mcBefore.getMensagemCompensacao();
              if (db.update(lista.get(i))) {
                msgConfirma = "Mensagem atualizado com sucesso!";
                novoLog.update(
                    beforeUpdate,
                    " - Referência: "
                        + men.getReferencia()
                        + " - Vencimento: "
                        + men.getVencimento()
                        + " - Serviço: ("
                        + men.getServicos().getId()
                        + ") "
                        + " - Tipo Serviço: ("
                        + men.getTipoServico().getId()
                        + ") "
                        + men.getTipoServico().getDescricao()
                        + " - Convenção: ("
                        + men.getConvencao().getId()
                        + ") "
                        + men.getConvencao().getDescricao()
                        + " - Grupo Cidade: ("
                        + men.getGrupoCidade().getId()
                        + ") "
                        + men.getGrupoCidade().getDescricao()
                        + " - Mensagem Compensação: "
                        + men.getMensagemCompensacao()
                        + " - Mensagem Contribuinte: "
                        + men.getMensagemContribuinte());
                GenericaMensagem.info("Sucesso", msgConfirma);
              } else {
                msgConfirma = "Ocorreu um erro ao atualizar!";
                GenericaMensagem.warn("Erro", msgConfirma);
              }
            }
          }
        } else {
          men =
              db.verificaMensagem(
                  mensagemConvencao.getConvencao().getId(),
                  mensagemConvencao.getServicos().getId(),
                  mensagemConvencao.getTipoServico().getId(),
                  mensagemConvencao.getGrupoCidade().getId(),
                  mensagemConvencao.getReferencia());
          MensagemConvencao mcBefore = (MensagemConvencao) dao.find(mensagemConvencao);
          String beforeUpdate =
              " - Referência: "
                  + mcBefore.getReferencia()
                  + " - Vencimento: "
                  + mcBefore.getVencimento()
                  + " - Serviço: ("
                  + mcBefore.getServicos().getId()
                  + ") "
                  + " - Tipo Serviço: ("
                  + mcBefore.getTipoServico().getId()
                  + ") "
                  + mcBefore.getTipoServico().getDescricao()
                  + " - Convenção: ("
                  + mcBefore.getConvencao().getId()
                  + ") "
                  + mcBefore.getConvencao().getDescricao()
                  + " - Grupo Cidade: ("
                  + mcBefore.getGrupoCidade().getId()
                  + ") "
                  + mcBefore.getGrupoCidade().getDescricao()
                  + " - Mensagem Compensação: "
                  + mcBefore.getMensagemCompensacao();
          if (men == null || (men.getId() == mensagemConvencao.getId())) {
            if (db.update(mensagemConvencao)) {
              novoLog.update(
                  beforeUpdate,
                  " - Referência: "
                      + mensagemConvencao.getReferencia()
                      + " - Vencimento: "
                      + mensagemConvencao.getVencimento()
                      + " - Serviço: ("
                      + mensagemConvencao.getServicos().getId()
                      + ") "
                      + " - Tipo Serviço: ("
                      + mensagemConvencao.getTipoServico().getId()
                      + ") "
                      + mensagemConvencao.getTipoServico().getDescricao()
                      + " - Convenção: ("
                      + mensagemConvencao.getConvencao().getId()
                      + ") "
                      + mensagemConvencao.getConvencao().getDescricao()
                      + " - Grupo Cidade: ("
                      + mensagemConvencao.getGrupoCidade().getId()
                      + ") "
                      + mensagemConvencao.getGrupoCidade().getDescricao()
                      + " - Mensagem Compensação: "
                      + mensagemConvencao.getMensagemCompensacao()
                      + " - Mensagem Contribuinte: "
                      + mensagemConvencao.getMensagemContribuinte());
              msgConfirma = "Mensagem atualizado com sucesso!";
              GenericaMensagem.info("Sucesso", msgConfirma);
            } else {
              msgConfirma = "Ocorreu um erro ao atualizar!";
              GenericaMensagem.warn("Erro", msgConfirma);
            }
          } else {
            msgConfirma = "Mensagem já existe!";
            GenericaMensagem.warn("Erro", msgConfirma);
          }
        }
      }
    } catch (Exception e) {
      msgConfirma = e.getMessage();
      GenericaMensagem.warn("Erro", msgConfirma);
    }
    //        mensagemConvencao = new MensagemConvencao();
    //        idGrupo = 0;
    //        idConvencao = 0;
    //        idServico = 0;
    //        idTipoServico = 0;
    return null;
  }