package br.com.centralit.citcorpore.negocio;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import br.com.centralit.citcorpore.bean.InformacoesContratoConfigDTO;
import br.com.centralit.citcorpore.bean.InformacoesContratoPerfSegDTO;
import br.com.centralit.citcorpore.integracao.InformacoesContratoConfigDao;
import br.com.centralit.citcorpore.integracao.InformacoesContratoPerfSegDao;
import br.com.citframework.dto.IDto;
import br.com.citframework.excecao.LogicException;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.integracao.TransactionControler;
import br.com.citframework.integracao.TransactionControlerImpl;
import br.com.citframework.service.CrudServiceImpl;
public class InformacoesContratoConfigServiceEjb extends CrudServiceImpl implements InformacoesContratoConfigService {
private InformacoesContratoConfigDao dao;
@Override
protected InformacoesContratoConfigDao getDao() {
if (dao == null) {
dao = new InformacoesContratoConfigDao();
}
return dao;
}
@Override
public Collection getAtivos() throws Exception {
return this.getDao().getAtivos();
}
@Override
public IDto create(final IDto model) throws ServiceException, LogicException {
final InformacoesContratoPerfSegDao daoPEPS = new InformacoesContratoPerfSegDao();
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
// Faz validacao, caso exista.
this.validaCreate(model);
// Seta o TransactionController para os DAOs
this.getDao().setTransactionControler(tc);
daoPEPS.setTransactionControler(tc);
// Inicia transacao
tc.start();
// Executa operacoes pertinentes ao negocio.
InformacoesContratoConfigDTO contrato = (InformacoesContratoConfigDTO) model;
contrato.setNome(contrato.getNome().toUpperCase());
contrato = (InformacoesContratoConfigDTO) super.create(model);
if (contrato.getPerfilSelecionado() != null && contrato.getPerfilSelecionado().length > 0) {
final InformacoesContratoPerfSegDTO prontuarioSeg = new InformacoesContratoPerfSegDTO();
prontuarioSeg.setIdInformacoesContratoConfig(contrato.getIdInformacoesContratoConfig());
for (int i = 0; i < contrato.getPerfilSelecionado().length; i++) {
prontuarioSeg.setIdPerfilSeguranca(contrato.getPerfilSelecionado()[i]);
daoPEPS.create(prontuarioSeg);
}
}
// Faz commit e fecha a transacao.
tc.commit();
tc.close();
return model;
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
throw new ServiceException(e);
}
}
@Override
public void update(final IDto model) throws ServiceException, LogicException {
final InformacoesContratoConfigDTO contrato = (InformacoesContratoConfigDTO) model;
final InformacoesContratoPerfSegDao daoPEPS = new InformacoesContratoPerfSegDao();
final TransactionControler tc = new TransactionControlerImpl(this.getDao().getAliasDB());
try {
// Faz validacao, caso exista.
this.validaCreate(model);
// Seta o TransactionController para os DAOs
this.getDao().setTransactionControler(tc);
daoPEPS.setTransactionControler(tc);
// Inicia transacao
tc.start();
// Executa operacoes pertinentes ao negocio.
contrato.setNome(contrato.getNome().toUpperCase());
this.getDao().update(contrato);
daoPEPS.deleteAllByIdInformacoesContratoConfig(contrato);
if (contrato.getPerfilSelecionado() != null && contrato.getPerfilSelecionado().length > 0) {
final InformacoesContratoPerfSegDTO prontuarioSeg = new InformacoesContratoPerfSegDTO();
prontuarioSeg.setIdInformacoesContratoConfig(contrato.getIdInformacoesContratoConfig());
for (int i = 0; i < contrato.getPerfilSelecionado().length; i++) {
prontuarioSeg.setIdPerfilSeguranca(contrato.getPerfilSelecionado()[i]);
daoPEPS.create(prontuarioSeg);
}
}
// Faz commit e fecha a transa��o.
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
throw new ServiceException(e);
}
}
@Override
public IDto restore(final IDto model) throws ServiceException, LogicException {
try {
final InformacoesContratoConfigDTO contrato = (InformacoesContratoConfigDTO) super.restore(model);
final InformacoesContratoPerfSegDao daoPEPS = new InformacoesContratoPerfSegDao();
InformacoesContratoPerfSegDTO contratoSeg = new InformacoesContratoPerfSegDTO();
contratoSeg.setIdInformacoesContratoConfig(contrato.getIdInformacoesContratoConfig());
final Collection perfis = daoPEPS.find(contratoSeg);
if (perfis != null && !perfis.isEmpty()) {
contratoSeg = null;
contrato.setPerfilSelecionado(new Integer[perfis.size()]);
int i = 0;
for (final Iterator it = perfis.iterator(); it.hasNext(); i++) {
contratoSeg = (InformacoesContratoPerfSegDTO) it.next();
contrato.getPerfilSelecionado()[i] = contratoSeg.getIdPerfilSeguranca();
}
}
return contrato;
} catch (final Exception e) {
throw new ServiceException(e);
}
}
@Override
public Collection findByPai(final Integer idCentroCustoPai) throws Exception {
return this.getDao().findByPai(idCentroCustoPai);
}
@Override
public Collection findByNome(final String nome) throws Exception {
try {
return this.getDao().findByNome(nome);
} catch (final Exception e) {
return null;
}
}
@Override
public Collection findSemPai(final Integer idEmpresa) throws Exception {
return this.getDao().findSemPai(idEmpresa);
}
@Override
public Collection getCollectonHierarquica(final Integer idEmpresa, final boolean acrescentarInativos) throws Exception {
final Collection colSemPai = this.findSemPai(idEmpresa);
if (colSemPai == null) {
return null;
}
final Collection colRetorno = new ArrayList();
InformacoesContratoConfigDTO undDto;
boolean bAcrescenta;
for (final Iterator it = colSemPai.iterator(); it.hasNext();) {
undDto = (InformacoesContratoConfigDTO) it.next();
bAcrescenta = true;
if (!acrescentarInativos) {
if (undDto.getSituacao() == null || undDto.getSituacao().equalsIgnoreCase("A")) {
bAcrescenta = false;
}
}
if (bAcrescenta) {
undDto.setNivel(new Integer(0));
colRetorno.add(undDto);
final Collection colFilhos = this.carregaFilhos(undDto.getIdInformacoesContratoConfig(), 0, acrescentarInativos);
if (colFilhos != null) {
colRetorno.addAll(colFilhos);
}
}
}
return colRetorno;
}
private Collection carregaFilhos(final Integer idPai, final int nivel, final boolean acrescentarInativos) throws Exception {
final Collection colFilhos = this.findByPai(idPai);
if (colFilhos == null) {
return null;
}
final Collection colRetorno = new ArrayList();
InformacoesContratoConfigDTO undDto;
boolean bAcrescenta;
for (final Iterator it = colFilhos.iterator(); it.hasNext();) {
undDto = (InformacoesContratoConfigDTO) it.next();
bAcrescenta = true;
if (!acrescentarInativos) {
if (undDto.getSituacao() == null || undDto.getSituacao().equalsIgnoreCase("A")) {
bAcrescenta = false;
}
}
if (bAcrescenta) {
undDto.setNivel(new Integer(nivel + 1));
colRetorno.add(undDto);
final Collection colFilhosFilhos = this.carregaFilhos(undDto.getIdInformacoesContratoConfig(), nivel + 1, acrescentarInativos);
if (colFilhosFilhos != null) {
colRetorno.addAll(colFilhosFilhos);
}
}
}
return colRetorno;
}
}