/* * * 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.DeFamPer; import modelo.Familia; import modelo.FamiliaRelatorio; import modelo.Modelo; import modelo.PerioPAP; import modelo.PerioPM; import relatorio.Relatorio; import relatorio.RelatorioFactory; import service.anotacao.Transacional; import service.controleTransacao.FabricaDeAppService; import service.exception.AplicacaoException; import DAO.FamiliaDAO; import DAO.ParametrosDAO; import DAO.Impl.FamiliaDAOImpl; import DAO.Impl.ParametrosDAOImpl; import DAO.controle.FabricaDeDao; import DAO.exception.ObjetoNaoEncontradoException; import exception.relatorio.RelatorioException; /** * * 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 FamiliaAppService { // DAOs private static FamiliaDAO familiaDAO; private static ParametrosDAO parametrosDAO; private static DeFamPerAppService deFamPerService; private static PerioPAPAppService perioPAPAppService; public FamiliaAppService() { try { // DAOs familiaDAO = FabricaDeDao.getDao(FamiliaDAOImpl.class); parametrosDAO = FabricaDeDao.getDao(ParametrosDAOImpl.class); deFamPerService = FabricaDeAppService.getAppService(DeFamPerAppService.class); // Service perioPAPAppService = FabricaDeAppService.getAppService(PerioPAPAppService.class); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } /** * Inclui um objeto do tipo Familia * * Verifica se o c�digo da fam�lia � �nico * * @throws AplicacaoException */ @Transacional public void inclui(Familia familia) throws AplicacaoException { try { /* * Se o metodo nao recuperaUmaFamiliaPeloCodigo nao encontrar a familia * cujo codigo foi passado sera retornada uma exce�ao a qual sera capturada * pelo catch abaixo permitindo assim incluir uma nova familia. * */ familiaDAO.recuperaUmaFamiliaPeloCodigo(familia.getCodFamilia()); throw new AplicacaoException("familia.CODIGO_EXISTENTE"); } catch (ObjetoNaoEncontradoException e) { } familiaDAO.inclui(familia); try { deFamPerService.incluiDemandas(familia); } catch (AplicacaoException ex) { throw new AplicacaoException(ex.getMessage()); } } /** * Altera um objeto do tipo Familia * * @throws AplicacaoException */ @Transacional public void altera(Familia umaFamilia) { familiaDAO.altera(umaFamilia); } /** * Exclui um objeto do tipo Familia * * Verifica se a fam�lia possui modelos * * @throws AplicacaoException */ @Transacional public void exclui(Familia familia) throws AplicacaoException { try { familia = familiaDAO.recuperaUmaFamiliaEModelos(familia.getId()); } catch (ObjetoNaoEncontradoException e) { throw new AplicacaoException("familia.NAO_ENCONTRADA"); } if (familia.getModelos().size() > 0) { throw new AplicacaoException("familia.POSSUI_MODELOS"); } familiaDAO.exclui(familia); } @SuppressWarnings("unchecked") public void gerarRelatorioFamilia(List<FamiliaRelatorio> familiasRelatorios) throws AplicacaoException { System.out.println("##################### 1 - Passou pelo metodo gerarRelatorioFamilia de FamiliaAppService ##################"); System.out.println("################## Passo 3 gerarRelatorioFamilia######################"); Relatorio relatorio = RelatorioFactory.getRelatorio(Relatorio.RELATORIO_LISTAGEM_DE_FAMILIAS_COM_MODELOS); try{ System.out.println("##################### 2 - Passou pelo metodo gerarRelatorioFamilia de FamiliaAppService ##################"); relatorio.gerarRelatorio(familiasRelatorios, new HashMap()); } catch (RelatorioException re){ throw new AplicacaoException("familia.RELATORIO_NAO_GERADO"); } } @SuppressWarnings("unchecked") public void gerarRelatorioAgregado(List<Familia> familias) throws AplicacaoException { System.out.println("##################### 1 - Passou pelo metodo gerarRelatorio de FamiliaAppService ##################"); System.out.println("################## Passo 3 ######################"); Relatorio relatorio = RelatorioFactory.getRelatorio(Relatorio.RELATORIO_LISTAGEM_DE_FAMILIAS_COM_MODELOS); try{ System.out.println("##################### 2 - Passou pelo metodo gerarRelatorio de FamiliaAppService ##################"); relatorio.gerarRelatorio(this.converterParaFamiliaRelatorio(familias), new HashMap()); } catch (RelatorioException re){ throw new AplicacaoException("familia.RELATORIO_NAO_GERADO"); } } /** * Este metodo � respons�vel por transformar uma lista de Familias com Modelos * em uma lista de FamiliaRelatorio. A classe FamiliaRelatorio � um agregado de * atributos das classes Familia e Modelo sendo utilizado para impressao de um * relatorio com Familias e Modelos. * * @author marques.araujo * */ public List<FamiliaRelatorio> converterParaFamiliaRelatorio(List<Familia> familias){ List<FamiliaRelatorio> familiasRelatorio = new LinkedList<FamiliaRelatorio>(); for (Familia familia : familias) { if (familia.getModelos().isEmpty()){ familiasRelatorio.add( new FamiliaRelatorio(familia,null)); } for (Modelo modelo : familia.getModelos() ) { FamiliaRelatorio familiaRelatorio = new FamiliaRelatorio(familia,modelo); familiasRelatorio.add(familiaRelatorio); } } return familiasRelatorio; } //Este metodo eh o metodo original para gerar relatorios simples. @SuppressWarnings("unchecked") public void gerarRelatorio(List<Familia> familias) throws AplicacaoException { System.out.println("*************** 1 - Passou pelo metodo gerarRelatorio de FamiliaAppService ************"); System.out.println("*************** Passo 3 ****************"); Relatorio relatorio = RelatorioFactory.getRelatorio(Relatorio.RELATORIO_LISTAGEM_DE_FAMILIAS); try{ System.out.println("*************** 2 - Passou pelo metodo gerarRelatorio de FamiliaAppService ************"); relatorio.gerarRelatorio(familias, new HashMap()); } catch (RelatorioException re){ throw new AplicacaoException("familia.RELATORIO_NAO_GERADO"); } } /** * Executa uma busca por todas as fam�lias paginando o resultado * * @return List<Familia> */ public List<Familia> recuperaListaPaginadaDeFamilias() { return familiaDAO.recuperaListaPaginadaDeFamilias(); } /** * Executa uma busca por todas as fam�lias paginando o resultado * * @return List<Familia> */ public List<Familia> recuperaListaDeFamilias() { return familiaDAO.recuperaListaDeFamilias(); } /** * Executa uma busca por todas as fam�lias com ou sem modelos * @author marques.araujo * @return List<Familia> */ public List<Familia> recuperaListaDeFamiliasComModelos() { return familiaDAO.recuperaListaDeFamiliasComModelos(); } /** * @author marques.araujo * Recupera a lista de todos as familias que possuam c�digo aproximado com o passado por parametro. */ public List<Familia> recuperaListaDeFamiliasPeloCodigoLike(String codFamilia){ return familiaDAO.recuperaListaDeFamiliasPeloCodigoLike(codFamilia); } /** * @author marques.araujo * @return Uma lista de familias com esta descricao */ public List<Familia> recuperaListaDeFamiliasPorDescricao(String descrFamilia) { return familiaDAO.recuperaListaDeFamiliasPorDescricao(descrFamilia); } public Familia recuperaUmaFamiliaPeloCodigo(String codFamilia)throws AplicacaoException{ Familia familia = null; try{ familia = familiaDAO.recuperaUmaFamiliaPeloCodigo(codFamilia); }catch(ObjetoNaoEncontradoException e){ throw new AplicacaoException("familia.NAO_ENCONTRADA"); } return familia; } /** * @author marques.araujo * * Este metodo esta sendo utilizado me DeFamPerActions * para a tela list de DeFamPer. */ public List<Familia> recuperaListaDeFamiliasComDeFamPers(){ List<Familia> familias = familiaDAO.recuperaListaDeFamiliasComDeFamPers(); return familias; } public Familia recuperaUmaFamiliaApartirDoModelo(Modelo modelo)throws AplicacaoException { Familia familia = null; try{ familia = familiaDAO.recuperaUmaFamiliaApartirDoModelo(modelo); }catch(ObjetoNaoEncontradoException obj){ throw new AplicacaoException(); } return familia; } }