package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.CaracteristicaDTO;
import br.com.centralit.citcorpore.bean.EventoGrupoDTO;
import br.com.centralit.citcorpore.bean.EventoItemConfigDTO;
import br.com.centralit.citcorpore.bean.EventoItemConfigRelDTO;
import br.com.centralit.citcorpore.bean.GrupoItemConfiguracaoDTO;
import br.com.centralit.citcorpore.bean.ItemConfigEventoDTO;
import br.com.centralit.citcorpore.bean.ItemConfiguracaoDTO;
import br.com.centralit.citcorpore.bean.ValorDTO;
import br.com.centralit.citcorpore.componenteMaquina.ThreadDisparaEvento;
import br.com.centralit.citcorpore.integracao.EventoGrupoDao;
import br.com.centralit.citcorpore.integracao.EventoItemConfigDao;
import br.com.centralit.citcorpore.integracao.EventoItemConfigRelDao;
import br.com.centralit.citcorpore.integracao.ItemConfigEventoDao;
import br.com.centralit.citcorpore.integracao.ItemConfiguracaoDao;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.CrudDAO;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
public class EventoItemConfigServiceEjb extends CrudServiceImpl implements EventoItemConfigService {
private EventoItemConfigDao dao;
@Override
protected EventoItemConfigDao getDao() {
if (dao == null) {
dao = new EventoItemConfigDao();
}
return dao;
}
@Override
public IDto create(final IDto model) throws ServiceException, LogicException {
final CrudDAO crudDao = this.getDao();
final ItemConfigEventoDao itemConfigEventoDao = new ItemConfigEventoDao();
final EventoGrupoDao eventoGrupoDao = new EventoGrupoDao();
final EventoItemConfigRelDao eventoItemConfigRelDao = new EventoItemConfigRelDao();
final TransactionControler tc = new TransactionControlerImpl(crudDao.getAliasDB());
try {
this.validaCreate(model);
crudDao.setTransactionControler(tc);
itemConfigEventoDao.setTransactionControler(tc);
eventoGrupoDao.setTransactionControler(tc);
eventoItemConfigRelDao.setTransactionControler(tc);
tc.start();
crudDao.create(model);
final EventoItemConfigDTO eventoDto = (EventoItemConfigDTO) model;
this.generateTableRelationship(eventoDto, eventoGrupoDao, eventoItemConfigRelDao);
if (eventoDto.getLstItemConfigEvento() != null && eventoDto.getLstItemConfigEvento().size() > 0) {
for (final ItemConfigEventoDTO itemConfigEventoDto : eventoDto.getLstItemConfigEvento()) {
itemConfigEventoDto.setIdEvento(eventoDto.getIdEvento());
itemConfigEventoDao.create(itemConfigEventoDto);
// Dispara evento
this.shootEvent(itemConfigEventoDto, eventoDto);
}
}
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
return model;
}
@Override
public void update(final IDto model) throws ServiceException, LogicException {
final CrudDAO crudDao = this.getDao();
final ItemConfigEventoDao itemConfigEventoDao = new ItemConfigEventoDao();
final EventoGrupoDao eventoGrupoDao = new EventoGrupoDao();
final EventoItemConfigRelDao eventoItemConfigRelDao = new EventoItemConfigRelDao();
final TransactionControler tc = new TransactionControlerImpl(crudDao.getAliasDB());
try {
this.validaUpdate(model);
crudDao.setTransactionControler(tc);
itemConfigEventoDao.setTransactionControler(tc);
eventoGrupoDao.setTransactionControler(tc);
eventoItemConfigRelDao.setTransactionControler(tc);
tc.start();
crudDao.update(model);
final EventoItemConfigDTO eventoDto = (EventoItemConfigDTO) model;
this.deleteObsoleteRelationship(eventoGrupoDao, eventoItemConfigRelDao, eventoDto.getIdEvento());
this.generateTableRelationship(eventoDto, eventoGrupoDao, eventoItemConfigRelDao);
if (eventoDto.getLstItemConfigEvento() != null && eventoDto.getLstItemConfigEvento().size() > 0) {
itemConfigEventoDao.deleteByIdEvento(eventoDto.getIdEvento());
for (final ItemConfigEventoDTO itemConfigEventoDto : eventoDto.getLstItemConfigEvento()) {
itemConfigEventoDto.setIdEvento(eventoDto.getIdEvento());
itemConfigEventoDao.create(itemConfigEventoDto);
// Dispara evento
this.shootEvent(itemConfigEventoDto, eventoDto);
}
}
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
}
@Override
public ValorDTO pegarCaminhoItemConfig(final String nomeBaseItemConfig) throws ServiceException {
try {
return this.getDao().pegarCaminhoItemConfig(nomeBaseItemConfig);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
/**
* M�todo que gera o relacionamento dos grupos de item configura��o com o evento e dos itens de configura��o com o evento.
*
* @param eventoDto
* EventoItemConfigDTO evento a ser relacionado
* @param tc
* TransactionControler controlador de transi��o do DAO
* @throws Exception
*/
private void generateTableRelationship(final EventoItemConfigDTO eventoDto, final EventoGrupoDao eventoGrupoDao, final EventoItemConfigRelDao eventoItemConfigRelDao)
throws Exception {
// Cria o relacionamento Evento com o Grupo
if (eventoDto.getLstGrupo() != null && eventoDto.getLstGrupo().size() > 0) {
for (final EventoGrupoDTO eventoGrupoDTO : eventoDto.getLstGrupo()) {
eventoGrupoDTO.setIdEvento(eventoDto.getIdEvento());
eventoGrupoDao.create(eventoGrupoDTO);
}
}
// Cria o relacionamento Evento com o Item de Configura��o
if (eventoDto.getLstItemConfiguracao() != null && eventoDto.getLstItemConfiguracao().size() > 0) {
for (final EventoItemConfigRelDTO itemConfigRelDTO : eventoDto.getLstItemConfiguracao()) {
itemConfigRelDTO.setIdEvento(eventoDto.getIdEvento());
eventoItemConfigRelDao.create(itemConfigRelDTO);
}
}
}
/**
* M�todo que verifica se � para executar o evento agora e dispara a thread.
*
* @param itemConfigEventoDto
* @param eventoDto
* @throws Exception
*/
private void shootEvent(final ItemConfigEventoDTO itemConfigEventoDto, final EventoItemConfigDTO eventoDto) throws Exception {
if (itemConfigEventoDto.getGerarQuando().equalsIgnoreCase("A")) {
/*
* if (eventoDto.getLstEmpregado() != null && eventoDto.getLstEmpregado().size() > 0) {
* for (EventoEmpregadoDTO eventoEmpDto : eventoDto.getLstEmpregado()) {
* new Thread(new ThreadDisparaEvento(eventoEmpDto.getIdEmpregado(), itemConfigEventoDto.getIdBaseItemConfiguracao(), itemConfigEventoDto.getIdEvento(),
* itemConfigEventoDto.getTipoExecucao(), itemConfigEventoDto.getLinhaComando())).start();
* }
* }
*/
List<EventoItemConfigRelDTO> listItemConfiguracao = null;
if (eventoDto != null) {
listItemConfiguracao = eventoDto.getLstItemConfiguracao();
}
if (listItemConfiguracao == null) {
listItemConfiguracao = new ArrayList<EventoItemConfigRelDTO>();
}
// Busca Itens de Configura��o relacionados ao grupo
final List<EventoGrupoDTO> lstGrupo = eventoDto.getLstGrupo();
final GrupoItemConfiguracaoDTO grupoItemConfiguracaoDTO = new GrupoItemConfiguracaoDTO();
for (final EventoGrupoDTO eventoGrupoDTO : lstGrupo) {
final Integer idGrupo = eventoGrupoDTO.getIdGrupo();
final ItemConfiguracaoDao itemConfiguracaoDao = new ItemConfiguracaoDao();
grupoItemConfiguracaoDTO.setIdGrupoItemConfiguracao(idGrupo);
final Collection<ItemConfiguracaoDTO> lstItemConfigGrupo = itemConfiguracaoDao.listByGrupo(grupoItemConfiguracaoDTO, null, null);
for (final ItemConfiguracaoDTO itemConfiguracaoDTO : lstItemConfigGrupo) {
final EventoItemConfigRelDTO configRelDTO = new EventoItemConfigRelDTO();
configRelDTO.setIdItemConfiguracao(itemConfiguracaoDTO.getIdItemConfiguracao());
// Verifica se o Item de Configura��o consta na lista
if (!listItemConfiguracao.contains(configRelDTO)) {
listItemConfiguracao.add(configRelDTO);
}
}
}
if (listItemConfiguracao.size() > 0) {
for (final EventoItemConfigRelDTO itemConfiguracaoRel : listItemConfiguracao) {
new Thread(new ThreadDisparaEvento(itemConfiguracaoRel.getIdItemConfiguracao(), itemConfigEventoDto.getIdBaseItemConfiguracao(),
itemConfigEventoDto.getIdEvento(), itemConfigEventoDto.getTipoExecucao(), itemConfigEventoDto.getLinhaComando(),
itemConfigEventoDto.getLinhaComandoLinux())).start();
}
}
}
}
/**
* M�todo que deleta os relacionamentos com Grupo de item configura��o e Item configura��o com o evento
*
* @param eventoGrupoDao
* DAO de EventoGrupo
* @param eventoItemConfigRelDao
* DAO de EventoItemConfigRel
* @param idEvento
* @throws Exception
*/
private void deleteObsoleteRelationship(final EventoGrupoDao eventoGrupoDao, final EventoItemConfigRelDao eventoItemConfigRelDao, final Integer idEvento) throws Exception {
eventoGrupoDao.deleteByIdEvento(idEvento);
eventoItemConfigRelDao.deleteByIdEvento(idEvento);
}
@Override
public Collection<CaracteristicaDTO> pegarNetworksItemConfiguracao(final Integer idItemConfiguracao) throws ServiceException {
try {
return this.getDao().pegarNetworksItemConfiguracao(idItemConfiguracao);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public String pegarSistemaOperacionalItemConfiguracao(final Integer idItemConfiguracao) throws ServiceException {
try {
return this.getDao().pegarSistemaOperacionalItemConfiguracao(idItemConfiguracao);
} catch (final Exception e) {
throw new ServiceException(e);
}
}
}