/** * 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/>. */ package org.squale.squalix.core; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.bootstrap.initializer.Initializer; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.commons.exception.JrafPersistenceException; import org.squale.jraf.helper.PersistenceHelper; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.daolayer.component.AuditDAOImpl; import org.squale.squalecommon.daolayer.component.AuditDisplayConfDAOImpl; import org.squale.squalecommon.daolayer.component.ProjectDAOImpl; import org.squale.squalecommon.daolayer.config.web.AbstractDisplayConfDAOImpl; import org.squale.squalecommon.daolayer.result.MeasureDAOImpl; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditDisplayConfBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.web.AbstractDisplayConfBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.web.BubbleConfBO; import org.squale.squalecommon.enterpriselayer.businessobject.config.web.DisplayConfConstants; import org.squale.squalecommon.enterpriselayer.businessobject.config.web.VolumetryConfBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.jspvolumetry.JSPVolumetryProjectBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.misc.CommentsBO; /** * Main servant � affecter des configurations d'affichage aux audits ex�cut�s avant la livraison de SQUALE 3.3 Cette * classe pourra �tre supprim�e une fois lanc�e en production lors de la livraison de SQUALE 3.3 */ public class AuditConfMigrationLot3_3 { /** * Logger */ private static Log mLOGGER = null; /* Pour la configuration du bubble */ /** tre pour les abscisses */ private static final String BUBBLE_VG = "mccabe.method.vg"; /** tre pour les ordonn�es */ private static final String BUBBLE_EVG = "mccabe.method.evg"; /** poistion de l'axe des abscisses */ private static final int BUBBLE_HORIZONTAL_POS = 10; /** position de l'axe des ordonn�es */ private static final int BUBBLE_VERTICAL_POS = 7; /* Pour la configuration de la volum�trie */ /** tre pour le nombre de ligne java et cpp avec RSM (� partir de la 3.0) */ private static final String VOL_RSM_SLOC = "rsm.project.sloc"; /** tre pour le nombre de ligne java et cpp avec Pure comments (avant la 3.0) */ private static final String VOL_PURECOMMENTS_SLOC = "purecomments.project.sloc"; /** tre pour le nombre de ligne jsp avec jspvolumetry */ private static final String VOL_JSPVOL_LINES = "jspvolumetry.project.numberOfJSPCodeLines"; /** tre pour le nombre de commentaires avec RSM */ private static final String VOL_RSM_COMMENTS = "rsm.project.comments"; /** tre pour le nombre de commentaires avec Pure comments (avant la 3.0) */ private static final String VOL_PURECOMMENTS_COMMENTS = "purecomments.project.cloc"; /** tre pour le nombre de lignes de code avec RSM */ private static final String VOL_RSM_CODE_LINES = "rsm.project.numberofcodelines"; /** tre pour le nombre de classes */ private static final String VOL_NB_CLASSES = "mccabe.project.numberOfClasses"; /** tre pour le nombre de m�thodes */ private static final String VOL_NB_METHODS = "mccabe.project.numberOfMethods"; /** tre pour le nombre de JSPs avec jspvolumetry */ private static final String VOL_JSPVOL_NB_JSPS = "jspvolumetry.project.numberOfJSP"; /** la configuration du bubble */ private static BubbleConfBO oldBubbleConf; /** La volum�trie pour les applications avant RSM */ private static VolumetryConfBO oldVolConf; /** La volum�trie niveau pour application avec RSM */ private static VolumetryConfBO oldRsmVolConf; /** La volum�trie niveau application avec RSM dont un projet est J2EE */ private static VolumetryConfBO oldJ2eeRsmVolConf; /** La volum�trie niveau projet sans RSM (avant il n'y avait pas la volum�trie sur les JSPs */ private static VolumetryConfBO oldProjectVolConf; /** La volum�trie pour les projets avec RSM hors profils J2ee */ private static VolumetryConfBO oldProjectRsmVolConf; /** La volum�trie pour les projets J2ee avec RSM */ private static VolumetryConfBO oldProjectJ2eeRsmVolConf; /** * M�thode main * * @param args les arguments * @throws JrafPersistenceException si erreur */ public static void main( String[] args ) throws JrafPersistenceException { // lancement de l�initialisation JRAF String rootPath = args[0]; String configFile = "/config/providers-config.xml"; Initializer init = new Initializer( rootPath, configFile ); init.initialize(); // Maintenant que le socle JRAF est initialis�, on peut cr�er un logger mLOGGER = LogFactory.getLog( AuditConfMigrationLot3_3.class ); ISession session = null; try { session = PersistenceHelper.getPersistenceProvider().getSession(); mLOGGER.info( "Cr�ation des anciennes configurations :" ); /* On cr�e les configurations � utiliser pour les audits d'avant la livraison 3.3 */ createoldConfigurations( session ); /* * On r�cup�re tous les audits termin�s, partiels ou en �chec (supprim� et en cours n'ont pas besoin de * configuration) de chaque projet non supprim� Et pour chacun, on lui affecte la bonne configuration : * configuration du bubble + configurations de la volum�trie d�pendant des r�sultats (si r�sultats RSM alors * conf RSM sinon l'autre) en regardant aussi si il y a des r�sultats pour les JSPs (dans ce cas conf J2ee) */ mLOGGER.info( "Cr�ation des liens audits-configurations" ); createAuditDisplayConfs( session ); mLOGGER.info( "MIGRATION TERMINEE!" ); } catch ( Exception e ) { e.printStackTrace(); } finally { if ( null != session ) { session.closeSession(); } } } /** * Cr�er les configurations � affecter aux audits d'avant la livraison 3.3 * * @param session la session hibernate * @throws JrafDaoException si erreur */ public static void createoldConfigurations( ISession session ) throws JrafDaoException { AbstractDisplayConfDAOImpl confDAO = AbstractDisplayConfDAOImpl.getInstance(); // Le bubble mLOGGER.info( "Bubble :" ); oldBubbleConf = new BubbleConfBO( BUBBLE_VG, BUBBLE_EVG, BUBBLE_HORIZONTAL_POS, BUBBLE_VERTICAL_POS ); confDAO.create( session, oldBubbleConf ); // La volum�trie pour les applications avant RSM mLOGGER.info( "Volum�trie niveau application avant SQUALE 3.0 :" ); oldVolConf = new VolumetryConfBO(); oldVolConf.setComponentType( DisplayConfConstants.VOLUMETRY_APPLICATION_TYPE ); oldVolConf.addTre( VOL_PURECOMMENTS_SLOC ); confDAO.create( session, oldVolConf ); // La volum�trie niveau pour application avec RSM mLOGGER.info( "Volum�trie niveau application apr�s SQUALE 3.0" ); oldRsmVolConf = new VolumetryConfBO(); oldRsmVolConf.setComponentType( DisplayConfConstants.VOLUMETRY_APPLICATION_TYPE ); oldRsmVolConf.addTre( VOL_RSM_SLOC ); confDAO.create( session, oldRsmVolConf ); // La volum�trie niveau application avec RSM dont un projet est J2EE mLOGGER.info( "Volum�trie niveau application apr�s SQUALE 3.0 pour un profil J2EE" ); oldJ2eeRsmVolConf = new VolumetryConfBO(); oldJ2eeRsmVolConf.setComponentType( DisplayConfConstants.VOLUMETRY_APPLICATION_TYPE ); oldJ2eeRsmVolConf.addTre( VOL_RSM_SLOC ); oldJ2eeRsmVolConf.addTre( VOL_JSPVOL_LINES ); confDAO.create( session, oldJ2eeRsmVolConf ); // La volum�trie niveau projet sans RSM (avant il n'y avait pas la volum�trie sur les JSPs mLOGGER.info( "Volum�trie niveau projet avant SQUALE 3.0" ); oldProjectVolConf = new VolumetryConfBO(); oldProjectVolConf.setComponentType( DisplayConfConstants.VOLUMETRY_PROJECT_TYPE ); oldProjectVolConf.addTre( VOL_NB_CLASSES ); oldProjectVolConf.addTre( VOL_NB_METHODS ); oldProjectVolConf.addTre( VOL_PURECOMMENTS_COMMENTS ); oldProjectVolConf.addTre( VOL_PURECOMMENTS_SLOC ); confDAO.create( session, oldProjectVolConf ); // La volum�trie pour les projets avec RSM hors profils J2ee mLOGGER.info( "Volum�trie niveau projet apr�s SQUALE 3.0" ); oldProjectRsmVolConf = new VolumetryConfBO(); oldProjectRsmVolConf.setComponentType( DisplayConfConstants.VOLUMETRY_PROJECT_TYPE ); oldProjectRsmVolConf.addTre( VOL_NB_CLASSES ); oldProjectRsmVolConf.addTre( VOL_NB_METHODS ); oldProjectRsmVolConf.addTre( VOL_RSM_COMMENTS ); oldProjectRsmVolConf.addTre( VOL_RSM_SLOC ); oldProjectRsmVolConf.addTre( VOL_RSM_CODE_LINES ); confDAO.create( session, oldProjectRsmVolConf ); // La volum�trie pour les projets J2ee avec RSM mLOGGER.info( "Volum�trie niveau projet apr�s SQUALE 3.0 pour des profils J2EE" ); oldProjectJ2eeRsmVolConf = new VolumetryConfBO(); oldProjectJ2eeRsmVolConf.setComponentType( DisplayConfConstants.VOLUMETRY_PROJECT_TYPE ); oldProjectJ2eeRsmVolConf.addTre( VOL_NB_CLASSES ); oldProjectJ2eeRsmVolConf.addTre( VOL_NB_METHODS ); oldProjectJ2eeRsmVolConf.addTre( VOL_RSM_COMMENTS ); oldProjectJ2eeRsmVolConf.addTre( VOL_RSM_SLOC ); oldProjectJ2eeRsmVolConf.addTre( VOL_RSM_CODE_LINES ); // Plus la volum�trie sur les JSPs oldProjectJ2eeRsmVolConf.addTre( VOL_JSPVOL_LINES ); oldProjectJ2eeRsmVolConf.addTre( VOL_JSPVOL_NB_JSPS ); confDAO.create( session, oldProjectJ2eeRsmVolConf ); } /** * Cr�ee les liens audits-configurations * * @param session la session hibernate * @throws JrafDaoException si erreur */ public static void createAuditDisplayConfs( ISession session ) throws JrafDaoException { // Initialisation AuditDAOImpl auditDAO = AuditDAOImpl.getInstance(); ProjectDAOImpl projectDAO = ProjectDAOImpl.getInstance(); Collection projects = projectDAO.findAll( session ); MeasureDAOImpl measureDAO = MeasureDAOImpl.getInstance(); ProjectBO curProject; AuditBO curAudit; ArrayList audits = new ArrayList(); Long projectId; Long auditId; // It�ration sur les projets for ( Iterator it = projects.iterator(); it.hasNext(); ) { curProject = (ProjectBO) it.next(); projectId = new Long( curProject.getId() ); // On r�cup�re ses audits audits.clear(); if ( ProjectBO.DELETED != curProject.getStatus() ) { // Inutile pour les projets supprim�s audits.addAll( auditDAO.findWhereComponent( session, curProject.getId(), null, null, null, AuditBO.TERMINATED ) ); audits.addAll( auditDAO.findWhereComponent( session, curProject.getId(), null, null, null, AuditBO.PARTIAL ) ); audits.addAll( auditDAO.findWhereComponent( session, curProject.getId(), null, null, null, AuditBO.FAILED ) ); } // Pour tous les audits, on ajoute la conf du bubble et les configurations pour la volum�trie // selon les r�sultats de l'audit for ( int i = 0; i < audits.size(); i++ ) { curAudit = (AuditBO) audits.get( i ); auditId = new Long( curAudit.getId() ); addAuditDisplayConfFor( session, curAudit, oldBubbleConf, curProject ); // Pour la volum�trie, cela d�pend des r�sultats de l'audit pour ce projet // Si il a des purecomments, on ajoute les configurations d'avant la 3.0 (sans RSM) if ( null != measureDAO.load( session, projectId, auditId, CommentsBO.class ) ) { addAuditDisplayConfFor( session, curAudit, oldVolConf, curProject ); addAuditDisplayConfFor( session, curAudit, oldProjectVolConf, curProject ); } else if ( null != measureDAO.load( session, projectId, auditId, JSPVolumetryProjectBO.class ) ) { // On ajoute la conf RSM pour J2ee addAuditDisplayConfFor( session, curAudit, oldJ2eeRsmVolConf, curProject ); addAuditDisplayConfFor( session, curAudit, oldProjectJ2eeRsmVolConf, curProject ); } else { // On ajoute la conf RSM addAuditDisplayConfFor( session, curAudit, oldRsmVolConf, curProject ); addAuditDisplayConfFor( session, curAudit, oldProjectRsmVolConf, curProject ); } } } } /** * Ajoute un lien entre l'audit et la configuration d'affichage * * @param pSession la session hibernate * @param pAudit l'audit * @param pConf la configuration * @param pProject le projet * @throws JrafDaoException si erreur */ public static void addAuditDisplayConfFor( ISession pSession, AuditBO pAudit, AbstractDisplayConfBO pConf, ProjectBO pProject ) throws JrafDaoException { AuditDisplayConfBO auditConf = new AuditDisplayConfBO(); auditConf.setDisplayConf( pConf ); auditConf.setProject( pProject ); auditConf.setAudit( pAudit ); AuditDisplayConfDAOImpl.getInstance().create( pSession, auditConf ); // Ajout � l'audit pAudit.addAuditDisplayConf( auditConf ); } }