/*
*
* Copyright (c) 2013 - 2014 INT - National Institute of Technology & COPPE - Alberto Luiz Coimbra Institute
- Graduate School and Research in Engineering.
* See the file license.txt for copyright permission.
*
*/
package service;
import java.util.ArrayList;
import java.util.List;
import modelo.CadPlan;
import modelo.Excecao;
import modelo.ExcecaoMens;
import modelo.ModelagemFuzzy;
import modelo.PerioPM;
import service.anotacao.Transacional;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import util.Constantes;
import DAO.ExcecaoDAO;
import DAO.ExcecaoMensDAO;
import DAO.PerioPMDAO;
import DAO.Impl.ExcecaoDAOImpl;
import DAO.Impl.ExcecaoMensDAOImpl;
import DAO.Impl.PerioPMDAOImpl;
import DAO.controle.FabricaDeDao;
import DAO.exception.ObjetoNaoEncontradoException;
public class ExcecaoAppService {
// DAOs
private static PerioPMDAO perioPMDAO;
private static ExcecaoDAO excecaoDAO;
private static ExcecaoMensDAO excecaoMensDAO;
// Services
// private static DadosGraficoViewAppService dadosGraficoViewService;
@SuppressWarnings("unchecked")
public ExcecaoAppService() {
try {
// DAOs
perioPMDAO = FabricaDeDao.getDao(PerioPMDAOImpl.class);
excecaoDAO = FabricaDeDao.getDao(ExcecaoDAOImpl.class);
excecaoMensDAO = FabricaDeDao.getDao(ExcecaoMensDAOImpl.class);
// Service
// dadosGraficoViewService = FabricaDeAppService.getAppService(DadosGraficoViewAppService.class);
} catch (Exception e) {
e.printStackTrace();
// O comando a seguir s� ser� usado caso haja a cria��o de um service.
// Exemplo:
// Um Service A tem dentro de si a chamada de um Service B, s� que o Service B tamb�m tem
// uma chamada para o Service A, logo um service chamaria o outro sem parar causando assim um loop infinito.
// Contudo, em termos de uso do sistemas esse erro n�o ocorreria de forma clara,
// pois a View seria carregada sem dados.
// Para evitar que esse tipo de erro gere confus�es - como o usu�rio pensar que o banco foi perdido, por exemplo -
// utilizamos o comando System.exit(1) que interrompe a aplica��o, deixando explicita a ocorr�ncia do erro.
//System.exit(1);
}
}
/**
* Inclui uma excecao
* @param excecao
* @return
* @throws AplicacaoException
*/
@Transacional
public long inclui(Excecao excecao) throws AplicacaoException {
long retorno = -1;
try {
excecaoDAO.recuperaExcecaoPeloTipoDeExcecao(excecao.getTipoDeExcecao());
throw new AplicacaoException("excecao.TIPO_EXCECAO_EXISTENTE");
} catch (ObjetoNaoEncontradoException e) {
retorno = excecaoDAO.inclui(excecao).getId();
}
return retorno;
}
/**
* Altera uma Excecao
* @param excecao
*/
@Transacional
public void altera(Excecao excecao) {
excecaoDAO.altera(excecao);
}
/**
* Exclui uma Excecao
* @param excecao
* @throws AplicacaoException
*/
@Transacional
public void exclui(Excecao excecao) throws AplicacaoException {
List<ExcecaoMens> listaDeExcecaoMenss = excecaoMensDAO.recuperaListaDeExcecaoMensPorExcecao(excecao);
if (listaDeExcecaoMenss.isEmpty()){
// se n�o tem execaoMens associados a essa execao ent�o pode exclui-la
Excecao excecaoParaExcuir= null;
try {
excecaoParaExcuir = excecaoDAO.getPorIdComLock((excecao.getId()));
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("excecao.NAO_ENCONTRADA");
}
excecaoDAO.exclui(excecaoParaExcuir);
}
else{
throw new AplicacaoException("excecao.USADA_EM_EXCECAOMENS");
}
}
/**
* Retorna a lista de todas as excecoes
* @return
*/
public List<Excecao> recuperaListaPaginadaDeExcecoes(){
return excecaoDAO.recuperaListaPaginadaDeExcecoes();
}
/**
* Retorna uma lista com as excecoes, chamando o metodo excecaoDAO.recuperaListaDeExcecoes
* O primeiro valor da lista � uma excecao nula, que n�o deve ser utilizado.
*
* @return
*/
public List<Excecao> inicializaVetorExcecao(){
List<Excecao> excecoes = new ArrayList<Excecao>();
Excecao excecaoLIXO = new Excecao();
excecoes.add(excecaoLIXO);
excecoes.addAll(excecaoDAO.recuperaListaDeExcecoes());
return excecoes;
}
}