/** * 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.tools.umlquality; import java.util.Arrays; import java.util.Collection; import java.util.Vector; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.jraf.commons.exception.JrafDaoException; import org.squale.jraf.spi.persistence.ISession; import org.squale.squalecommon.daolayer.result.MeasureDAOImpl; import org.squale.squalecommon.enterpriselayer.businessobject.component.AuditBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.umlquality.UMLQualityMetricsBO; import org.squale.squalix.util.csv.CSVParser; import org.squale.squalix.util.repository.ComponentRepository; /** * Objet charg� de faire persister les composants identifi�s par UMLQuality (les composants) * * @author sportorico */ public class UMLQualityPersistor { /** * Audit durant lequel l'analyse est effectu�e */ private AuditBO mAudit = null; /** * Session Persistance */ private ISession mSession = null; /** * Chemin du fichier � parser */ private String mReportFileName = null; /** * Adaptateur */ private UMLQualityBeanAdaptator mAdaptator; /** * Logger */ private static final Log LOGGER = LogFactory.getLog( UMLQualityPersistor.class ); /** * Constructeur. * * @param pProject projet. * @param pAudit audit encadrant l'ex�cution. * @param pSession la session de perisistance utilis�e par la t�che. * @throws JrafDaoException si une session de peristance ne peut �tre cr��e. */ public UMLQualityPersistor( final ProjectBO pProject, final AuditBO pAudit, final ISession pSession ) throws JrafDaoException { mSession = pSession; mAudit = pAudit; ComponentRepository repository = new ComponentRepository( pProject, mSession ); mAdaptator = new UMLQualityBeanAdaptator( pProject, repository ); } /** * Parse le rapport des m�triques des diff�rents composant uml et<br> * fait persister les resultats(metrique ou mesures)issus du parsage tout<br> * en �liminant tout ce qui ne sont pas conforme. * * @param pFilename chemin du fichier rapport. * @param pComponentName nom du composant UML(model, class, package, interface) . * @throws Exception si un probl�me de parsing apparait. * @return le nombre de r�sultats de niveau resultats metrique */ public int parseComponentReport( final String pFilename, final String pComponentName ) throws Exception { mReportFileName = pFilename; LOGGER.debug( UMLQualityMessages.getString( "logs.debug.report_parsing_" + pComponentName ) + mReportFileName ); CSVParser csvparser = new CSVParser( UMLQualityMessages.getString( "csv.config.file" ) ); // R�cup�rer les beans issus du nom de rapport mReportFileName Collection classResults = csvparser.parse( UMLQualityMessages.getString( "csv.template." + pComponentName ), mReportFileName ); Object[] tab = classResults.toArray(); Arrays.sort( tab );// trie les beans selon le nom du composant. ceci nous permet de // traiter un composant parent avant ses fils UMLQualityMetricsBO bo = null; // un resultat metrique Collection col = new Vector(); for ( int i = 0; i < tab.length; i++ ) {// parcours de liste des beans(r�sultats m�triques) tri�s bo = (UMLQualityMetricsBO) tab[i]; bo.setAudit( mAudit ); bo.setTaskName( "UMLQualityTask" ); if ( mAdaptator.adaptComponentResult( bo ) ) { col.add( bo ); } } MeasureDAOImpl.getInstance().saveAll( mSession, col );// enregistre les beans dans la session mSession.commitTransactionWithoutClose(); mSession.beginTransaction(); return classResults.size(); } }