/* * * 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.Collections; import java.util.List; import javax.faces.model.DataModel; import javax.faces.model.ListDataModel; import comparator.PlPerModComparatorPorPerioPM; import modelo.CadPlan; import modelo.Modelo; import modelo.PlPerMod; import modelo.PlanoModelo; import service.anotacao.Transacional; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import DAO.HPDAO; import DAO.ModeloDAO; import DAO.PerioPMDAO; import DAO.PlanoModeloDAO; import DAO.Impl.HPDAOImpl; import DAO.Impl.PerioPMDAOImpl; import DAO.Impl.PlanoModeloDAOImpl; import DAO.controle.FabricaDeDao; import DAO.exception.ObjetoNaoEncontradoException; public class PlanoModeloAppService { // DAOs private static PlanoModeloDAO planoModeloDAO; public PlanoModeloAppService() { try { // DAOs planoModeloDAO = FabricaDeDao.getDao(PlanoModeloDAOImpl.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 em cascata o set de PlPerMods do planoModelo * */ @Transacional public void inclui(PlanoModelo planoModelo) { planoModeloDAO.inclui(planoModelo); } @Transacional public void altera(PlanoModelo planoModelo) { planoModeloDAO.altera(planoModelo); } public PlanoModelo recuperarPlPerModsPorPlanoModelo(PlanoModelo planoModelo) throws ObjetoNaoEncontradoException { return planoModeloDAO.recuperarPlPerModsPorPlanoModelo(planoModelo); } @Transacional public void exclui(PlanoModelo planoModelo) { PlanoModelo planoModeloBD = null; try { planoModeloBD = planoModeloDAO.getPorIdComLock(planoModelo.getId()); } catch (ObjetoNaoEncontradoException ex){ } planoModeloDAO.exclui(planoModeloBD); } @Transacional public double calculaProdDiariaMediaDoPlanoModelo(PlanoModelo planoModelo){ double prodDiariaMedia = 0.0; for(PlPerMod plPerMod : planoModelo.getPlPerModsList()){ prodDiariaMedia += plPerMod.getProdDiariaLoteModel(); } prodDiariaMedia = prodDiariaMedia / planoModelo.getPlPerModsList().size(); planoModelo.setProdDiariaMediaPlanoModelo(prodDiariaMedia); return prodDiariaMedia; } @Transacional public double calculaEscore(PlanoModelo planoModelo){ double escore = 0.0; for(PlPerMod plPerMod : planoModelo.getPlPerModsList()){ escore += plPerMod.getEscorePlanPerMod(); } escore = escore / planoModelo.getPlPerModsList().size(); planoModelo.setEscore(escore); return escore; } /** * Inclui os registros de PlanoModelo relativos a um novo modelo. * � usado no momento da inclusao de um modelo. * * Felipe.Arruda * @param planosCadastrados * @param modelo */ @Transacional public void incluirPlanoModeloParaNovoModelo(List<CadPlan> planosCadastrados, Modelo modelo){ for (CadPlan cadPlan : planosCadastrados) { PlanoModelo planoModelo = new PlanoModelo(cadPlan, modelo); this.inclui(planoModelo); PlPerModAppService plPerModService; try { plPerModService = FabricaDeAppService.getAppService(PlPerModAppService.class); // Inicializa��o c�clica plPerModService.incluirPlPerModParaNovoModelo(planoModelo); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } } }