package br.com.centralit.bpm.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.bpm.dto.ElementoFluxoDTO; import br.com.centralit.bpm.dto.FluxoDTO; import br.com.centralit.bpm.util.Enumerados.TipoElementoFluxo; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.integracao.TransactionControler; import br.com.citframework.util.Constantes; public class FluxoDao extends CrudDaoDefaultImpl { private static final String TABLE_NAME = "bpm_fluxo"; private static final String SQL_RESTORE = "SELECT f.idFluxo, t.nomeFluxo, t.descricao, t.idTipoFluxo, t.nomeClasseFluxo, f.variaveis, f.versao, f.conteudoXml, f.dataInicio, f.dataFim, t.idProcessoNegocio FROM Bpm_Fluxo f INNER JOIN Bpm_TipoFluxo t ON t.idTipoFluxo = f.idTipoFluxo "; private ElementoFluxoDao elementoFluxoDao; private SequenciaFluxoDao sequenciaFluxoDao; public FluxoDao() { super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Class<FluxoDTO> getBean() { return FluxoDTO.class; } private List<String> getListaDeCampos() { final List<String> listRetorno = new ArrayList<>(); listRetorno.add("idFluxo"); listRetorno.add("nomeFluxo"); listRetorno.add("descricao"); listRetorno.add("idTipoFluxo"); listRetorno.add("nomeClasseFluxo"); listRetorno.add("variaveis"); listRetorno.add("versao"); listRetorno.add("conteudoXml"); listRetorno.add("dataInicio"); listRetorno.add("dataFim"); listRetorno.add("idProcessoNegocio"); return listRetorno; } private List<FluxoDTO> recuperaEstrutura(final List<FluxoDTO> list) throws PersistenceException { if (list != null) { final ElementoFluxoDao elementoDao = new ElementoFluxoDao(); final ElementoFluxoInicioDao fluxoInicioDao = new ElementoFluxoInicioDao(); final ElementoFluxoFinalizacaoDao fluxoFinalizacaoDao = new ElementoFluxoFinalizacaoDao(); final ElementoFluxoTarefaDao fluxoTarefaDao = new ElementoFluxoTarefaDao(); final ElementoFluxoPortaDao fluxoPortaDao = new ElementoFluxoPortaDao(); final ElementoFluxoScriptDao fluxoScriptDao = new ElementoFluxoScriptDao(); final ElementoFluxoEventoDao fluxoEventoDao = new ElementoFluxoEventoDao(); final SequenciaFluxoDao fluxoSequenciaDao = new SequenciaFluxoDao(); final TransactionControler tc = this.getTransactionControler(); fluxoInicioDao.setTransactionControler(tc); fluxoFinalizacaoDao.setTransactionControler(tc); fluxoTarefaDao.setTransactionControler(tc); fluxoPortaDao.setTransactionControler(tc); fluxoScriptDao.setTransactionControler(tc); fluxoSequenciaDao.setTransactionControler(tc); fluxoEventoDao.setTransactionControler(tc); elementoDao.setTransactionControler(tc); for (final FluxoDTO fluxoDto : list) { String id = fluxoDto.getNomeFluxo().trim(); if (fluxoDto.getVersao() != null) { id += "_v" + fluxoDto.getVersao(); } fluxoDto.setIdentificador(id); final Integer idFluxo = fluxoDto.getIdFluxo(); fluxoDto.setInicioFluxo(fluxoInicioDao.restoreByIdFluxo(idFluxo)); fluxoDto.setColTarefas(fluxoTarefaDao.findByIdFluxo(idFluxo)); fluxoDto.setColScripts(fluxoScriptDao.findByIdFluxo(idFluxo)); fluxoDto.setColPortas(fluxoPortaDao.findByIdFluxo(idFluxo)); fluxoDto.setColEventos(fluxoEventoDao.findByIdFluxo(idFluxo)); fluxoDto.setColFinalizacoes(fluxoFinalizacaoDao.findByIdFluxo(idFluxo)); fluxoDto.setColSequenciamentos(fluxoSequenciaDao.findByIdFluxo(idFluxo)); fluxoDto.setColElementos(elementoDao.findAllByIdFluxo(idFluxo)); } } return list; } @Override public Collection<Field> getFields() { final Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("idFluxo", "idFluxo", true, true, false, false)); listFields.add(new Field("idTipoFluxo", "idTipoFluxo", false, false, false, false)); listFields.add(new Field("versao", "versao", false, false, false, false)); listFields.add(new Field("variaveis", "variaveis", false, false, false, false)); listFields.add(new Field("conteudoXml", "conteudoXml", false, false, false, false)); listFields.add(new Field("dataInicio", "dataInicio", false, false, false, false)); listFields.add(new Field("dataFim", "dataFim", false, false, false, false)); return listFields; } @Override public String getTableName() { return TABLE_NAME; } @Override public Collection<FluxoDTO> find(final IDto obj) throws PersistenceException { return null; } @Override public Collection list() throws PersistenceException { final String sql = SQL_RESTORE + " WHERE f.dataFim IS NULL ORDER BY t.nomeFluxo, f.idFluxo"; final List<?> lista = this.execSQL(sql, null); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //return this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public Collection listAll() throws PersistenceException { final String sql = SQL_RESTORE + " ORDER BY t.nomeFluxo, f.idFluxo"; final List<?> lista = this.execSQL(sql, null); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //return this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } @Override public IDto restore(final IDto obj) throws PersistenceException { List<Integer> parametros = new ArrayList<>(); final StringBuilder sql = new StringBuilder(SQL_RESTORE + " WHERE f.idFluxo = ? "); parametros.add(((FluxoDTO) obj).getIdFluxo()); final List<?> lista = this.execSQL(sql.toString(), parametros.toArray()); final List<FluxoDTO> result = engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); if (result != null && !result.isEmpty()) { /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //return this.recuperaEstrutura((FluxoDTO) result.get(0)); return result.get(0); } return null; } public FluxoDTO findByTipoFluxo(final Integer idTipoFluxo) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE f.dataFim IS NULL AND f.idTipoFluxo = ? "; final List<?> lista = this.execSQL(sql, new Object[] { idTipoFluxo }); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //final List result = this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); final List result = engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); if (result != null && !result.isEmpty()) { return (FluxoDTO) result.get(0); } return null; } public Collection findTodosByTipoFluxo(final Integer idTipoFluxo) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE f.idTipoFluxo = ? "; final List<?> lista = this.execSQL(sql, new Object[] { idTipoFluxo }); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //return this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } public FluxoDTO findByVersao(final FluxoDTO fluxoDto) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE t.nomeFluxo = ? AND f.versao = ? "; final List lista = this.execSQL(sql, new Object[] { fluxoDto.getNomeFluxo(), fluxoDto.getVersao() }); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //final List result = this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); final List result = engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); if (result != null && !result.isEmpty()) { return (FluxoDTO) result.get(0); } return null; } public FluxoDTO findByNome(final String nomeFluxo) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE t.nomeFluxo = ? AND f.dataFim IS NULL "; final List<?> lista = this.execSQL(sql, new Object[] { nomeFluxo }); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //final List result = this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); final List result = engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); if (result != null && !result.isEmpty()) { return (FluxoDTO) result.get(0); } return null; } @Override public void updateNotNull(final IDto obj) throws PersistenceException { super.updateNotNull(obj); } public Collection findByIdProcessoNegocio(final Integer parm) throws PersistenceException { final String sql = SQL_RESTORE + " WHERE t.idProcessoNegocio = ? "; final List<?> lista = this.execSQL(sql, new Object[] { parm }); /** A recupera��o da estrutura n�o � necess�ria. Opera��o Usain Bolt - 27.01.2015 - carlos.santos */ //return this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); return engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); } /** * Recupera os Elementos do Fluxo (Tarefa, Script, Porta, Evento e Finaliza��o). * * @param fluxoDto * @return FluxoDTO - Fluxo com os Elementos. * @throws PersistenceException * @author valdoilo.damasceno * @since 23.01.2015 - Opera��o Usain Bolt. */ private FluxoDTO recuperaEstrutura(final FluxoDTO fluxoDto) throws PersistenceException { final TransactionControler tc = this.getTransactionControler(); this.getElementoFluxoDao().setTransactionControler(tc); String id = fluxoDto.getNomeFluxo().trim(); if (fluxoDto.getVersao() != null) { id += "_v" + fluxoDto.getVersao(); } fluxoDto.setIdentificador(id); List<ElementoFluxoDTO> listElementoFluxoDto = this.getElementoFluxoDao().findAllByIdFluxo(fluxoDto.getIdFluxo()); List<ElementoFluxoDTO> listTarefa = new ArrayList<ElementoFluxoDTO>(); List<ElementoFluxoDTO> listScript = new ArrayList<ElementoFluxoDTO>(); List<ElementoFluxoDTO> listPorta = new ArrayList<ElementoFluxoDTO>(); List<ElementoFluxoDTO> listEvento = new ArrayList<ElementoFluxoDTO>(); List<ElementoFluxoDTO> listFinalizacao = new ArrayList<ElementoFluxoDTO>(); if (listElementoFluxoDto != null && !listElementoFluxoDto.isEmpty()) { for (ElementoFluxoDTO elementoFluxoDto : listElementoFluxoDto) { TipoElementoFluxo tipoElementoFluxo = TipoElementoFluxo.valueOf(elementoFluxoDto.getTipoElemento()); switch (tipoElementoFluxo) { case Inicio: fluxoDto.setInicioFluxo(elementoFluxoDto); break; case Tarefa: listTarefa.add(elementoFluxoDto); break; case Script: listScript.add(elementoFluxoDto); break; case Porta: listPorta.add(elementoFluxoDto); break; case Evento: listEvento.add(elementoFluxoDto); break; case Finalizacao: listFinalizacao.add(elementoFluxoDto); break; default: break; } } } fluxoDto.setColTarefas(listTarefa); fluxoDto.setColScripts(listScript); fluxoDto.setColPortas(listPorta); fluxoDto.setColEventos(listEvento); fluxoDto.setColFinalizacoes(listFinalizacao); fluxoDto.setColSequenciamentos(this.getSequenciaFluxoDao().findByIdFluxo(fluxoDto.getIdFluxo())); fluxoDto.setColElementos(listElementoFluxoDto); return fluxoDto; } /** * Retorna uma inst�ncia de ElementoFluxoDao. * * @return ElementoFluxoDao * @author valdoilo.damasceno * @since 23.01.2015 - Upera��o Osain Bolt. */ private ElementoFluxoDao getElementoFluxoDao() { if (elementoFluxoDao == null) { elementoFluxoDao = new ElementoFluxoDao(); } return elementoFluxoDao; } private SequenciaFluxoDao getSequenciaFluxoDao() { if (sequenciaFluxoDao == null) { sequenciaFluxoDao = new SequenciaFluxoDao(); } return sequenciaFluxoDao; } /** * Restore do FluxoDTO com a estrutura. * * @param obj * @return IDto - Fluxo com os Elementos. * @throws PersistenceException * @author carlos.santos * @since 27.01.2015 - Opera��o Usain Bolt. */ public IDto restoreComEstrutura(final IDto obj) throws PersistenceException { List<Integer> parametros = new ArrayList<>(); final StringBuilder sql = new StringBuilder(SQL_RESTORE + " WHERE f.idFluxo = ? "); parametros.add(((FluxoDTO) obj).getIdFluxo()); final List<?> lista = this.execSQL(sql.toString(), parametros.toArray()); List<FluxoDTO> result = engine.listConvertion(this.getBean(), lista, this.getListaDeCampos()); if (result != null && !result.isEmpty()) { result = this.recuperaEstrutura(engine.listConvertion(this.getBean(), lista, this.getListaDeCampos())); return result.get(0); }else return null; } }