/* * * 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 periopm; import java.util.ArrayList; import java.util.Collections; import java.util.List; import modelo.CadPlan; import modelo.DeModPer; import modelo.HP; import modelo.Parametros; import modelo.PerioPAP; import modelo.PerioPM; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import DAO.CadPlanDAO; import DAO.DeModPerDAO; import DAO.HPDAO; import DAO.ParametrosDAO; import DAO.PerioPAPDAO; import DAO.PerioPMDAO; import DAO.Impl.CadPlanDAOImpl; import DAO.Impl.DeModPerDAOImpl; import DAO.Impl.HPDAOImpl; import DAO.Impl.ParametrosDAOImpl; import DAO.Impl.PerioPAPDAOImpl; import DAO.Impl.PerioPMDAOImpl; import DAO.controle.FabricaDeDao; import DAO.exception.ObjetoNaoEncontradoException; import service.HPAppService; import service.PerioPAPAppService; import service.PerioPMAppService; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import util.JPAUtil; public class TestePerioPM { // Services private static PerioPMAppService perioPMService; private static PerioPAPAppService perioPAPService; private static HPAppService hpService; // DAOs private static ParametrosDAO parametrosDAO; private static CadPlanDAO cadPlanDAO; private static DeModPerDAO deModPerDAO; private static HPDAO hpDAO; private static PerioPMDAO perioPMDAO; private static PerioPAPDAO perioPAPDAO; // Constantes final static int EXCLUSAO_PRIMEIRO_PERIODO = 0; final static int EXCLUSAO_ULTIMO_PERIODO = 1; @BeforeClass public void setupClass(){ try { System.out.println("-----------------------------> Startando a JPA..."); JPAUtil.JPAstartUp(); System.out.println("-----------------------------> JPA startada com sucesso!"); parametrosDAO = FabricaDeDao.getDao(ParametrosDAOImpl.class); cadPlanDAO = FabricaDeDao.getDao(CadPlanDAOImpl.class); deModPerDAO = FabricaDeDao.getDao(DeModPerDAOImpl.class); hpDAO = FabricaDeDao.getDao(HPDAOImpl.class); perioPMDAO = FabricaDeDao.getDao(PerioPMDAOImpl.class); perioPAPDAO = FabricaDeDao.getDao(PerioPAPDAOImpl.class); perioPMService = FabricaDeAppService.getAppService(PerioPMAppService.class); perioPAPService = FabricaDeAppService.getAppService(PerioPAPAppService.class); hpService = FabricaDeAppService.getAppService(HPAppService.class); } catch (Exception e) { } } //@Test public void listarPeriodosOrdenadamente(){ List<PerioPM> periodos = perioPMService.recuperaListaDePerioPMs(); // Metodo da classe Collections que ordena uma lista baseado no metodo compareTo() do Objeto. Collections.sort(periodos); for (PerioPM perioPM : periodos) { System.out.println("PERIODO[" + perioPM.getPeriodoPM() + "] - Num. Dias U2 = " + perioPM.getNumDiasUteisU2()); } } // ESTE METODO NAO SERA NECESSARIO NO SERVICE DE PERIOPM. USADO APENAS AQUI NO TESTE PARA EXPLICITAR // QUAL O TIPO DE EXCLUSAO ESTA SENDO UTILIZADA. @Test public void excluirPeriodo() throws AplicacaoException{ excluirPrimeiroOuUltimo(EXCLUSAO_ULTIMO_PERIODO); } public void excluirPrimeiroOuUltimo(int tipoExclusao) throws AplicacaoException{ if (!cadPlanDAO.recuperaListaDeCadPlan().isEmpty()){ throw new AplicacaoException("cadplan.PLANOS_CADASTRADOS"); } List<PerioPM> periodos = perioPMService.recuperaListaDePerioPMs(); int indiceInicial; int indiceFinal; if (tipoExclusao == EXCLUSAO_PRIMEIRO_PERIODO){ PerioPM primeiroPeriodo = periodos.get(0); indiceInicial = periodos.indexOf(primeiroPeriodo) + 1; indiceFinal = periodos.size() - 1; if (indiceInicial > indiceFinal){ indiceInicial = 0; // Significa que a lista de Periodos possui apenas 1 elemento } List<PerioPM> periodosSubsequentes = perioPMService.recuperaIntervaloDePerioPMs (periodos.get(indiceInicial).getPeriodoPM(), periodos.get(indiceFinal).getPeriodoPM()); perioPMService.exclui(primeiroPeriodo); atualizarPeriodosRestantes(periodosSubsequentes, EXCLUSAO_PRIMEIRO_PERIODO); } else { indiceInicial = periodos.indexOf(periodos.get(0)); indiceFinal = periodos.indexOf(periodos.get(periodos.size() - 1)) - 1; // Indice anterior ao indice do ultimo periodo da lista PerioPM ultimoPeriodo = periodos.get(periodos.size() - 1); if (indiceFinal < 0){ indiceFinal = 0; // Significa que a lista de Periodos possui apenas 1 elemento } perioPMService.exclui(ultimoPeriodo); List<PerioPM> periodosRestantes = perioPMService.recuperaIntervaloDePerioPMs (periodos.get(indiceInicial).getPeriodoPM(), periodos.get(indiceFinal).getPeriodoPM()); atualizarPeriodosRestantes(periodosRestantes, EXCLUSAO_ULTIMO_PERIODO); } atualizarEntidadesDependentes(); } public void atualizarPeriodosRestantes(List<PerioPM> periodosRestantes, int tipoExclusao){ List<PerioPAP> perioPAPAntigos = perioPAPService.recuperaListaDePerioPAPs(); for (int i = 1; i <= periodosRestantes.size(); i++) { PerioPM perioPMAtual = null; try { perioPMAtual = perioPMDAO.getPorId(((periodosRestantes.get(i - 1).getId()))); } catch (ObjetoNaoEncontradoException ex) { } if (tipoExclusao == EXCLUSAO_PRIMEIRO_PERIODO){ // RENUMERACAO DOS REGISTROS DE PerioPM perioPMAtual.setPeriodoPM(perioPMAtual.getPeriodoPM() - 1); } if (i <= perioPAPAntigos.size()){ PerioPAP perioPAPAtual = null; try { perioPAPAtual = perioPAPDAO.getPorId((perioPAPAntigos.get(i - 1).getId())); } catch (ObjetoNaoEncontradoException e) { } // OS PerioPAPs ANTIGOS VAO SENDO LIGADOS DE FORMA 1 <--> 1 COM OS PerioPMs perioPMAtual.setPerioPAP(perioPAPAtual); } else { // MODULO QUE ADICIONA NOVOS PerioPAPs PARA CASAR COM OS PerioPMs RESTANTES PerioPAP novoPerioPAP = new PerioPAP(); novoPerioPAP.setPeriodoPAP(perioPMAtual.getPeriodoPM()); try { perioPAPService.inclui(novoPerioPAP); } catch (AplicacaoException e) { } perioPMAtual.setPerioPAP(novoPerioPAP); } perioPMService.altera(perioPMAtual); } } public void atualizarEntidadesDependentes() throws AplicacaoException { // 1) Setar o parametro 'InicPlanejamento' como FALSE Parametros parametro = parametrosDAO.recuperaListaDeParametros().get(0); parametro.setInicPlanejamento(false); parametrosDAO.altera(parametro); // 2) ATUALIZAR OS REGISTROS DE DeFamPer (PROCESSO ANALOGO AO FEITO EM DeModPer ABAIXO) // // ---------> Ainda nao implementado, pois aguarda a conclusao de DeFamPer <--------- // 3) ATUALIZAR OS REGISTROS DE DeModPer // a) Excluir todos os registros de DeModPer cadastrados List<DeModPer> demandas = deModPerDAO.recuperaListaDeDemandaModeloPeriodo(); for (DeModPer deModPer : demandas) { deModPerDAO.exclui(deModPer); } // 4) Excluir o HP cadastrado no Sistema List<HP> hpBD = hpDAO.recuperaListaDeHP(); if (!hpBD.isEmpty()){ HP hp = hpBD.get(0); hpService.exclui(hp); } // 5) Excluir todos os registros de CadPlan do sistema List<CadPlan> planos = cadPlanDAO.recuperaListaDeCadPlan(); for (CadPlan plano : planos) { cadPlanDAO.exclui(plano); } } }