package br.com.centralit.citcorpore.negocio;
import java.util.Collection;
import br.com.centralit.citcorpore.bean.GrupoNivelAutoridadeDTO;
import br.com.centralit.citcorpore.bean.NivelAutoridadeDTO;
import br.com.centralit.citcorpore.integracao.GrupoNivelAutoridadeDao;
import br.com.centralit.citcorpore.integracao.NivelAutoridadeDao;
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 NivelAutoridadeServiceEjb extends CrudServiceImpl implements NivelAutoridadeService {
private NivelAutoridadeDao dao;
@Override
protected NivelAutoridadeDao getDao() {
if (dao == null) {
dao = new NivelAutoridadeDao();
}
return dao;
}
@Override
protected void validaCreate(final Object arg0) throws Exception {
this.validaHierarquia((NivelAutoridadeDTO) arg0);
}
@Override
protected void validaUpdate(final Object arg0) throws Exception {
this.validaHierarquia((NivelAutoridadeDTO) arg0);
}
private void validaHierarquia(final NivelAutoridadeDTO arg0) throws Exception {
if (arg0.getHierarquia() == null) {
throw new LogicException("Hierarquia n�o informdada");
}
final Collection<NivelAutoridadeDTO> col = this.getDao().findByHierarquiaAndNotIdNivelAutoridade(arg0.getHierarquia(), arg0.getIdNivelAutoridade());
if (col != null && !col.isEmpty()) {
throw new LogicException("Hierarquia j� existente");
}
}
@Override
public IDto create(final IDto model) throws ServiceException, LogicException {
final NivelAutoridadeDao nivelAutoridadeDao = new NivelAutoridadeDao();
final GrupoNivelAutoridadeDao grupoNivelAutoridadeDao = new GrupoNivelAutoridadeDao();
final TransactionControler tc = new TransactionControlerImpl(nivelAutoridadeDao.getAliasDB());
try {
this.validaCreate(model);
nivelAutoridadeDao.setTransactionControler(tc);
grupoNivelAutoridadeDao.setTransactionControler(tc);
tc.start();
NivelAutoridadeDTO nivelAutoridadeDto = (NivelAutoridadeDTO) model;
nivelAutoridadeDto = (NivelAutoridadeDTO) nivelAutoridadeDao.create(nivelAutoridadeDto);
this.atualizaGrupos(nivelAutoridadeDto, grupoNivelAutoridadeDao);
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
return model;
}
private void atualizaGrupos(final NivelAutoridadeDTO nivelAutoridadeDto, final GrupoNivelAutoridadeDao grupoNivelAutoridadeDao) throws Exception {
grupoNivelAutoridadeDao.deleteByIdNivelAutoridade(nivelAutoridadeDto.getIdNivelAutoridade());
if (nivelAutoridadeDto.getColGrupos() != null) {
for (final GrupoNivelAutoridadeDTO grupoDto : nivelAutoridadeDto.getColGrupos()) {
if (grupoDto.getIdGrupo() == null) {
throw new Exception("Grupo n�o informado");
}
grupoDto.setIdNivelAutoridade(nivelAutoridadeDto.getIdNivelAutoridade());
grupoNivelAutoridadeDao.create(grupoDto);
}
}
}
@Override
public void update(final IDto model) throws ServiceException, LogicException {
final NivelAutoridadeDao nivelAutoridadeDao = new NivelAutoridadeDao();
final GrupoNivelAutoridadeDao grupoNivelAutoridadeDao = new GrupoNivelAutoridadeDao();
final TransactionControler tc = new TransactionControlerImpl(nivelAutoridadeDao.getAliasDB());
try {
this.validaUpdate(model);
nivelAutoridadeDao.setTransactionControler(tc);
grupoNivelAutoridadeDao.setTransactionControler(tc);
tc.start();
final NivelAutoridadeDTO nivelAutoridadeDto = (NivelAutoridadeDTO) model;
nivelAutoridadeDao.update(nivelAutoridadeDto);
this.atualizaGrupos(nivelAutoridadeDto, grupoNivelAutoridadeDao);
tc.commit();
tc.close();
} catch (final Exception e) {
this.rollbackTransaction(tc, e);
}
}
}