package gcom.util; import gcom.cadastro.DbVersaoBase; import gcom.cadastro.cliente.Cliente; import gcom.cadastro.geografico.FiltroMunicipioFeriado; import gcom.cadastro.geografico.Municipio; import gcom.cadastro.geografico.MunicipioFeriado; import gcom.cadastro.imovel.Imovel; import gcom.cadastro.sistemaparametro.NacionalFeriado; import gcom.cadastro.sistemaparametro.SistemaParametro; import gcom.fachada.Fachada; import gcom.seguranca.FiltroSegurancaParametro; import gcom.seguranca.SegurancaParametro; import gcom.seguranca.acesso.OperacaoEfetuada; import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper; import gcom.util.email.ServicosEmail; import gcom.util.filtro.Filtro; import gcom.util.filtro.ParametroSimples; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.zip.ZipOutputStream; import javax.ejb.CreateException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; public class ControladorUtilSEJB implements SessionBean { private static final long serialVersionUID = 1L; private IRepositorioUtil repositorioUtil; SessionContext sessionContext; public void ejbCreate() throws CreateException { repositorioUtil = RepositorioUtilHBM.getInstancia(); } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } public Object obterPorId(Class classe, Integer id) throws ControladorException{ try { return repositorioUtil.obterPorId(classe, id); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public int registroMaximo(Class classe) throws ControladorException { try { return repositorioUtil.registroMaximo(classe); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public int valorMaximo(Class classe, String atributo) throws ControladorException { try { return repositorioUtil.valorMaximo(classe, atributo); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public int valorMaximo(Class classe, String atributo, String parametro1, String parametro2) throws ControladorException { try { return repositorioUtil.valorMaximo(classe, atributo, parametro1, parametro2); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public SistemaParametro pesquisarParametrosDoSistema() throws ControladorException { try { return repositorioUtil.pesquisarParametrosDoSistema(); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public Collection limiteMaximoFiltroPesquisa(Filtro filtro, String pacoteNomeObjeto, int limite) throws ControladorException { try { return repositorioUtil.limiteMaximoFiltroPesquisa(filtro, pacoteNomeObjeto, limite); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public Object inserir(Object objeto) throws ControladorException { try { Object sequence = null; Integer id = null; if (objeto instanceof Imovel) { sequence = repositorioUtil.obterNextVal(objeto); id = Util.obterDigitoVerificadorModulo11(((Integer) sequence).toString()); ((Imovel) objeto).setId(new Integer((((Integer) sequence).toString() + id.toString()))); ((Imovel) objeto).setCodigoDebitoAutomatico(new Integer((((Integer) sequence).toString() + id.toString()))); } else if (objeto instanceof Cliente) { sequence = repositorioUtil.obterNextVal(objeto); id = Util.obterDigitoVerificadorModulo11(((Integer) sequence).toString()); ((Cliente) objeto).setId(new Integer((((Integer) sequence).toString() + id.toString()))); } return repositorioUtil.inserir(objeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public Collection pesquisar(Filtro filtro, String pacoteNomeObjeto) throws ControladorException { try { return repositorioUtil.pesquisar(filtro, pacoteNomeObjeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public Collection pesquisar(Collection ids, Filtro filtro, String pacoteNomeObjeto) throws ControladorException { try { return repositorioUtil.pesquisar(ids, filtro, pacoteNomeObjeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public void remover(String[] ids, String pacoteNomeObjeto, OperacaoEfetuada operacaoEfetuada, Collection<UsuarioAcaoUsuarioHelper> acaoUsuarioHelper) throws ControladorException { if (ids != null && ids.length != 0) { for (int i = 0; i < ids.length; i++) { int id = Integer.parseInt(ids[i]); try { repositorioUtil.remover(id, pacoteNomeObjeto, operacaoEfetuada, acaoUsuarioHelper); } catch (RemocaoRegistroNaoExistenteException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.registro_remocao_nao_existente", ex); } catch (RemocaoInvalidaException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.dependencias.existentes", ex); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } } } public void removerUm(int id, String pacoteNomeObjeto, OperacaoEfetuada operacaoEfetuada, Collection<UsuarioAcaoUsuarioHelper> acaoUsuarioHelper) throws ControladorException { try { repositorioUtil.remover(id, pacoteNomeObjeto, operacaoEfetuada, acaoUsuarioHelper); } catch (RemocaoRegistroNaoExistenteException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.registro_remocao_nao_existente", ex); } catch (RemocaoInvalidaException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.dependencias.existentes", ex); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } /** * FAVOR N�O USAR!!! M�todo para ser utilizada apenas em logradouro * (atualizar) */ public void verificaObjetoRemocao(int id, String pacoteNomeObjeto, OperacaoEfetuada operacaoEfetuada, Collection<UsuarioAcaoUsuarioHelper> acaoUsuarioHelper) throws ControladorException { try { repositorioUtil.remover(id, pacoteNomeObjeto, operacaoEfetuada, acaoUsuarioHelper); } catch (RemocaoRegistroNaoExistenteException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.registro_remocao_nao_existente", ex); } catch (RemocaoInvalidaException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.dependencias.existentes", ex); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } sessionContext.setRollbackOnly(); } public void remover(Object object) throws ControladorException { try { repositorioUtil.remover(object); } catch (RemocaoRegistroNaoExistenteException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.registro_remocao_nao_existente", ex); } catch (RemocaoInvalidaException ex1) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.dependencias.existentes", ex1); } catch (ErroRepositorioException e) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", e); } } public Object inserirOuAtualizar(Object objeto) throws ControladorException { try { return repositorioUtil.inserirOuAtualizar(objeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public void atualizar(Object objeto) throws ControladorException { try { repositorioUtil.atualizar(objeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public void validarCampoFinalMaiorIgualCampoInicial(Date inicio, Date fim, String msgErro) throws ControladorException { if (inicio != null && fim != null) { if (!inicio.equals("") && !fim.equals("")) { if (inicio.after(fim)) { throw new ControladorException(msgErro); } } } } public void validarCampoFinalMaiorIgualCampoInicial(Integer inicio, Integer fim, String msgErro) throws ControladorException { if (inicio != null && fim != null) { if (!inicio.equals("") && !fim.equals("")) { if (inicio.compareTo(fim) == 1) { throw new ControladorException(msgErro); } } } } public void validarCampoFinalMaiorIgualCampoInicial(BigDecimal inicio, BigDecimal fim, String msgErro) throws ControladorException { if (inicio != null && fim != null) { if (!inicio.equals("") && !fim.equals("")) { if (inicio.compareTo(fim) == 1) { throw new ControladorException(msgErro); } } } } public void validarDataMenorDataAtual(Date data, String msgErro) throws ControladorException { Date dataAtual = new Date(); if (data != null) { if (!data.equals("")) { if (data.compareTo(dataAtual) == 1) { throw new ControladorException(msgErro, null, Util.formatarData(dataAtual)); } } } } public void validarAnoMesMenorAnoMesAtual(Integer anoMes, String msgErro) throws ControladorException { Date dataAtual = new Date(); Integer anoMesAtual = Util.recuperaAnoMesDaData(dataAtual); if (anoMes != null) { if (!anoMes.equals("")) { if (anoMes.compareTo(anoMesAtual) == 1) { throw new ControladorException(msgErro); } } } } @SuppressWarnings("rawtypes") public Collection pesquisar(Filtro filtro, int pageOffset, String pacoteNomeObjeto) throws ControladorException { try { return repositorioUtil.pesquisar(filtro, pageOffset, pacoteNomeObjeto); } catch (ErroRepositorioException ex) { throw new ControladorException("erro.sistema", ex); } } public int totalRegistrosPesquisa(Filtro filtro, String pacoteNomeObjeto) throws ControladorException { try { return repositorioUtil.totalRegistrosPesquisa(filtro, pacoteNomeObjeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public void validarAnoMesInicialFinalPeriodo(String anoMesReferenciaInicial, String anoMesReferenciaFinal, String descricaoCampoAnoMesReferenciaInicial, String descricaoAnoMesReferenciaFinal, String mensagemErroDoApplicationProperties) throws ControladorException { if ((anoMesReferenciaInicial != null && !anoMesReferenciaInicial.equals("")) && (anoMesReferenciaFinal != null && !anoMesReferenciaFinal.equals(""))) { if (anoMesReferenciaInicial.length() == 7 & anoMesReferenciaFinal.length() == 7) { String anoInicial = anoMesReferenciaInicial.substring(3, 7); String mesInicial = anoMesReferenciaInicial.substring(0, 2); String anoFinal = anoMesReferenciaFinal.substring(3, 7); String mesFinal = anoMesReferenciaFinal.substring(0, 2); boolean valida = Util.validarAnoMes(anoMesReferenciaInicial); if (valida) { throw new ControladorException("errors.invalid", null, descricaoCampoAnoMesReferenciaInicial); } valida = Util.validarAnoMes(anoMesReferenciaFinal); if (valida) { throw new ControladorException("errors.invalid", null, descricaoAnoMesReferenciaFinal); } Calendar periodoInicial = new GregorianCalendar(); periodoInicial.set(Calendar.DATE, 1); periodoInicial.set(Calendar.MONTH, (new Integer(mesInicial).intValue() - 1)); periodoInicial.set(Calendar.YEAR, new Integer(anoInicial).intValue()); Calendar periodoFinal = new GregorianCalendar(); periodoFinal.set(Calendar.DATE, 1); periodoFinal.set(Calendar.MONTH, (new Integer(mesFinal).intValue() - 1)); periodoFinal.set(Calendar.YEAR, new Integer(anoFinal).intValue()); if (periodoInicial.compareTo(periodoFinal) > 0) { throw new ControladorException(mensagemErroDoApplicationProperties); } } else { if (anoMesReferenciaInicial.length() < 7) { throw new ControladorException("errors.invalid", null, descricaoCampoAnoMesReferenciaInicial); } if (anoMesReferenciaFinal.length() < 7) { throw new ControladorException("errors.invalid", null, descricaoAnoMesReferenciaFinal); } } } } public void verificarDataInicialFinalPeriodo(String dataPeriodoInicial, String dataPeriodoFinal, String descricaoCampoDataReferenciaInicial, String descricaoDataReferenciaFinal, String mensagemErroDoApplicationProperties) throws ControladorException { if ((dataPeriodoInicial != null && !dataPeriodoInicial.equals("")) && (dataPeriodoFinal != null && !dataPeriodoFinal.equals(""))) { if (dataPeriodoInicial.length() == 10 & dataPeriodoFinal.length() == 10) { String anoInicial = dataPeriodoInicial.substring(6, 10); String mesInicial = dataPeriodoInicial.substring(3, 5); String diaInicial = dataPeriodoInicial.substring(0, 2); String anoFinal = dataPeriodoFinal.substring(6, 10); String mesFinal = dataPeriodoFinal.substring(3, 5); String diaFinal = dataPeriodoFinal.substring(0, 2); boolean valida = Util.validarDiaMesAno(dataPeriodoInicial); if (valida) { throw new ControladorException("errors.invalid", null, descricaoCampoDataReferenciaInicial); } valida = Util.validarDiaMesAno(dataPeriodoFinal); if (valida) { throw new ControladorException("errors.invalid", null, descricaoDataReferenciaFinal); } Calendar periodoInicial = new GregorianCalendar(); periodoInicial.set(Calendar.DATE, new Integer(diaInicial).intValue()); periodoInicial.set(Calendar.MONTH, (new Integer(mesInicial).intValue() - 1)); periodoInicial.set(Calendar.YEAR, new Integer(anoInicial).intValue()); Calendar periodoFinal = new GregorianCalendar(); periodoFinal.set(Calendar.DATE, new Integer(diaFinal).intValue()); periodoFinal.set(Calendar.MONTH, (new Integer(mesFinal).intValue() - 1)); periodoFinal.set(Calendar.YEAR, new Integer(anoFinal).intValue()); if (periodoInicial.compareTo(periodoFinal) > 0) { throw new ControladorException(mensagemErroDoApplicationProperties); } } else { if (dataPeriodoInicial.length() < 10) { throw new ControladorException("errors.invalid", null, descricaoCampoDataReferenciaInicial); } if (dataPeriodoFinal.length() < 10) { throw new ControladorException("errors.invalid", null, descricaoDataReferenciaFinal); } } } } @SuppressWarnings("rawtypes") public void inserirBatch(List list) throws ControladorException { try { repositorioUtil.inserirBatch(list); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public Collection pesquisar(Filtro filtro, String pacoteNomeObjeto, String nomeTabela) throws ControladorException { Collection colecao = null; try { colecao = repositorioUtil.pesquisar(filtro, pacoteNomeObjeto); if (colecao == null || colecao.isEmpty()) { throw new ControladorException("atencao.entidade_sem_dados_para_selecao", null, nomeTabela); } } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } return colecao; } public Collection<NacionalFeriado> pesquisarFeriadosNacionais() throws ControladorException { try { return repositorioUtil.pesquisarFeriadosNacionais(); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public void atualizarSistemaParametro(SistemaParametro sistemaParametro) throws ControladorException { if (sistemaParametro != null) { SistemaParametro sistemaParametroNaBase = this.pesquisarParametrosDoSistema(); if ((sistemaParametroNaBase.getUltimaAlteracao().after(sistemaParametro.getUltimaAlteracao()))) { sessionContext.setRollbackOnly(); throw new ControladorException("atencao.atualizacao.timestamp"); } sistemaParametro.setUltimaAlteracao(new Date()); } this.atualizar(sistemaParametro); } public DbVersaoBase pesquisarDbVersaoBase() throws ControladorException { try { return repositorioUtil.pesquisarDbVersaoBase(); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings({ "rawtypes", "unchecked" }) public Map<Integer, Map<Object, Object>> dividirColecao(Collection colecao) { Map<Integer, Map<Object, Object>> mapOrdenada = new HashMap(); List listColecao = new ArrayList(); listColecao.addAll(colecao); int quantidadeContas = 0; int quantidadeContasColecao = listColecao.size(); int metadeColecao = 0; if (quantidadeContasColecao % 2 == 0) { metadeColecao = quantidadeContasColecao / 2; } else { metadeColecao = (quantidadeContasColecao / 2) + 1; } while (quantidadeContas < metadeColecao) { Map<Object, Object> map = new HashMap(); Object object1 = (Object) listColecao.get(quantidadeContas); Object object2 = null; if (metadeColecao + quantidadeContas < quantidadeContasColecao) { object2 = (Object) listColecao.get(metadeColecao + quantidadeContas); } map.put(object1, object2); mapOrdenada.put(quantidadeContas, map); map = null; quantidadeContas++; } quantidadeContasColecao = 0; return mapOrdenada; } public void mandaArquivoLeituraEmail(String nomeArquivo, StringBuilder arquivo, String emailReceptor, String emailRemetente, String tituloMensagem, String corpoMensagem) throws ControladorException { try { File leitura = File.createTempFile(getCaminhoDownloadArquivos("") + nomeArquivo, ".txt"); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(leitura.getAbsolutePath()))); out.write(arquivo.toString()); out.close(); File compactado = new File(getCaminhoDownloadArquivos("") + nomeArquivo + ".zip"); // nomeZip ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(compactado)); ZipUtil.adicionarArquivo(zos, leitura); zos.close(); ServicosEmail.enviarMensagemArquivoAnexado(emailReceptor, emailRemetente, tituloMensagem, corpoMensagem, compactado); leitura.delete(); } catch (IOException e) { throw new ControladorException("erro.sistema", e); } catch (Exception e) { throw new ControladorException("erro.sistema", e); } } @SuppressWarnings("unchecked") public Integer calcularDiferencaDiasUteisEntreDuasDatas(Date dataInicio, Date dataFim, Municipio municipio) throws ControladorException { Integer qtdDiasUteis = 0; Collection<NacionalFeriado> colecaoFeriadosNacionais = null; try { colecaoFeriadosNacionais = repositorioUtil.pesquisarFeriadosNacionais(); } catch (ErroRepositorioException ex) { ex.printStackTrace(); throw new ControladorException("erro.sistema", ex); } FiltroMunicipioFeriado filtroMunicipioFeriado = new FiltroMunicipioFeriado(); filtroMunicipioFeriado.adicionarParametro(new ParametroSimples(FiltroMunicipioFeriado.ID_MUNICIPIO, municipio.getId())); Collection<MunicipioFeriado> colecaoFeriadosMunicipais = this.pesquisar(filtroMunicipioFeriado, MunicipioFeriado.class.getName()); Calendar dataInicioCalendar = new GregorianCalendar(); dataInicioCalendar.setTime(dataInicio); while (dataInicioCalendar.getTime().compareTo(Util.formatarDataSemHora(dataFim)) < 0) { if (Util.ehDiaUtil(Util.formatarDataSemHora(dataInicioCalendar.getTime()), colecaoFeriadosNacionais, colecaoFeriadosMunicipais)) { qtdDiasUteis++; } dataInicioCalendar.add(Calendar.DAY_OF_MONTH, 1); } return qtdDiasUteis; } @SuppressWarnings("rawtypes") public Collection pesquisarGerencial(Filtro filtro, String pacoteNomeObjeto) throws ControladorException { try { return repositorioUtil.pesquisarGerencial(filtro, pacoteNomeObjeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } public Object inserirComCommit(Object objeto) throws ControladorException { try { return repositorioUtil.inserir(objeto); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } @SuppressWarnings("rawtypes") public String getCaminhoDownloadArquivos(String modulo) { FiltroSegurancaParametro filtroSegurancaParametro = new FiltroSegurancaParametro(); filtroSegurancaParametro.adicionarParametro(new ParametroSimples(FiltroSegurancaParametro.NOME, SegurancaParametro.NOME_PARAMETRO_SEGURANCA.CAMINHO_ARQUIVOS.toString())); Collection parametros = Fachada.getInstancia().pesquisar(filtroSegurancaParametro, SegurancaParametro.class.getName()); SegurancaParametro caminho = (SegurancaParametro) parametros.iterator().next(); return caminho.getValor() + "/" + modulo + "/"; } public Collection listar(Class tipo) throws ControladorException{ try { return repositorioUtil.listar(tipo); } catch (ErroRepositorioException ex) { sessionContext.setRollbackOnly(); throw new ControladorException("erro.sistema", ex); } } }