/* * * 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.HPVig; import modelo.PMP; import modelo.PerioPAPVig; import modelo.PerioPM; import modelo.PerioPMVig; import modelo.PlPerMod; import service.anotacao.Transacional; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import DAO.HPVigDAO; import DAO.PerioPAPVigDAO; import DAO.PerioPMDAO; import DAO.PerioPMVigDAO; import DAO.Impl.HPVigDAOImpl; import DAO.Impl.PerioPAPVigDAOImpl; import DAO.Impl.PerioPMDAOImpl; import DAO.Impl.PerioPMVigDAOImpl; import DAO.controle.FabricaDeDao; import DAO.exception.ObjetoNaoEncontradoException; /** * * As classes de servi�o � que possuem as regras de neg�cio. Fazem as cr�ticas * quando necess�rio e chamam as classes DAO para pegar as informa��es do BD. * * S�o essas classes AppService que fazem o controle de transa�ao, ou seja quem * abre a transa�ao, "quem commita" atrav�s do interceptador de appservice. Aqui * defino se o metodo � transacional ou n�o e em fun�ao desta informa�ao o * interceptador vai usar ou nao transacao. * * * Esta classe � originaria de jpa8 - DAO Generico familia e adaptada com * tratamento de excecao feito em EmpregadoAppService de jsf4b para o metodo que * recupera todas as familias * * @author daysemou * */ public class PerioPMVigAppService { // DAOs private static PerioPMDAO perioPMDAO; private static PerioPMVigDAO perioPMVigDAO; private static HPVigDAO hpVigDAO; private static PerioPAPVigDAO perioPAPVigDAO; // Services private static HPVigAppService hpVigService; public PerioPMVigAppService() { try { // DAOs hpVigDAO = FabricaDeDao.getDao(HPVigDAOImpl.class); perioPMVigDAO = FabricaDeDao.getDao(PerioPMVigDAOImpl.class); perioPMDAO = FabricaDeDao.getDao(PerioPMDAOImpl.class); perioPAPVigDAO = FabricaDeDao.getDao(PerioPAPVigDAOImpl.class); // Services hpVigService = FabricaDeAppService.getAppService(HPVigAppService.class); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } /** * Inclui um objeto do tipo PerioPMVig, mas antes verifica se ja existe um periodo com este numero. * * @throws AplicacaoException */ @Transacional public void inclui(PerioPMVig perioPMVig) throws AplicacaoException { try { // Se encontrou um PerioPMVig, � porque j� existia alguem cadastrado c/ esse codigo. // perioPMVigDAO.recuperaPerioPMVigPorPeriodoPM(perioPMVig.getPeriodoPM()); throw new AplicacaoException("perioPMVig.PERIODO_EXISTENTE"); } catch (ObjetoNaoEncontradoException e) { } perioPMVigDAO.inclui(perioPMVig); } @Transacional public void incluiCopiandoPerioPM(PerioPM perioPM) throws AplicacaoException { PerioPMVig perioPMVig = new PerioPMVig(); perioPMVig.setDataInicial(perioPM.getDataInicial()); perioPMVig.setDataFinal(perioPM.getDataFinal()); perioPMVig.setNumDiasUteisMatriz(perioPM.getNumDiasUteisMatriz()); perioPMVig.setNumDiasUteisU2(perioPM.getNumDiasUteisU2()); perioPMVig.setPeriodoPM(perioPM.getPeriodoPM()); PerioPAPVig perioPAPVig = new PerioPAPVig(); try { // Foi utilizada a instanciacao neste ponto p/ evitar o problema de Inicializacao Ciclica! PerioPAPVigAppService perioPAPVigAppService = FabricaDeAppService.getAppService(PerioPAPVigAppService.class); perioPAPVig = perioPAPVigAppService.recuperaPerioPAPVigPorPeriodoPAP(perioPM.getPerioPAP().getPeriodoPAP()); } catch (ObjetoNaoEncontradoException e) { } catch (Exception e) { e.printStackTrace(); System.exit(1); } perioPMVig.setPerioPAPVig(perioPAPVig); //Como nesse momento ainda n tenho nenhum PMP, eu tenho q setar como null a lista de pmps //de um perioPMVig perioPMVig.setPmps(null); this.inclui(perioPMVig); return; } @Transacional public void incluiCopiandoTodosPerioPMs() throws AplicacaoException{ List<PerioPM> listaDePerioPM = perioPMDAO.recuperaListaDePerioPMsComPerioPAP(); for(PerioPM perioPM : listaDePerioPM){ this.incluiCopiandoPerioPM(perioPM); } } /** A principio nao tera alteracao de um perioPMVig */ @Transacional public void altera(PerioPMVig umPerioPMVig) { perioPMVigDAO.altera(umPerioPMVig); } @Transacional public void exclui(PerioPMVig perioPMVig) throws AplicacaoException { PerioPMVig perioPMVigBD = null; try { perioPMVigBD = perioPMVigDAO.getPorIdComLock(perioPMVig.getId()); } catch (ObjetoNaoEncontradoException e) { } perioPMVigDAO.exclui(perioPMVigBD); } @Transacional public void apagaTodos() throws AplicacaoException{ List<PerioPMVig> listaDePerioPMVig = perioPMVigDAO.recuperaListaDePerioPMVigs(); for(PerioPMVig perioPMVig : listaDePerioPMVig){ this.exclui(perioPMVig); } } public PerioPMVig recuperaPerioPMVigPorPeriodoPM(int periodoPM) throws AplicacaoException { try { return perioPMVigDAO.recuperaPerioPMVigPorPeriodoPM(periodoPM); } catch (ObjetoNaoEncontradoException e) { throw new AplicacaoException("perioPMVig.NAO_ENCONTRADO"); } } public List<PerioPMVig> recuperaListaDePerioPMVigs() { return perioPMVigDAO.recuperaListaDePerioPMVigs(); } public List<PerioPMVig> recuperaListaPaginadaDePerioPMVigs() { return perioPMVigDAO.recuperaListaPaginadaDePerioPMVigs(); } /** * Calcula o numero de dias uteis no perioPM dados os perioPM Inicial e final * * @param periodoInicial * @param periodoFinal * @return double */ public double calculaTotalDiasUteisIntervalo(PerioPMVig periodoInicial, PerioPMVig periodoFinal){ double total = 0.0; List<PerioPMVig> periodos = this.recuperaListaDePerioPMVigs(); //lembrando que sublist utiliza como parametros( int arg, int arg2 -1) entao quando for chamar //utilizar no formato( periodoInicial-1, periodofinal) List<PerioPMVig> intervalo = periodos.subList((periodoInicial.getPeriodoPM()-1), (periodoFinal.getPeriodoPM())); for (PerioPMVig perioPMVig : intervalo) { total += perioPMVig.getNumDiasUteisMatriz(); } return total; } public List<PerioPMVig> recuperaIntervaloDePerioPMVigs(int periodoInicial, int periodoFinal){ return perioPMVigDAO.recuperaIntervaloDePerioPMVigs(periodoInicial, periodoFinal); } }