/**
* 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.HashMap;
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.JspBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.MethodBO;
import org.squale.squalecommon.enterpriselayer.businessobject.result.mccabe.McCabeQAClassMetricsBO;
import org.squale.squalecommon.enterpriselayer.businessobject.result.mccabe.McCabeQAJspMetricsBO;
import org.squale.squalecommon.enterpriselayer.businessobject.result.mccabe.McCabeQAMethodMetricsBO;
import org.squale.squalix.util.parser.J2EEParser;
import org.squale.squalix.util.parser.LanguageParser;
import org.squale.squalix.util.repository.ComponentRepository;
/**
* Est en charge de remplacer tous les noms des m�thodes par les objets correspondant.<br>
* Ceci permet d'utiliser les relations propos�es par la base de donn�es.<br>
*/
public class OOMcCabeAdaptator
{
/**
* HashMap des sommes des iv(g).
*/
private HashMap mSumIvg;
/**
* Parser
*/
private LanguageParser mParser;
/**
* Repository
*/
private ComponentRepository mRepository;
/**
* Logger
*/
private static final Log LOGGER = LogFactory.getLog( OOMcCabeAdaptator.class );
/**
* Constructeur
*
* @param pParser le parser
* @param pRepository le repository
*/
public OOMcCabeAdaptator( LanguageParser pParser, ComponentRepository pRepository )
{
mParser = pParser;
mRepository = pRepository;
mSumIvg = new HashMap();
}
/**
* Adapte le bean des r�sultats des m�thodes et le fait persister.<br>
* En utilisant nom du composant r�cup�r� depuis le rapport McCabe, on cr�e la relation avec le composant ad�quat.
*
* @param pMethodResult Ensemble de r�sultats de la m�thode devant �tre modifi�s et persist�s.
* @throws JrafDaoException si erreur
*/
public void adaptMethodResult( final McCabeQAMethodMetricsBO pMethodResult )
throws JrafDaoException
{
LOGGER.debug( McCabeMessages.getString( "logs.debug.adapt_method" ) + pMethodResult.getComponentName() );
// Recherche de la m�thode associ�e
MethodBO method = mParser.getMethod( pMethodResult.getComponentName(), pMethodResult.getFilename() );
if ( null != method )
{
// On renseigne son num�ro de ligne dans le fichier pour le plugin IDE
try
{
method.setStartLine( Integer.parseInt( pMethodResult.getStartLine() ) );
}
catch ( NumberFormatException nfe )
{
// Par d�faut on met la ligne � 0
method.setStartLine( 0 );
}
MethodBO persistentMethod = (MethodBO) mRepository.persisteComponent( method );
String parentKeyName = mRepository.buildKey( (ClassBO) persistentMethod.getParent() );
Integer sumIvG = (Integer) mSumIvg.get( parentKeyName );
if ( null == sumIvG )
{
sumIvG = new Integer( pMethodResult.getIvg().intValue() );
}
else
{
int value = sumIvG.intValue() + pMethodResult.getIvg().intValue();
sumIvG = new Integer( value );
}
mSumIvg.put( parentKeyName, sumIvG );
pMethodResult.setComponent( persistentMethod );
}
}
/**
* Adapte le bean des r�sultats des classes et le fait persister.
*
* @param pClassResult Ensemble des r�sultats de la classe devant �tre modifi�s et persist�s.
* @throws JrafDaoException si erreur
*/
public void adaptClassResult( final McCabeQAClassMetricsBO pClassResult )
throws JrafDaoException
{
LOGGER.debug( McCabeMessages.getString( "logs.debug.adapt_class" ) + pClassResult.getComponentName() );
ClassBO classBO = mParser.getClass( pClassResult.getComponentName() );
if ( null != classBO )
{
ClassBO persistentClassBO = (ClassBO) mRepository.persisteComponent( classBO );
pClassResult.setComponent( persistentClassBO );
String keyName = mRepository.buildKey( persistentClassBO );
Integer sumIvG = (Integer) mSumIvg.get( keyName );
if ( null == sumIvG )
{
sumIvG = new Integer( 0 );
}
pClassResult.setSumivg( sumIvG );
}
}
/**
* Adapte le bean des r�sultats des m�thodes au composant JSP et le fait persister.<br>
* En utilisant le nom du composant r�cup�r� depuis le rapport McCabe, on cr�e la relation avec le composant
* ad�quat.
*
* @param pJspMethodResult Ensemble de r�sultats de la m�thode de la JSP
* @param pDirectoryName le nom du r�pertoire racine contenant les pages JSP
* @param pId l'index du r�pertoires des JSPs dans les param�tres du projet
* @throws JrafDaoException si erreur
*/
public void adaptJspResult( McCabeQAJspMetricsBO pJspMethodResult, String pDirectoryName, int pId )
throws JrafDaoException
{
LOGGER.debug( McCabeMessages.getString( "logs.debug.adapt_jsp_with_method_result" )
+ pJspMethodResult.getComponentName() );
JspBO jsp =
( (J2EEParser) mParser ).getJsp( pJspMethodResult.getComponentName(), pJspMethodResult.getFileName(),
pDirectoryName, pId );
if ( null != jsp )
{
JspBO persistentJsp = (JspBO) mRepository.persisteComponent( jsp );
pJspMethodResult.setComponent( persistentJsp );
}
}
}