/** * 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.mccabe; import java.util.ArrayList; 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.squalecommon.enterpriselayer.businessobject.component.ClassBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.MethodBO; import org.squale.squalecommon.enterpriselayer.businessobject.component.PackageBO; import org.squale.squalecommon.enterpriselayer.businessobject.result.mccabe.McCabeQAMethodMetricsBO; import org.squale.squalix.util.parser.CobolParser; import org.squale.squalix.util.repository.ComponentRepository; /** * Adaptateur des composants du Cobol. */ public class CobolMcCabeAdaptator { /** * Logger. */ private static final Log LOGGER = LogFactory.getLog( CobolMcCabeAdaptator.class ); /** * Repository des composants du langage. */ private ComponentRepository mRepository; /** * Parser du Cobol. */ private CobolParser mParser; /** * Constructeur. * * @param pComponentRepository le repository des composants du langage * @param pCobolParser le parser du Cobol */ public CobolMcCabeAdaptator( final ComponentRepository pComponentRepository, final CobolParser pCobolParser ) { mRepository = pComponentRepository; mParser = pCobolParser; } /** * Cr�� les composants <code>programme</code> et <code>module</code> correspondant � une ligne du rapport * McCabe, associe les m�triques de cette ligne � ces composants, et r�alise la persistence en base des composants. * * @param pModuleResult ensemble des m�triques du module devant �tre enregistr�s en base * @throws JrafDaoException si exception Jraf */ public String adaptModuleResult( final McCabeQAMethodMetricsBO pModuleResult ) throws JrafDaoException { // analyse des noms de programme et de module String lFullModuleName = pModuleResult.getComponentName(); String lFileName = pModuleResult.getFilename(); List<String> lPrgAndModuleNames = new ArrayList<String>(); mParser.getPrgAndModuleNamesForModule( lFullModuleName, lPrgAndModuleNames ); // enregistrement du programme si non pr�sent en base ClassBO lPrgBO = mParser.getProgram( lPrgAndModuleNames.get( 0 ), lFileName ); // r�cup�ration du parent PackageBO lPkgBO = (PackageBO) lPrgBO.getParent(); // enregistrement en base du package parent si non pr�sent en base PackageBO persistlPkgBO = (PackageBO) mRepository.persisteComponent( lPkgBO ); // Mise en place de la relation lPrgBO.setParent( persistlPkgBO ); // enregistrement en base ClassBO persistlPrgBO = (ClassBO) mRepository.persisteComponent( lPrgBO ); // enregistrement du module si non pr�sent en base MethodBO lModuleBO = mParser.getModule( lPrgAndModuleNames.get( 1 ), lFileName, persistlPrgBO ); lModuleBO.setStartLine( Integer.valueOf( pModuleResult.getStartLine() ).intValue() ); // enregistrement en base MethodBO persistlModuleBO = (MethodBO) mRepository.persisteComponent( lModuleBO ); // association des r�sultats au module avant enregistrement pModuleResult.setComponent( persistlModuleBO ); return lPrgAndModuleNames.get( 0 ); } }