/*
*
* 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.HashMap;
import java.util.LinkedList;
import java.util.List;
import modelo.CapacRec;
import modelo.HP;
import modelo.PerioPM;
import modelo.RecModel;
import modelo.Recurso;
import modelo.RecursoRelatorio;
import relatorio.Relatorio;
import relatorio.RelatorioFactory;
import service.anotacao.Transacional;
import service.controleTransacao.FabricaDeAppService;
import service.exception.AplicacaoException;
import DAO.HPDAO;
import DAO.PerioPMDAO;
import DAO.RecursoDAO;
import DAO.Impl.HPDAOImpl;
import DAO.Impl.PerioPMDAOImpl;
import DAO.Impl.RecursoDAOImpl;
import DAO.controle.FabricaDeDao;
import DAO.exception.ObjetoNaoEncontradoException;
import exception.relatorio.RelatorioException;
public class RecursoAppService {
// DAOs
private static RecursoDAO recursoDAO;
private static PerioPMDAO perioPMDAO;
private static HPDAO hpDAO;
// Services
private static CapacRecAppService capacRecService;
private static RecModelAppService recModelService;
public RecursoAppService() {
try {
// DAOs
recursoDAO = FabricaDeDao.getDao(RecursoDAOImpl.class);
perioPMDAO = FabricaDeDao.getDao(PerioPMDAOImpl.class);
hpDAO = FabricaDeDao.getDao(HPDAOImpl.class);
//Services
recModelService = FabricaDeAppService.getAppService(RecModelAppService.class);
capacRecService = FabricaDeAppService.getAppService(CapacRecAppService.class);
} catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
}
/**
* Inclui um objeto do tipo Recurso sem nenhuma critica.
*
* @return long
* @throws AplicacaoException
*/
@Transacional
public long inclui(Recurso recurso) throws AplicacaoException {
long retorno = -1;
try {
recursoDAO.recuperaRecursoPeloCodigo(recurso.getCodRecurso());
throw new AplicacaoException("recurso.CODIGO_EXISTENTE");
} catch (ObjetoNaoEncontradoException e) {
retorno = recursoDAO.inclui(recurso).getId();
}
return retorno;
}
/**
* Inclui um objeto do tipo Recurso junto com suas criticas
*
* @return long
* @throws AplicacaoException
*/
@Transacional
public long incluiComCriticas(Recurso recurso) throws AplicacaoException {
long retorno = -1;
try {
recursoDAO.recuperaRecursoPeloCodigo(recurso.getCodRecurso());
throw new AplicacaoException("recurso.CODIGO_EXISTENTE");
} catch (ObjetoNaoEncontradoException e) {
retorno = this.inclui(recurso);
}
//Regras de inclusao de capacRec
HP hpBD = hpDAO.recuperaListaDeHP().get(0);
// Obtem lista com perioPMs dentro do HP cadastrado para o Plano Mestre
List<PerioPM> listaPerioPMsHP = perioPMDAO.recuperaIntervaloDePerioPMs(
hpBD.getPerioPMInicPMP().getPeriodoPM(), hpBD.getPerioPMFinalPMP()
.getPeriodoPM());
for (PerioPM periodo : listaPerioPMsHP) {
CapacRec capacRec = new CapacRec();
capacRec.setRecurso(recurso);
capacRec.setPerioPM(periodo);
capacRecService.inclui(capacRec);
}
return retorno;
}
@Transacional
public void altera(Recurso umRecurso) {
recursoDAO.altera(umRecurso);
}
/**
* Quando excluir Recurso, exclui em cascata os recModels associados,
* devido as regras da rela��o estabelecidas no Recurso.java
*
* @author felipe
*/
@Transacional
public void exclui(Recurso umRecurso)
throws AplicacaoException
{
Recurso recurso;
try
{ recurso = recursoDAO.getPorIdComLock((umRecurso.getId()));
}
catch(ObjetoNaoEncontradoException e)
{ throw new AplicacaoException("recurso.NAO_ENCONTRADO");
}
recursoDAO.exclui(recurso);
}
public Recurso recuperaRecurso(long id)
throws AplicacaoException {
try {
return recursoDAO.getPorId(id);
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("recurso.NAO_ENCONTRADO");
}
}
public Recurso recuperaRecursoPeloCodigo(String codRecurso)
throws AplicacaoException {
try {
return recursoDAO.recuperaRecursoPeloCodigo(codRecurso);
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("recurso.NAO_ENCONTRADO");
}
}
/**
*
* Recupera a lista de todos os recursos que possuam c�digo aproximado com o passado por parametro.
*
*/
public List<Recurso> recuperaListaDeRecursosPeloCodigoLike(String codRecurso){
return recursoDAO.recuperaListaDeRecursosPeloCodigoLike(codRecurso);
}
public List<Recurso> recuperaListaDeRecursos() throws AplicacaoException
{
List<Recurso> recursos = recursoDAO.recuperaListaDeRecursos();
if (recursos.size() == 0)
{ throw new AplicacaoException("recurso.RECURSOS_INEXISTENTES");
}
else
{ return recursos;
}
}
/**
* @author marques.araujo
* @return List<Recurso>
*/
public List<Recurso> recuperaListaDeRecursosQueTenhamApenasRecModels(){
return recursoDAO.recuperaListaDeRecursosQueTenhamApenasRecModels();
}
/**
* @author Felipe
* @param String
* @return Uma lista de recursos com esta descricao
*/
public List<Recurso> recuperaListaDeRecursosPorDescricao(String descrRecurso) {
return recursoDAO.recuperaListaDeRecursosPorDescricao(descrRecurso);
}
public List<Recurso> getRecursos(){
return recursoDAO.recuperaListaDeRecursos();
}
public List<Recurso> recuperaListaPaginadaDeRecursos() {
return recursoDAO.recuperaListaPaginadaDeRecursos();
}
public Recurso recuperaRecursoComListaDeRecModels(Recurso recurso) throws AplicacaoException {
try {
return recursoDAO.recuperaRecursoComListaDeRecModels(recurso);
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("recurso.NAO_ENCONTRADO");
}
}
public Recurso recuperaRecursoComListaDeCapacRecs(Recurso recurso) throws AplicacaoException {
try {
return recursoDAO.recuperaRecursoComListaDeCapacRecs(recurso);
} catch (ObjetoNaoEncontradoException e) {
throw new AplicacaoException("recurso.NAO_ENCONTRADO");
}
}
public List<Recurso> recuperaListaPaginadaDeRecursosComListaDeRecModels() {
return recursoDAO.recuperaListaPaginadaDeRecursosComListaDeRecModels();
}
public List<Recurso> recuperaListaPaginadaDeRecursosComListaDeCapacRecs() {
return recursoDAO.recuperaListaPaginadaDeRecursosComListaDeCapacRecs();
}
/**
*
* @author marques.araujoe
* @return List<Recurso>
*
*/
public List<Recurso> recuperaListaDeRecursosComRecModels(){
return recursoDAO.recuperaListaDeRecursosComRecModels();
}
/**
* Monta e Imprime Relatorio de Recursos em PDF a partir da listaDeRecursos informada.
* Chama o metodo gerarRelatorio de Relatorio.
* @author dayse
*
* @param listaDeRecursos
* @throws AplicacaoException
*/
@SuppressWarnings("unchecked")
public void gerarRelatorio(List<Recurso> listaDeRecursos) throws AplicacaoException {
System.out.println("Antes do metodo getRelatorio dentro de gerarRelatorio de RecursoAppService");
Relatorio relatorio = RelatorioFactory.getRelatorio(Relatorio.RELATORIO_LISTAGEM_DE_RECURSOS);
System.out.println("Depois do metodo getRelatorio dentro de gerarRelatorio de RecursoAppService");
try{
relatorio.gerarRelatorio(listaDeRecursos, new HashMap());
} catch (RelatorioException re){
throw new AplicacaoException("recurso.RELATORIO_NAO_GERADO");
}
}
/**
*
* @author marques.araujo
* @param List<Recurso>
* @return void
* @throws AplicacaoException
*/
@SuppressWarnings("unchecked")
public void gerarRelatorioAgregado(List<Recurso> listaDeRecursos) throws AplicacaoException {
Relatorio relatorio = RelatorioFactory.getRelatorio(Relatorio.RELATORIO_LISTAGEM_DE_RECMODELS);
try{
relatorio.gerarRelatorio(this.converterParaRecursoRelatorio(listaDeRecursos),new HashMap());
} catch (RelatorioException re){
throw new AplicacaoException("recurso.RELATORIO_NAO_GERADO");
}
}
/**
*
* @author marques.araujo
* @return List<TecidoRelatorio>
* @param List<Tecido> tecidos
*
*/
public List<RecursoRelatorio> converterParaRecursoRelatorio(List<Recurso> recursos){
List<RecursoRelatorio> recursosRelatorio = new LinkedList<RecursoRelatorio>();
for (Recurso recurso : recursos) {
if (recurso.getRecModels().isEmpty()){
recursosRelatorio.add( new RecursoRelatorio(recurso,null,null));
}
for (RecModel recmodel : recurso.getRecModels()) {
RecursoRelatorio recurso_Relatorio = null;
try{
recmodel = recModelService.recuperaRecModelComModelo(recmodel);
}catch(AplicacaoException re){
}
recurso_Relatorio = new RecursoRelatorio(recurso,recmodel,recmodel.getModelo());
recursosRelatorio.add(recurso_Relatorio);
}
}
return recursosRelatorio;
}
}