package br.com.centralit.bpm.integracao;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.bpm.dto.EventoFluxoDTO;
import br.com.centralit.bpm.util.Enumerados.SituacaoInstanciaFluxo;
import br.com.centralit.bpm.util.Enumerados.SituacaoItemTrabalho;
import br.com.centralit.bpm.util.Enumerados.TipoElementoFluxo;
import br.com.citframework.excecao.PersistenceException;
public class EventoFluxoDao extends ItemTrabalhoFluxoDao {
@Override
public Class<EventoFluxoDTO> getBean() {
return EventoFluxoDTO.class;
}
private StringBuilder getSQLRestoreAll() {
final StringBuilder sql = new StringBuilder();
sql.append("SELECT item.idItemTrabalho, item.idInstancia, item.idElemento, item.dataHoraCriacao, ");
sql.append(" item.dataHoraFinalizacao, item.dataHoraExecucao, item.situacao, elem.intervalo, ");
sql.append(" inst.idFluxo, tipo.idTipoFluxo, tipo.nomeClasseFluxo ");
sql.append(" FROM bpm_itemtrabalhofluxo item inner join bpm_elementofluxo elem on elem.idElemento = item.idElemento ");
sql.append(" inner join bpm_instanciafluxo inst on inst.idInstancia = item.idInstancia ");
sql.append(" inner join bpm_fluxo fluxo on fluxo.idFluxo = inst.idFluxo ");
sql.append(" inner join bpm_tipofluxo tipo on tipo.idTipoFluxo = fluxo.idTipoFluxo ");
sql.append(" WHERE elem.tipoElemento = '" + TipoElementoFluxo.Evento.name() + "'");
return sql;
}
private List<String> getColunasRestoreAll() {
final List<String> listRetorno = new ArrayList<>();
listRetorno.add("idItemTrabalho");
listRetorno.add("idInstancia");
listRetorno.add("idElemento");
listRetorno.add("dataHoraCriacao");
listRetorno.add("dataHoraFinalizacao");
listRetorno.add("dataHoraExecucao");
listRetorno.add("situacao");
listRetorno.add("intervalo");
listRetorno.add("idFluxo");
listRetorno.add("idTipoFluxo");
listRetorno.add("nomeClasseFluxo");
return listRetorno;
}
public Collection<EventoFluxoDTO> findDisponiveis() throws PersistenceException {
final List<Object> parametro = new ArrayList<>();
final StringBuilder sql = this.getSQLRestoreAll();
sql.append(" AND item.situacao <> ? ");
sql.append(" AND item.situacao <> ? ");
sql.append(" AND item.situacao <> ? ");
sql.append(" AND inst.situacao = ? ");
parametro.add(SituacaoItemTrabalho.Cancelado.name());
parametro.add(SituacaoItemTrabalho.Executado.name());
parametro.add(SituacaoItemTrabalho.Suspenso.name());
parametro.add(SituacaoInstanciaFluxo.Aberta.name());
sql.append("ORDER BY item.dataHoraCriacao");
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
return engine.listConvertion(this.getBean(), lista, this.getColunasRestoreAll());
}
public Collection<EventoFluxoDTO> findDisponiveis(final Integer idInstancia) throws PersistenceException {
final List<Object> parametro = new ArrayList<>();
final StringBuilder sql = this.getSQLRestoreAll();
sql.append(" AND item.idInstancia = ? ");
sql.append(" AND item.situacao <> ? ");
sql.append(" AND item.situacao <> ? ");
sql.append(" AND item.situacao <> ? ");
parametro.add(idInstancia);
parametro.add(SituacaoItemTrabalho.Cancelado.name());
parametro.add(SituacaoItemTrabalho.Executado.name());
parametro.add(SituacaoItemTrabalho.Suspenso.name());
sql.append("ORDER BY item.dataHoraCriacao");
final List<?> lista = this.execSQL(sql.toString(), parametro.toArray());
return engine.listConvertion(this.getBean(), lista, this.getColunasRestoreAll());
}
}