/*
*
* 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.List;
import service.anotacao.Transacional;
import service.exception.AplicacaoException;
import DAO.Impl.ModeloDAOImpl;
import DAO.Impl.RecModelDAOImpl;
import DAO.Impl.RecursoDAOImpl;
import DAO.controle.FabricaDeDao;
import DAO.exception.ObjetoNaoEncontradoException;
import DAO.ModeloDAO;
import DAO.RecModelDAO;
import DAO.RecursoDAO;
import modelo.Modelo;
import modelo.RecModel;
import modelo.Recurso;
public class RecModelAppService {
// DAOs
private static RecModelDAO recModelDAO;
private static ModeloDAO modeloDAO;
private static RecursoDAO recursoDAO;
@SuppressWarnings("unchecked")
public RecModelAppService() {
try {
//DAOs
recModelDAO = FabricaDeDao.getDao(RecModelDAOImpl.class);
modeloDAO = FabricaDeDao.getDao(ModeloDAOImpl.class);
recursoDAO = FabricaDeDao.getDao(RecursoDAOImpl.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 recmodel, ou seja, inclui modelo na lista de modelos que usam
* aquele recurso em particular
* Verifica antes se este modelo j� havia sido incluido na lista de
* recmodel deste recurso
*
* @param recModel
* @throws AplicacaoException
*/
/*
@Transacional
public long inclui(RecModel recModel) throws AplicacaoException {
long retorno = -1;
RecModel recModelBD = null;
try {
recModelBD = recModelDAO.recuperaRecModelPorCodModelo(recModel.getModelo().getCodModelo());
throw new AplicacaoException("recModel.CODIGO_EXISTENTE");
} catch (ObjetoNaoEncontradoException ob) {
retorno = recModelDAO.inclui(recModel).getId();
}
return retorno;
}
*/
/**
*
* Inclui recmodel, ou seja, inclui modelo na lista de modelos que usam
* aquele recurso em particular
* Verifica antes se este modelo j� havia sido incluido na lista de
* recmodel deste recurso
*
* - alterei bastante em relacao ao jpa8 original- verificar se est� certo
* Acho que talvez nao precise do lock
* @param umModelo
* @param umaFamilia
* @return
* @throws AplicacaoException
*/
//VERSAO DAYSE INTERMEDIARIA ERRADO
// @Transacional
// public long inclui(RecModel recModel, Modelo modelo, Recurso recurso)
// throws AplicacaoException
// {
// long retorno = -1;
// RecModel recModelBD = null;
// // verifica se existe o recurso
// try
// { recursoDAO.getPorIdComLock(recurso.getId());
// }
// catch(ObjetoNaoEncontradoException e)
// { throw new AplicacaoException("recurso.NAO_ENCONTRADO");
// }
//
// // verifica se existe o modelo
// try
// { modeloDAO.getPorIdComLock(modelo.getId());
// }
// catch(ObjetoNaoEncontradoException e)
// { throw new AplicacaoException("modelo.NAO_ENCONTRADO");
// }
//
// // verifica se o recurso j� � usado neste modelo
// try {
// recModelBD = recModelDAO.recuperaRecModelPorRecursoEModelo(recurso, modelo);
// throw new AplicacaoException("recModel.ENCONTRADO_MODELO");
// } catch (ObjetoNaoEncontradoException ob) {
// recModel.setModelo(modelo);
// recModel.setRecurso(recurso);
// retorno = recModelDAO.inclui(recModel).getId();
//
// }
// return retorno;
// }
@Transacional
public long inclui(RecModel recModel)
throws AplicacaoException
{
long retorno = -1;
RecModel recModelBD = null;
// verifica se existe o recurso
try
{ recursoDAO.getPorIdComLock(recModel.getRecurso().getId());
}
catch(ObjetoNaoEncontradoException e)
{ throw new AplicacaoException("recurso.NAO_ENCONTRADO");
}
// verifica se existe o modelo
try
{ modeloDAO.getPorIdComLock(recModel.getModelo().getId());
}
catch(ObjetoNaoEncontradoException e)
{ throw new AplicacaoException("modelo.NAO_ENCONTRADO");
}
// verifica se o recurso j� � usado neste modelo
try {
recModelBD = recModelDAO.recuperaRecModelPorRecursoEModelo(recModel.getRecurso(), recModel.getModelo());
throw new AplicacaoException("recModel.ENCONTRADO_MODELO");
} catch (ObjetoNaoEncontradoException ob) {
//Recurso e modelo foram setados em RecModelActions no Inclui
retorno = recModelDAO.inclui(recModel).getId();
}
return retorno;
}
@Transacional
public void altera(RecModel recModel) {
recModelDAO.altera(recModel);
}
/**
* baseado em modelo - usei lock - verificar se � para ser desse jeito
* @param umRecModel
* @throws AplicacaoException
*/
@Transacional
public void exclui(RecModel umRecModel) throws AplicacaoException {
RecModel recModel = null;
try {
recModel = recModelDAO.getPorIdComLock((umRecModel.getId()));
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("recModel.NAO_ENCONTRADO");
}
recModelDAO.exclui(recModel);
}
/**
* Usa um m�todo do DAO para recuperar um recmodel juntamente com o seu modelo
*
* @author dayse.arruda
* @throws AplicacaoException
*/
public RecModel recuperaRecModelComModelo(RecModel recModel) throws AplicacaoException {
try {
return recModelDAO.recuperaRecModelComModelo(recModel);
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("recModel.NAO_ENCONTRADO");
}
}
public List<RecModel> recuperaListaDeRecModelsComRecursoComModelos() throws AplicacaoException{
List<RecModel> recModels = recModelDAO.recuperaListaDeRecModelsComRecursoComModelos();
if (recModels.size() == 0) {
throw new AplicacaoException("N�o foram encontrados Modelos que usam o recurso ");
} else {
return recModels;
}
}
/**
*
* Usa recModelDAO para recuperar lista de todos os recmodels. Retorna um List
* de recModels
*
* @author dayse.arruda
* @throws AplicacaoException
*/
public List<RecModel> recuperaListaDeRecModels() throws AplicacaoException {
List<RecModel> recModels = recModelDAO.recuperaListaDeRecModels();
if (recModels.size() == 0) {
throw new AplicacaoException("N�o foram encontrados Modelos que usam o recurso ");
} else {
return recModels;
}
}
/**
* Executa uma busca por todos os recmodels paginando o resultado
* baseado em familia
*
* @return List<RecModel>
*/
public List<RecModel> recuperaListaPaginadaDeRecModels() {
return recModelDAO.recuperaListaPaginadaDeRecModels();
}
/**
* Executa uma busca pelos recmodels de um determinado recurso,
* paginando o resultado
*
*
* @return List<RecModel>
*/
public List<RecModel> recuperaListaPaginadaDeRecModelsPorRecurso(Recurso recurso) {
return recModelDAO.recuperaListaPaginadaDeRecModelsPorRecurso();
}
public List<RecModel> recuperaListaDeRecModelsComModelos () {
return recModelDAO.recuperaListaDeRecModelsComModelos();
}
public List<RecModel> recuperaListaDeRecModelsPorCodModeloLike(String codModelo) {
return recModelDAO.recuperaListaDeRecModelsPorCodModeloLike(codModelo);
}
public RecModel recuperaRecModelPorCodModelo(String codModelo) throws AplicacaoException {
RecModel recModelBD = null;
try {
recModelBD = recModelDAO.recuperaRecModelPorCodModelo(codModelo);
} catch (ObjetoNaoEncontradoException exc) {
throw new AplicacaoException("recmodel.NAO_ENCONTRADO");
}
return recModelBD;
}
public RecModel recuperaRecModelPorRecursoEModelo(Recurso recurso, Modelo modelo) throws ObjetoNaoEncontradoException {
return recModelDAO.recuperaRecModelPorRecursoEModelo(recurso, modelo);
}
public List<RecModel> recuperaListaDeRecModelsPorDescrModelo(String descrModelo) {
return recModelDAO.recuperaListaDeRecModelsPorDescrModelo(descrModelo);
}
public List<RecModel> recuperaRecModelosPorRecurso(Recurso recurso){
return recModelDAO.recuperaRecModelosPorRecurso(recurso);
}
}