/** * 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 r�sultats associ�s * * @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 � r�cup�rer (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 r�sultats associ�s * * @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 concern�e * @param pAuditType type d'Audit sous forme de cha�nes de caract�res * @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 pr�cedent pour la m�me application * * @param pAudit audit courant * @param pSession session hibernat * @return l'audit pr�cedent 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 { // cr�ation d'une session Hibernate if ( session == null ) { session = PERSISTENTPROVIDER.getSession(); } // On r�cup�re l'audit en base Long auditId = new Long( pAudit.getID() ); AuditBO curAudit = (AuditBO) auditDAO.load( session, auditId ); // et l'application associ�e 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 concern�e * @param pAuditType type d'Audit sous forme de cha�nes de caract�res * @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 { // cr�ation 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 r�cup�rer une liste d'audits en �chec pour une application donn�e * * @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 r�cup�rer une liste d'audits termin�s pour une application donn�e * * @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 r�cup�rer une liste d'audits pour une application donn�e * * @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 { // cr�ation 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 r�cup�rer laudits termin�s pour une application donn�e * * @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 r�cup�ration des audits * @param pWithFailedAudits indique si les audits en �chec doivent �galement �tre collect�s * @return les audits correspondants aux crit�res 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 { // cr�ation 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'ex�cution s'est effectu� apr�s pDate (si ce * param�tre 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 { // cr�ation 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 r�cup�re le dernier audit effectu� auditBOs = auditDAO.findAfterDateWhereComponents( session, appliIds, null, pExcludedStatus, new Integer( 1 ) ); } // On transforme les audits afin que l'application associ�e soit aussi renseign�e 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 donn�e (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 donn�e (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 � ins�rer * @param pSession la session hibernate * @return le DTO de l'audit ins�r� (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 d�j� * programm� est supprim� * * @param pAudit AuditDTO d�finissant 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 { // cr�ation d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // On r�cup�re 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'ex�cution auditDTO.setStatus( AuditBO.NOT_ATTEMPTED ); // On ins�re l'audit avec un traitement diff�rent 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; } /** * Ins�re un audit de suivi et supprime celui cr�e normalement * * @param pAudit l'audit de suivi � ins�rer * @return l'audit ins�r� 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 ) { // R�cup�ration 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 ins�re 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; } /** * R�cup�re 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 � ins�rer * @param pSession la session hibernate * @return le DTO de l'audit ins�r� (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 programm�s 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 r�ussite 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 { // cr�ation 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 associ�e soit aussi renseign�e 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 r�cup�rant au pr�alable l'application * associ�e. * * @param pSession la session * @param pAuditBOs les audits sous forme BO * @return les audits sous forme DTO avec l'application rensign�e * @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 r�cup�re l'application associ�e ApplicationBO appliBO = ApplicationDAOImpl.getInstance().loadByAuditId( pSession, new Long( auditBO.getId() ) ); // Code d�fensif, 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 { // cr�ation 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 r�cup�re 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 remont�es * @param pIndexDepart l'index de d�part * @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 r�cup�rer * @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 concern�s * @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 { // cr�ation d'une session Hibernate session = PERSISTENTPROVIDER.getSession(); AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); // On r�cup�re les derniers audits selon les param�tres de la m�thode 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 r�cup�re le tableau � trois �l�ment 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; } }