Java tutorial
/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ //Source file: D:\\CC_VIEWS\\SQUALE_V0_0_ACT\\SQUALE\\SRC\\squaleCommon\\src\\org\\squale\\squalecommon\\enterpriselayer\\facade\\AuditFacade.java package org.squale.squalecommon.enterpriselayer.facade.component; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.commons.exception.JrafEnterpriseException; import org.squale.jraf.helper.PersistenceHelper; import org.squale.jraf.provider.persistence.hibernate.facade.FacadeHelper; import org.squale.jraf.spi.enterpriselayer.IFacade; import org.squale.jraf.spi.persistence.IPersistenceProvider; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.daolayer.component.AuditDAOImpl; import org.squale.squalecommon.daolayer.component.ApplicationDAOImpl; import org.squale.squalecommon.datatransfertobject.component.AuditDTO; import org.squale.squalecommon.datatransfertobject.component.ComponentDTO; import org.squale.squalecommon.datatransfertobject.transform.component.AuditTransform; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ApplicationBO; import org.squale.squalecommon.enterpriselayer.facade.FacadeMessages; /** */ public class AuditFacade implements IFacade { /** * Entier renseignant que l'on souhaite tous les audits */ public static final int ALL_AUDIT = 0; /** * Entier renseignant que l'on souhaite uniquement les audits de suivi */ public static final int PERIODIC_ONLY = 1; /** * Entier renseignant qu'on souhaite uniquement les audits de jalon */ public static final int MILESTONE_ONLY = 2; /** log */ private static Log LOG = LogFactory.getLog(AuditFacade.class); /** * provider de persistence */ private static final IPersistenceProvider PERSISTENTPROVIDER = PersistenceHelper.getPersistenceProvider(); /** * Permet de supprimer un audit donn et tous ses rsultats associs * * @use by PurgeComponent.purgeApplication() * @param pAudit AuditDTO renseignant l'ID de l'audit * @throws JrafEnterpriseException exception JRAF * @roseuid 42CBFFB0024D */ public static void delete(AuditDTO pAudit) throws JrafEnterpriseException { delete(pAudit, null); } /** * Charge l'audit * * @param pAudit l'audit rcuprer (on ne fourni que l'id) * @return l'audit * @throws JrafEnterpriseException en cas d'chec */ public static AuditDTO get(AuditDTO pAudit) throws JrafEnterpriseException { return getById(new Long(pAudit.getID())); } /** * Permet de supprimer un audit donn et tous ses rsultats associs * * @use by PurgeComponent.purgeApplication() * @param pAudit AuditDTO renseignant l'ID de l'audit * @param pSession session JRAF * @throws JrafEnterpriseException exception JRAF * @roseuid 42CBFFB0024F */ public static void delete(AuditDTO pAudit, ISession pSession) throws JrafEnterpriseException { // Initialisation AuditBO auditBO = null; // objet metier a supprimer Long auditID = new Long(pAudit.getID()); // identifiant de l'audit try { if (pSession == null) { // CHECKSTYLE:OFF pSession = PERSISTENTPROVIDER.getSession(); // CHECKSTYLE:ON } AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // Chargement de l'objet AuditBO + suppression auditBO = (AuditBO) auditDAO.load(pSession, auditID); if (auditBO != null) { auditDAO.remove(pSession, auditBO); } else { LOG.error(FacadeMessages.getString("facade.exception.auditfacade.delete.auditnull")); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".delete"); } finally { FacadeHelper.closeSession(pSession, AuditFacade.class.getName() + ".delete"); } } /** * Renvoie le dernier audit DE SUIVI de l'application en cours * * @use by ResultsComponent * @param pApplication ComponentDTO de l'application concerne * @param pAuditType type d'Audit sous forme de chanes de caractres * @return AuditDTO dernier audit effectu * @throws JrafEnterpriseException exception JRAF * @roseuid 42CBFFB00258 */ public static AuditDTO getLastAudit(ComponentDTO pApplication, String pAuditType) throws JrafEnterpriseException { return getLastAudit(pApplication, pAuditType, null); } /** * Renvoie l'audit prcedent pour la mme application * * @param pAudit audit courant * @param pSession session hibernat * @return l'audit prcedent s'il existe * @throws JrafEnterpriseException si pb hibernate */ public static AuditDTO getPreviousAudit(AuditDTO pAudit, ISession pSession) throws JrafEnterpriseException { AuditDTO auditDTO = null; AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); ISession session = pSession; try { // cration d'une session Hibernate if (session == null) { session = PERSISTENTPROVIDER.getSession(); } // On rcupre l'audit en base Long auditId = new Long(pAudit.getID()); AuditBO curAudit = (AuditBO) auditDAO.load(session, auditId); // et l'application associe ApplicationBO appli = ApplicationDAOImpl.getInstance().loadByAuditId(session, auditId); if (curAudit != null && appli != null) { AuditBO audit = auditDAO.findPreviousAudit(session, curAudit.getId(), curAudit.getHistoricalDate(), appli.getId(), null); if (audit != null) { auditDTO = AuditTransform.bo2Dto(audit, pAudit.getApplicationId()); } } } catch (JrafDaoException e) { LOG.error(AuditFacade.class.getName() + ".getLastAudit", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getLastAudit"); } return auditDTO; } /** * Renvoie le dernier audit DE SUIVI de l'application en cours * * @use by ResultsComponent * @param pApplication ComponentDTO de l'application concerne * @param pAuditType type d'Audit sous forme de chanes de caractres * @param pSession session jraf * @return AuditDTO dernier audit effectu * @throws JrafEnterpriseException exception JRAF */ public static AuditDTO getLastAudit(ComponentDTO pApplication, String pAuditType, ISession pSession) throws JrafEnterpriseException { // Initialisation AuditDTO auditDTO = null; // retour de la facade AuditBO auditBO = null; // retour de AuditDAO ISession session = pSession; try { // cration d'une session Hibernate if (session == null) { session = PERSISTENTPROVIDER.getSession(); } AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); auditBO = auditDAO.getLastAuditByApplication(session, pApplication.getID(), pAuditType, AuditBO.TERMINATED); if (auditBO != null) { auditDTO = AuditTransform.bo2Dto(auditBO, pApplication.getID()); } else { LOG.error(FacadeMessages.getString("facade.exception.auditfacade.getlastaudit.auditnull")); } } catch (JrafDaoException e) { LOG.error(AuditFacade.class.getName() + ".getLastAudit", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getLastAudit"); } return auditDTO; } /** * Permet de rcuprer une liste d'audits en chec pour une application donne * * @use by ResultsComponent * @param pComponent ApplicationDTO renseignant l'ID de l'application * @param pNbLignes nombre de lignes * @param pIndexDepart index de depart * @return Collection de AuditDTO * @throws JrafEnterpriseException exception JRAF */ public static List getFailedAudits(ComponentDTO pComponent, Integer pNbLignes, Integer pIndexDepart) throws JrafEnterpriseException { return getAudits(pComponent, pNbLignes, pIndexDepart, null, AuditBO.FAILED); } /** * Permet de rcuprer une liste d'audits termins pour une application donne * * @use by ResultsComponent * @param pComponent ApplicationDTO renseignant l'ID de l'application * @param pNbLignes nombre de lignes * @param pIndexDepart index de depart * @return Collection de AuditDTO * @throws JrafEnterpriseException exception JRAF */ public static List getTerminatedAudits(ComponentDTO pComponent, Integer pNbLignes, Integer pIndexDepart) throws JrafEnterpriseException { return getAudits(pComponent, pNbLignes, pIndexDepart, null, AuditBO.TERMINATED); } /** * Permet de rcuprer une liste d'audits pour une application donne * * @use by ResultsComponent * @param pComponent ApplicationDTO renseignant l'ID de l'application * @param pNbLignes nombre de lignes * @param pIndexDepart index de depart * @param pType type de l'audit * @param pStatus statut de l'audit * @return Collection de AuditDTO * @throws JrafEnterpriseException exception JRAF */ public static List getAudits(ComponentDTO pComponent, Integer pNbLignes, Integer pIndexDepart, String pType, int pStatus) throws JrafEnterpriseException { // Initialisation List auditBOs = null; // retour de la DAO List auditDTOs = new ArrayList(); // retour de la facade ISession session = null; try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // Obtention des audits dans la base auditBOs = auditDAO.findWhereComponent(session, pComponent.getID(), pNbLignes, pIndexDepart, pType, pStatus); // Parcours de chaque audit et transformation de l'audit Iterator iterator = auditBOs.iterator(); AuditBO auditBO = null; while (iterator.hasNext()) { auditBO = (AuditBO) iterator.next(); // Recuperation du BO dans la collection + transformation en DTO // ajout du AuditDTO a la collection de DTOs AuditDTO auditDTO = AuditTransform.bo2Dto(auditBO, pComponent.getID()); auditDTOs.add(auditDTO); } } catch (JrafDaoException e) { auditDTOs = null; LOG.error(AuditFacade.class.getName() + ".getLastAudits", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getLastAudits"); } return auditDTOs; } /** * Permet de rcuprer laudits termins pour une application donne * * @use by ResultsComponent * @param pComponent ApplicationDTO renseignant l'ID du projet * @param pNbLignes nombre de lignes * @param pIndexDepart index de depart * @param pType type de l'audit * @param pStatus le status de l'audit * @return Collection de AuditDTO * @throws JrafEnterpriseException exception JRAF * @roseuid 42CBFFB00275 */ public static List getLastAudits(ComponentDTO pComponent, Integer pNbLignes, Integer pIndexDepart, String pType, int pStatus) throws JrafEnterpriseException { return getAudits(pComponent, pNbLignes, pIndexDepart, pType, pStatus); } /** * The list of audits for the applications of pApplications which have been done after pDate (if this parameter is * not null) and whose status aren't in pExcludedStatus. * * @param pApplications The applications * @param pDate The date * @param pExcludedStatus The list of status which should be excluded * @return The list of audits * @throws JrafEnterpriseException If an error occur */ public static Collection getAllAuditsAfterDate(Collection pApplications, Date pDate, Integer[] pExcludedStatus) throws JrafEnterpriseException { // Initialization List auditBOs = null; List auditDTOs = new ArrayList(); List appliIds = new ArrayList(); ISession session = null; // Creation of the list of applications id's Iterator it = pApplications.iterator(); while (it.hasNext()) { ComponentDTO currentComponent = (ComponentDTO) it.next(); appliIds.add(new Long(currentComponent.getID())); } try { // The hibernate session session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); auditBOs = auditDAO.findAfterDateWhereComponents(session, appliIds, pDate, pExcludedStatus, null); auditDTOs = bo2DtoWithApplication(session, auditBOs); } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".getAllAuditsAfterDate"); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getAllAuditsAfterDate"); } return auditDTOs; } /** * @param pApplication l' application renseignant l'id * @param pDate la date limite de rcupration des audits * @param pWithFailedAudits indique si les audits en chec doivent galement tre collects * @return les audits correspondants aux critres de recherche * @throws JrafEnterpriseException exception JRAF */ private static Collection getAllAuditsAfterDate(ComponentDTO pApplication, Date pDate, boolean pWithFailedAudits) throws JrafEnterpriseException { // Initialisation List auditBOs = null; // retour de la DAO List auditDTOs = new ArrayList(); // retour de la facade ISession session = null; try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // Obtention des audits dans la base auditBOs = auditDAO.findAfterDateWhereComponent(session, pApplication.getID(), pDate, pWithFailedAudits); // Parcours de chaque audit et transformation de l'audit Iterator iterator = auditBOs.iterator(); AuditBO auditBO = null; while (iterator.hasNext()) { auditBO = (AuditBO) iterator.next(); // Recuperation du BO dans la collection + transformation en DTO // ajout du AuditDTO a la collection de DTOs AuditDTO auditDTO = AuditTransform.bo2Dto(auditBO, pApplication.getID()); auditDTO.setApplicationName(pApplication.getName()); auditDTOs.add(auditDTO); } } catch (JrafDaoException e) { auditDTOs = null; LOG.error(AuditFacade.class.getName() + ".getAllAuditsAfterDate", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getAllAuditsAfterDate"); } return auditDTOs; } /** * @param pApplications les applications * @param pDate la date * @param pExcludedStatus les statuts exclure * @param pExcludedApplications les ids des applications ne pas prendre en compte * @param pNbAuditsPerAppli le nombre max d'audits par application * @return les audits pour les applications de pApplications dont l'excution s'est effectu aprs pDate (si ce * paramtre n'est pas nul) et dont le statut n'est pas dans <code>pExcludedStatus</code> * @throws JrafEnterpriseException si erreur */ public static Collection getAuditsForPortlet(Collection pApplications, Date pDate, Integer[] pExcludedStatus, String[] pExcludedApplications, Integer pNbAuditsPerAppli) throws JrafEnterpriseException { // Initialisation List auditBOs = null; // retour de la DAO List auditDTOs = new ArrayList(); // retour de la facade // DAO AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); ApplicationDAOImpl appliDAO = ApplicationDAOImpl.getInstance(); ISession session = null; try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); List excludedApplisList = new ArrayList(0); if (null != pExcludedApplications) { excludedApplisList = Arrays.asList(pExcludedApplications); } List appliIds = new ArrayList(); // On construit la liste des ids des applications en prenant en compte les applications exclues for (Iterator it = pApplications.iterator(); it.hasNext();) { ComponentDTO currentComponent = (ComponentDTO) it.next(); if (!excludedApplisList.contains("" + currentComponent.getID())) { appliIds.add(new Long(currentComponent.getID())); } } auditBOs = auditDAO.findAfterDateWhereComponents(session, appliIds, pDate, pExcludedStatus, pNbAuditsPerAppli); if (0 == auditBOs.size()) { // On rcupre le dernier audit effectu auditBOs = auditDAO.findAfterDateWhereComponents(session, appliIds, null, pExcludedStatus, new Integer(1)); } // On transforme les audits afin que l'application associe soit aussi renseigne auditDTOs = bo2DtoWithApplication(session, auditBOs); } catch (JrafDaoException e) { auditDTOs = null; LOG.error(AuditFacade.class.getName() + ".getAuditsForPortlet", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getAuditsForPortlet"); } return auditDTOs; } /** * permet d'ajouter un audit une application donne (cas d'un milestone) * * @use by ApplicationAdministratorComponent * @param pAudit AuditDTO * @return AuditDTO avec l'identifiant renseign * @throws JrafEnterpriseException exception JRAF * @roseuid 42CBFFB00289 */ public static AuditDTO insertAudit(AuditDTO pAudit) throws JrafEnterpriseException { return insertAudit(pAudit, null); } /** * permet d'ajouter un audit une application donne (cas d'un milestone) * * @use by ApplicationAdministratorComponent * @param pAudit AuditDTO * @param pSession session JRAF * @return AuditDTO avec l'identifiant renseign * @throws JrafEnterpriseException exception JRAF * @roseuid 42CBFFB0028C */ public static AuditDTO insertAudit(AuditDTO pAudit, ISession pSession) throws JrafEnterpriseException { // Initialisation AuditDTO auditDTO = null; // retour de la facade AuditBO auditBO = null; // objet metier audit a ajouter ApplicationBO applicationBO = null; // projet relatif a l'audit Long applicationID = new Long(pAudit.getApplicationId()); // identifiant du projet relatif a un audit try { // creation d'une session Hibernate if (pSession == null) { // CHECKSTYLE:OFF pSession = PERSISTENTPROVIDER.getSession(); // CHECKSTYLE:ON } // Initialisation des DAO AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); ApplicationDAOImpl applicationDAO = ApplicationDAOImpl.getInstance(); // Chargement du projet relatif applicationBO = (ApplicationBO) applicationDAO.get(pSession, applicationID); if (applicationBO != null) { // Verification qu'un premier audit de jalon n'a pas ete pos int nbAudits = auditDAO.countWhereType(pSession, applicationBO, pAudit.getType(), pAudit.getStatus()); if (nbAudits == 0) { // transformation de l'audit auditBO = AuditTransform.dto2Bo(pAudit); // Creation de l'audit sans aucune relation auditDAO.create(pSession, auditBO); // ajout de l'audit et sauvegarde du projet applicationBO.addAudit(auditBO); applicationDAO.save(pSession, applicationBO); auditDTO = AuditTransform.bo2Dto(auditBO, applicationID.longValue()); } } else { LOG.error(FacadeMessages.getString("facade.exception.auditfacade.insertaudit.applicationnull")); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".insertNextAudit"); } finally { FacadeHelper.closeSession(pSession, AuditFacade.class.getName() + ".insertNextAudit"); } return auditDTO; } /** * Insertion d'un audit. * * @param pAuditDTO l'audit insrer * @param pSession la session hibernate * @return le DTO de l'audit insr (null en cas d'erreur d'insertion) * @throws JrafEnterpriseException si erreur */ private static AuditDTO insertNormalAudit(AuditDTO pAuditDTO, ISession pSession) throws JrafEnterpriseException { Long applicationID = new Long(pAuditDTO.getApplicationId()); AuditDTO lAuditDTO = null; try { AuditDAOImpl lAuditDAO = AuditDAOImpl.getInstance(); ApplicationDAOImpl lApplicationDAO = ApplicationDAOImpl.getInstance(); ApplicationBO lApplicationBO = (ApplicationBO) lApplicationDAO.get(pSession, applicationID); if (lApplicationBO != null) { AuditBO lAuditBO = AuditTransform.dto2Bo(pAuditDTO); lAuditDAO.create(pSession, lAuditBO); lApplicationBO.addAudit(lAuditBO); lApplicationDAO.save(pSession, lApplicationBO); lAuditDTO = AuditTransform.bo2Dto(lAuditBO); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".insertNormalAudit"); } return lAuditDTO; } /** * Constructeur par defaut * * @roseuid 42CBFFB00296 */ private AuditFacade() { } /** * Permet de reprogramm un audit sur une application au lendemain. si il s'agit d'un audit de suivi, l'audit dj * programm est supprim * * @param pAudit AuditDTO dfinissant l'id de l'audit * @return l'audit reprogramm * @throws JrafEnterpriseException si erreur */ public static AuditDTO restartAudit(AuditDTO pAudit) throws JrafEnterpriseException { AuditDTO auditDTO = null; ISession session = null; try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // On rcupre l'audit dont l'id est renseign par pAudit AuditBO failedAudit = (AuditBO) auditDAO.load(session, new Long(pAudit.getID())); // On transforme le bo en dto auditDTO = AuditTransform.bo2Dto(failedAudit, pAudit.getApplicationId()); // On change la date pour le lancer le lendemain 0:00 GregorianCalendar cal = new GregorianCalendar(); cal.add(GregorianCalendar.HOUR_OF_DAY, ApplicationFacade.HOUR_OF_AUDIT - cal.get(GregorianCalendar.HOUR_OF_DAY)); cal.add(GregorianCalendar.MINUTE, ApplicationFacade.MINUTE_OF_AUDIT - cal.get(GregorianCalendar.MINUTE)); auditDTO.setDate(cal.getTime()); // Son status sera en attente d'excution auditDTO.setStatus(AuditBO.NOT_ATTEMPTED); // On insre l'audit avec un traitement diffrent selon le type de l'audit if (auditDTO.getType().equals(AuditBO.MILESTONE)) { auditDTO = insertAudit(auditDTO); } else { // Il s'agit d'un audit de suivi auditDTO = restartNormalAudit(auditDTO); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".restartAudit"); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".restartAudit"); } return auditDTO; } /** * Insre un audit de suivi et supprime celui cre normalement * * @param pAudit l'audit de suivi insrer * @return l'audit insr ou null si l'insertion a chou * @throws JrafEnterpriseException si erreur */ private static AuditDTO restartNormalAudit(AuditDTO pAudit) throws JrafEnterpriseException { // Initialisation AuditDTO auditDTO = null; // retour de la facade AuditBO auditBO = null; // objet metier audit a ajouter ApplicationBO applicationBO = null; // projet relatif a l'audit ISession session = null; // session hibernate // identifiant du projet relatif a un audit Long applicationID = new Long(pAudit.getApplicationId()); try { session = PERSISTENTPROVIDER.getSession(); // Initialisation des DAO AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); ApplicationDAOImpl applicationDAO = ApplicationDAOImpl.getInstance(); // Chargement du projet relatif applicationBO = (ApplicationBO) applicationDAO.get(session, applicationID); if (applicationBO != null) { // Rcupration du prochain audit lanc normalement AuditBO nextAudit = auditDAO.getLastAuditByApplication(session, pAudit.getApplicationId(), pAudit.getType(), pAudit.getStatus()); if (null != nextAudit) { // On supprime le prochain audit auditDAO.remove(session, nextAudit); } // On insre le nouveau // transformation de l'audit auditBO = AuditTransform.dto2Bo(pAudit); // Creation de l'audit sans aucune relation auditDAO.create(session, auditBO); // ajout de l'audit et sauvegarde du projet applicationBO.addAudit(auditBO); applicationDAO.save(session, applicationBO); auditDTO = AuditTransform.bo2Dto(auditBO, applicationID.longValue()); } else { LOG.error(FacadeMessages.getString("facade.exception.auditfacade.insertaudit.applicationnull")); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".restartNormalAudit"); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".restartNormalAudit"); } return auditDTO; } /** * Rcupre l'audit de jalon programm pour l'application d'id <code>pApplicationId</code> si il existe * * @param pApplicationId l'id de l'application * @return l'audit trouv ou null sinon * @throws JrafEnterpriseException si erreur */ public static AuditDTO getMilestoneAudit(Long pApplicationId) throws JrafEnterpriseException { AuditDTO auditDTO = null; ISession session = null; // session hibernate try { session = PERSISTENTPROVIDER.getSession(); // Initialisation du DAO AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); AuditBO auditBO = auditDAO.findMilestoneAudit(session, pApplicationId.longValue()); if (null != auditBO) { auditDTO = AuditTransform.bo2Dto(auditBO, pApplicationId.longValue()); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".getMilestoneAudit"); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getMilestoneAudit"); } return auditDTO; } /** * Liste des audits de suivi programm pour une application. * * @param pApplicationId l'id de l'application * @param pAuditDTO l'audit de suivi insrer * @param pSession la session hibernate * @return le DTO de l'audit insr (null en cas d'erreur d'insertion) * @throws JrafEnterpriseException si erreur */ public static AuditDTO modifyNextNormalAudit(long pApplicationId, AuditDTO pAuditDTO, ISession pSession) throws JrafEnterpriseException { AuditDTO lAuditDTO = null; List lList = new ArrayList(); try { AuditDAOImpl lAuditDAO = AuditDAOImpl.getInstance(); // suppression des audits de suivi programms lList = lAuditDAO.findWhereComponent(pSession, pApplicationId, null, null, AuditBO.NORMAL, AuditBO.NOT_ATTEMPTED); Iterator lAuditIt = lList.iterator(); while (lAuditIt.hasNext()) { AuditBO lAuditBO = (AuditBO) lAuditIt.next(); lAuditDAO.removeWhereId(pSession, lAuditBO.getId()); } // ajout de l'audit de suivi lAuditDTO = insertNormalAudit(pAuditDTO, pSession); } catch (Exception e) { } return lAuditDTO; } /** * Supprime l'audit de jalon d'id <code>removeAudit</code> * * @param pAuditId l'id de l'audit * @return Integer : 0 pour la russite de la methode sinon 1 * @throws JrafEnterpriseException si erreur */ public static Integer removeAudit(Long pAuditId) throws JrafEnterpriseException { Integer status = new Integer(0); ISession session = null; // session hibernate try { session = PERSISTENTPROVIDER.getSession(); // Initialisation du DAO AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); auditDAO.removeWhereId(session, pAuditId.longValue()); } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".removeAudit"); status = new Integer(1); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".removeAudit"); } return status; } /** * Modifie l'audit de jalon d'id <code>removeAudit</code> * * @param pAudit l'audit mettre jour * @return l'audit modifi * @throws JrafEnterpriseException si erreur */ public static AuditDTO modifyAudit(AuditDTO pAudit) throws JrafEnterpriseException { AuditDTO auditDTO = null; ISession session = null; // session hibernate try { session = PERSISTENTPROVIDER.getSession(); // Initialisation du DAO AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); AuditBO auditBO = AuditTransform.dto2Bo(pAudit); auditDAO.save(session, auditBO); auditDTO = pAudit; } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".modifyAudit"); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".modifyAudit"); } return auditDTO; } /** * @param pType le type d'audit * @param pStatus le status de l'audit * @return les audits dont le statut est <code>pStatus</code> de type <code>pType</code> * @throws JrafEnterpriseException si erreur */ public static Collection getAudits(String pType, int pStatus) throws JrafEnterpriseException { // Initialisation List auditBOs = null; // retour de la DAO List auditDTOs = new ArrayList(); // retour de la facade ISession session = null; try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // Obtention des audits dans la base auditBOs = auditDAO.findWhereStatusAndType(session, pType, pStatus); // On transforme les audits afin que l'application associe soit aussi renseigne auditDTOs = bo2DtoWithApplication(session, auditBOs); } catch (JrafDaoException e) { auditDTOs = null; LOG.error(AuditFacade.class.getName() + ".getAudits", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getAudits"); } return auditDTOs; } /** * Permet de transformer un ensemble d'audits sous forme BO en DTO en rcuprant au pralable l'application * associe. * * @param pSession la session * @param pAuditBOs les audits sous forme BO * @return les audits sous forme DTO avec l'application rensigne * @throws JrafDaoException si erreur */ private static List bo2DtoWithApplication(ISession pSession, Collection pAuditBOs) throws JrafDaoException { List auditDTOs = new ArrayList(); // retour de la facade // Parcours de chaque audit et transformation de l'audit Iterator iterator = pAuditBOs.iterator(); AuditBO auditBO = null; while (iterator.hasNext()) { auditBO = (AuditBO) iterator.next(); // Recuperation du BO dans la collection + transformation en DTO // On rcupre l'application associe ApplicationBO appliBO = ApplicationDAOImpl.getInstance().loadByAuditId(pSession, new Long(auditBO.getId())); // Code dfensif, ne devrait normalement pas se produire if (appliBO != null) { AuditDTO auditDTO = AuditTransform.bo2Dto(auditBO, appliBO.getId()); auditDTO.setApplicationName(appliBO.getName()); // ajout du AuditDTO a la collection de DTOs auditDTOs.add(auditDTO); } } return auditDTOs; } /** * Met jour la date et/ou le status d'un audit * * @param pAudits les audits dont la date ou le status est mettre jour * @return le nombre d'audits mis jour * @throws JrafEnterpriseException exception Jraf */ public static Integer updateAuditsDateOrStatus(Collection pAudits) throws JrafEnterpriseException { // Initialisation ISession session = null; int nbChanged = 0; try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // Parcours de chaque audit et transformation de l'audit Iterator iterator = pAudits.iterator(); AuditDTO auditDTO = null; while (iterator.hasNext()) { auditDTO = (AuditDTO) iterator.next(); // On rcupre l'audit en base AuditBO auditBO = (AuditBO) auditDAO.load(session, auditDTO.getID()); // update du bo auditBO.setDate(auditDTO.getDate()); auditBO.setStatus(auditDTO.getStatus()); auditDAO.save(session, auditBO); nbChanged++; } } catch (JrafDaoException e) { nbChanged = 0; LOG.error(AuditFacade.class.getName() + ".updateAuditsDateOrStatus", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".updateAuditsDateOrStatus"); } return new Integer(nbChanged); } /** * @param pComponent le composant * @param pNbLignes le nombre de lignes remontes * @param pIndexDepart l'index de dpart * @return les audits partiels * @throws JrafEnterpriseException en cas d'chec */ public static Collection getPartialAudits(ComponentDTO pComponent, Integer pNbLignes, Integer pIndexDepart) throws JrafEnterpriseException { return getAudits(pComponent, pNbLignes, pIndexDepart, null, AuditBO.PARTIAL); } /** * @param pAuditId l'id de l'audit qu'on veut rcuprer * @return l'auditDTO * @throws JrafEnterpriseException en cas d'chec */ public static AuditDTO getById(Long pAuditId) throws JrafEnterpriseException { ISession session = null; AuditDTO auditDTO = null; try { session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // Chargement de l'objet AuditBO + transformation AuditBO auditBO = (AuditBO) auditDAO.load(session, pAuditId); if (auditBO != null) { auditDTO = AuditTransform.bo2Dto(auditBO); } } catch (JrafDaoException e) { FacadeHelper.convertException(e, AuditFacade.class.getName() + ".getById"); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getById"); } return auditDTO; } /** * @return le dernier audit termin de chaque application * @throws JrafEnterpriseException si erreur */ public static Collection getLastTerminatedAudits() throws JrafEnterpriseException { return getLastAudits(ApplicationBO.class, AuditBO.ALL_TYPES, AuditBO.TERMINATED); } /** * @param pComponentType la classe des composants concerns * @param pType le type des audits * @param pStatus le status des audits * @return les derniers audits des composants de type <pComponentType</code> de type <code>pType</code> dont le * status est <code>pStatus</code> * @throws JrafEnterpriseException si erreur */ private static Collection getLastAudits(Class pComponentType, String pType, int pStatus) throws JrafEnterpriseException { // indice du tableau pour le nom du serveur de l'application final int SERVER_NAME_ID = 3; // Initialisation ISession session = null; Collection audits = new ArrayList(); try { // cration d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // On rcupre les derniers audits selon les paramtres de la mthode Collection lastAudits = auditDAO.findAllLastAudits(session, pComponentType, pType, pStatus); // Parcours de chaque audit et transformation de l'audit Iterator iterator = lastAudits.iterator(); Object[] tab; while (iterator.hasNext()) { // On rcupre le tableau trois lment du type {applicationId, applicationName, auditBO} tab = (Object[]) iterator.next(); AuditDTO auditDTO = AuditTransform.bo2Dto((AuditBO) tab[2], ((Long) tab[0]).longValue()); auditDTO.setApplicationName((String) tab[1]); if (tab.length > SERVER_NAME_ID) { auditDTO.setServerName((String) tab[SERVER_NAME_ID]); } audits.add(auditDTO); } } catch (JrafDaoException e) { LOG.error(AuditFacade.class.getName() + ".getLastAudits", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getLastAudits"); } return audits; } /** * This method retrieves all the successful audit for the application given in argument * * @param appId The application id * @return The list of successful audit * @throws JrafEnterpriseException Ecpetion occurs during the retrieve of the audits */ public static List<AuditDTO> getAllSuccessfulAudits(long appId) throws JrafEnterpriseException { ISession session = null; List<AuditDTO> listAuditDTO = new ArrayList<AuditDTO>(); try { session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); List<AuditBO> succesfullAudits = auditDAO.succesfullAudit(session, appId); for (AuditBO auditBO : succesfullAudits) { AuditDTO auditDTO = AuditTransform.bo2Dto(auditBO); listAuditDTO.add(auditDTO); } } catch (JrafDaoException e) { LOG.error(AuditFacade.class.getName() + ".getLastAudits", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getLastAudits"); } return listAuditDTO; } /** * This method retrieves the application linked to the audit given in argument * * @param auditId the current audit * @return the aplication linked to the current audit * @throws JrafEnterpriseException Exception occurs during the retrieve of the audit */ public static ComponentDTO getLinkedApplication(long auditId) throws JrafEnterpriseException { ISession session = null; ComponentDTO compo = null; try { session = PERSISTENTPROVIDER.getSession(); compo = ApplicationFacade.loadByAuditId(auditId, session); } catch (JrafDaoException e) { LOG.error(AuditFacade.class.getName() + ".getLinkedApplication", e); } finally { FacadeHelper.closeSession(session, AuditFacade.class.getName() + ".getLinkedApplication"); } return compo; } }