/**
* 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\\squalix\\src\\org\\squale\\squalix\\tools\\mccabe\\McCabeConfiguration.java
package org.squale.squalix.tools.mccabe;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.crimson.tree.AttributeNode;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.squale.squalecommon.enterpriselayer.businessobject.component.ProjectBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.ListParameterBO;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.ParametersConstants;
import org.squale.squalecommon.enterpriselayer.businessobject.component.parameters.StringParameterBO;
import org.squale.squalix.configurationmanager.ConfigUtility;
import org.squale.squalix.core.TaskData;
import org.squale.squalix.core.exception.ConfigurationException;
import org.squale.squalix.util.file.FileUtility;
/**
* Configuration de l'API McCabe.
*
* @author m400842
* @version 1.0
*/
public class McCabeConfiguration
{
/**
* Valeur limite du random de g�n�ration du dossier d'analyse du projet
*/
private static final int RANDOM_RANGE = 1000;
/**
* Le nombre max de fichier pcf � conserver
*/
public static final int MAX_PCF_SAVED = 10;
/**
* D�finit la commande pour parser les fichiers (cli ne doit pas �tre sp�cifi� dans ici)
*/
private String mParserCommand[] = null;
/**
* D�finit la commande pour g�n�rer les rapports (cli ne doit pas �tre sp�cifi� dans ici)
*/
private String mMetricsCommand[] = null;
/**
* Espace de travail autoris� (voire r�serv�) � McCabe : il permet d'accueillir tous les fichiers g�n�r�s par McCabe
*/
private File mWorkspace = null;
/**
* Repository commun de McCabe : il permet de sp�cifier des m�triques sp�cifiques (added for COBOL)
*/
private File mReposDir = null;
/**
* Le fichier permettant de logger les traces de McCabe
*/
private File mLogger = null;
/**
* Le fichier permettant de logger les erreurs de McCabe
*/
private File mErrorLogger = null;
/**
* Dossier contenant les fichiers rapports ainsi que le filedb.pc les sp�cifiant.<br>
* Les fichiers pr�-cit�s seront copi�s dans le workspace McCabe afin d'�tre utilis�s.
*/
private File mReportsPath = null;
/**
* Liste des rapports � g�n�rer.
*/
private List mReports = null;
/**
* Liste des parseurs utilis�s pour chaque extension. L'extension est utilis�e comme cl�.
*/
private String mParser = null;
/**
* Emplacement utilis� pour l'analyse courante
*/
private File mSubWorkspace = null;
/**
* Extensions des fichiers � analyser
*/
private String mExtensions[] = null;
/**
* Niveau de m�trique pour l'analyse
*/
private String mMetricsLevel = null;
/**
* Extensions des ent�tes � include dans le filtre 'myheader.dat' (C++ uniquement)
*/
private String mEntetes[] = null;
/**
* Projet � analyser
*/
private ProjectBO mProject = null;
/**
* Param�tres d'analyse des fichiers
*/
private String mParseParameters[] = null;
/**
* Commande utilis�e pour lancer une action en ligne de commande.<br>
* Par ex : <code>cli</code>
*/
private String mCliCommand = null;
/** Les expressions r�guli�res des messages renvoy�s par McCabe en erreur qu'il faut mettre en warning */
private List mErrorToWarningMsgs = new ArrayList( 0 );
/** Les expressions r�guli�res des messages renvoy�s par McCabe qu'il faut ignorer */
private List mIgnoringMsgs = new ArrayList( 0 );
/** Les expressions r�guli�res des messages auquel il faut ajouter le nom du fichier */
private List mAddFileNameMsgs = new ArrayList( 0 );
/** Liste des messages � remplacer */
private Map mReplacingMsgs = new HashMap( 0 );
/**
* Logger
*/
private static final Log LOGGER = LogFactory.getLog( McCabeConfiguration.class );
/**
* Parse le fichier de configuration afin d'en extraire la configuration au format objet.
*
* @param pProject projet � analyser.
* @param pFile nom du fichier de configuration.
* @param pDatas la liste des param�tres temporaires du projet
* @return la configuration demand�e
* @throws Exception si un probl�me de parsing apparait.
* @roseuid 42B97169031D
*/
public static McCabeConfiguration build( final ProjectBO pProject, final String pFile, TaskData pDatas )
throws Exception
{
McCabeConfiguration config = new McCabeConfiguration();
config.mProject = pProject;
// Recuperation de la configuration
Node root = ConfigUtility.getRootNode( pFile, McCabeMessages.getString( "configuration.root" ) );
if ( null != root )
{
// R�cup�ration du noeud contenant la configuration g�n�rale
Node generalNode =
ConfigUtility.getNodeByTagName( root, McCabeMessages.getString( "configuration.general" ) );
setGeneral( generalNode, config );
// R�cup�ration du noeud contenant la configuration des profils
Node profilesNode =
ConfigUtility.getNodeByTagName( root, McCabeMessages.getString( "configuration.profiles" ) );
Node profileNode = profilesNode.getFirstChild();
boolean found = false;
// Recherche du profil associ� au projet
String valueProject = pProject.getProfile().getName();
// R�cup�ration du dialecte associ� au langage
StringParameterBO dialect =
(StringParameterBO) pProject.getParameters().getParameters().get( ParametersConstants.DIALECT );
if ( null != dialect )
{
valueProject += dialect.getValue();
}
while ( null != profileNode && !found )
{
String valueConfig =
ConfigUtility.getAttributeValueByName( profileNode,
McCabeMessages.getString( "configuration.profile.name" ) );
if ( profileNode.getNodeType() == Node.ELEMENT_NODE && valueConfig.equals( valueProject ) )
{
found = true;
// On parse la configuration associ�e au profil
setProfile( profileNode, config );
}
else
{
profileNode = profileNode.getNextSibling();
}
}
if ( !found )
{
throw new McCabeException( McCabeMessages.getString( "exception.no_profile" ) + valueProject );
}
}
// On met en place les valeurs des param�tres du projet
setParameters( config, pDatas );
// Et enfin on cr�e un espace propre au projet, totalement al�atoire,
// avec une composante d�pendant du temps, pour s'assurer que deux audits ne seront
// pas g�n�r�s dans le m�me dossier.
config.mSubWorkspace =
new File( config.mWorkspace.getAbsolutePath() + File.separator + System.currentTimeMillis()
+ (int) Math.random() * RANDOM_RANGE );
// On cr�e le dossier destin� � accueillir les fichiers McCabe
if ( !config.mSubWorkspace.mkdirs() )
{
throw new McCabeException( McCabeMessages.getString( "exception.no_subworkspace" )
+ config.mSubWorkspace.getAbsolutePath() );
}
LOGGER.debug( McCabeMessages.getString( "logs.debug.subworkspace_created" )
+ config.mSubWorkspace.getAbsolutePath() );
return config;
}
/**
* Access method for the mParserCommand property.
*
* @return the current value of the mParserCommand property
* @roseuid 42D3A4EB030F
*/
public String[] getParserCommand()
{
return mParserCommand;
}
/**
* Access method for the mMetricsCommand property.
*
* @return the current value of the mMetricsCommand property
* @roseuid 42D3A4EB031F
*/
public String[] getMetricsCommand()
{
return mMetricsCommand;
}
/**
* Access method for the mWorkspace property.
*
* @return the current value of the mWorkspace property
* @roseuid 42D3A4EB033E
*/
public File getWorkspace()
{
return mWorkspace;
}
/**
* Access method for the mReposdir property.
*
* @return the current value of the mReposdir property
*
*/
public File getReposDir()
{
return mReposDir;
}
/**
* Access method for the mReportsPath property.
*
* @return the current value of the mReportsPath property
* @roseuid 42D3A4EB034E
*/
public File getReportsPath()
{
return mReportsPath;
}
/**
* Access method for the mReports property.
*
* @return the current value of the mReports property
* @roseuid 42D3A4EB036D
*/
public List getReports()
{
return mReports;
}
/**
* Access method for the mParsers property.
*
* @return the current value of the mParsers property
* @roseuid 42D3A4EB037D
*/
public String getParser()
{
return mParser;
}
/**
* Access method for the msubWorkspace property.
*
* @return the current value of the msubWorkspace property
* @roseuid 42D3C20A0247
*/
public File getSubWorkspace()
{
return mSubWorkspace;
}
/**
* Retourne la liste des extensions des fichiers � traiter
*
* @return la liste des extensions
* @roseuid 42D3C7AE0178
*/
public String[] getExtensions()
{
return mExtensions;
}
/**
* Retourne la valeur du niveau de m�trique pour l'analyse
*
* @return la valeur sous forme de String
*/
public String getMetrics_level()
{
return mMetricsLevel;
}
/**
* Retourne la liste des extensions des ent�tes � inclure dans le filtre.
*
* @return la liste des extensions des ent�tes.
*/
public String[] getEntetes()
{
return mEntetes;
}
/**
* Retourne les param�tres d'analyse des fichiers.
*
* @return une chaine contenant tous les param�tres d'audit.
* @roseuid 42D3E686021F
*/
public String[] getParseParameters()
{
return mParseParameters;
}
/**
* Retourne la commande � utiliser pour lancer une op�ration en ligne de commande.
*
* @return la commande � ex�cuter.
* @roseuid 42D4C865009A
*/
public String getCliCommand()
{
return mCliCommand;
}
/**
* Met la configuration g�n�rale en place.
*
* @param pNode le noeud XML � parser
* @param pConfiguration l'instance de configuration � mettre en place.
* @throws Exception si la configuration g�n�rale n'est pas correcte.
* @roseuid 42D520A303C2
*/
private static void setGeneral( final Node pNode, final McCabeConfiguration pConfiguration )
throws Exception
{
// le fichier de log
pConfiguration.mLogger =
FileUtility.getLogFile( ConfigUtility.filterStringWithSystemProps( ConfigUtility.getNodeByTagName(
pNode,
McCabeMessages.getString( "configuration.general.logger" ) ).getFirstChild().getNodeValue().trim() ) );
// le fichier de log des erreurs
String errorLogName = McCabeMessages.getString( "configuration.general.error.logger" );
pConfiguration.mErrorLogger =
FileUtility.getLogFile( ConfigUtility.filterStringWithSystemProps( ConfigUtility.getNodeByTagName( pNode,
errorLogName ).getFirstChild().getNodeValue().trim() ) );
// Workspace
pConfiguration.mWorkspace =
new File(
ConfigUtility.filterStringWithSystemProps( ConfigUtility.getNodeByTagName(
pNode,
McCabeMessages.getString( "configuration.general.workspace" ) ).getFirstChild().getNodeValue().trim() ) );
// On effectue le nettoyage dans le cas o� la t�che s'est arr�t�e brusquement:
deleteOldSubWorkspace( pConfiguration.mWorkspace );
// Repository McCabe pour les metrics customs (added for COBOL)
pConfiguration.mReposDir =
new File(
ConfigUtility.filterStringWithSystemProps( ConfigUtility.getNodeByTagName(
pNode,
McCabeMessages.getString( "configuration.general.reposdir" ) ).getFirstChild().getNodeValue().trim() ) );
// Chemin du fichier contenant les rapports
pConfiguration.mReportsPath =
new File(
ConfigUtility.filterStringWithSystemProps( ConfigUtility.getNodeByTagName(
pNode,
McCabeMessages.getString( "configuration.general.reportspath" ) ).getFirstChild().getNodeValue().trim() ) );
// Commandes
Node commandsNode =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.general.commands" ) );
// Commande cli
pConfiguration.mCliCommand =
ConfigUtility.filterStringWithSystemProps( ConfigUtility.getNodeByTagName(
commandsNode,
McCabeMessages.getString( "configuration.general.commands.clicommand" ) ).getFirstChild().getNodeValue().trim() );
// Commandes parser
StringTokenizer token =
new StringTokenizer(
ConfigUtility.getNodeByTagName(
commandsNode,
McCabeMessages.getString( "configuration.general.commands.parsercommand" ) ).getFirstChild().getNodeValue().trim(),
" " );
String params[] = new String[token.countTokens()];
for ( int i = 0; i < params.length; i++ )
{
params[i] = token.nextToken();
}
pConfiguration.mParserCommand = params;
// Commandes metrics
token =
new StringTokenizer(
ConfigUtility.getNodeByTagName(
commandsNode,
McCabeMessages.getString( "configuration.general.commands.metricscommand" ) ).getFirstChild().getNodeValue().trim(),
" " );
params = new String[token.countTokens()];
for ( int i = 0; i < params.length; i++ )
{
params[i] = token.nextToken();
}
pConfiguration.mMetricsCommand = params;
/* Les filtre */
Node filterNode =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.general.filter" ) );
// Liste des messages d'erreur � changer en warning
pConfiguration.mErrorToWarningMsgs =
getStrListFromNode( filterNode, "configuration.general.filter.errorToWarningMsgs" );
// Liste des messages � ignorer
pConfiguration.mIgnoringMsgs = getStrListFromNode( filterNode, "configuration.general.filter.ignoringMsgs" );
// Liste des messages auxquels il faut ajouter le nom du fichier
pConfiguration.mAddFileNameMsgs =
getStrListFromNode( filterNode, "configuration.general.filter.addFleNameMsgs" );
// Liste des messages � remplacer
Node replacingMsgsNode =
ConfigUtility.getNodeByTagName( filterNode,
McCabeMessages.getString( "configuration.general.filter.replacingMsgs" ) );
Iterator it = ConfigUtility.filterList( replacingMsgsNode.getChildNodes(), Node.ELEMENT_NODE ).iterator();
NamedNodeMap replacingMsgNodeMap = null;
String keyMsg = McCabeMessages.getString( "configuration.general.filter.replacingMsg.ketAttr" );
String ValueMsg = McCabeMessages.getString( "configuration.general.filter.replacingMsg.ValueAttr" );
while ( it.hasNext() )
{
replacingMsgNodeMap = ( (Node) it.next() ).getAttributes();
pConfiguration.mReplacingMsgs.put(
( (AttributeNode) replacingMsgNodeMap.getNamedItem( keyMsg ) ).getValue(),
( (AttributeNode) replacingMsgNodeMap.getNamedItem( ValueMsg ) ).getValue() );
}
}
/**
* Supprime l'ancien subWorkspace dans le cas o� la t�che s'est arr�t�e brusquement et que la suppression du
* r�pertoire n'a pas pu se faire.
*
* @param pWorkspace le workspace mccabe
*/
private static void deleteOldSubWorkspace( File pWorkspace )
{
// On supprime l'ancien subWorkspace identifi� par un nom de r�pertoire
// constitu� que de chiffres
if ( !pWorkspace.exists() )
{
pWorkspace.mkdirs();
}
File[] files = pWorkspace.listFiles();
boolean found = false;
for ( int i = 0; i < files.length && !found; i++ )
{
if ( files[i].isDirectory() && files[i].getName().matches( "[0-9]+" ) )
{
found = true;
FileUtility.deleteRecursively( files[i] );
}
}
}
/**
* Retourne une liste de cha�nes de caract�res repr�senant les noeuds contenus dans le noeud de cl�
* <code>pChildKey</code>
*
* @param pParentNode le neoud parent
* @param pChildKey la cl� du fichier de properties du noeud enfant
* @return la liste des noeuds contenus dans le noeud de cl� pChildKey
*/
private static List getStrListFromNode( Node pParentNode, String pChildKey )
{
Node rootNode = ConfigUtility.getNodeByTagName( pParentNode, McCabeMessages.getString( pChildKey ) );
Iterator it = ConfigUtility.filterList( rootNode.getChildNodes(), Node.ELEMENT_NODE ).iterator();
ArrayList results = new ArrayList();
String name = null;
while ( it.hasNext() )
{
name = ( (Node) it.next() ).getFirstChild().getNodeValue().trim();
results.add( name );
}
return results;
}
/**
* Met la configuration du profil en place.
*
* @param pNode le noeud XML � parser.
* @param pConfiguration l'instance de configuration � mettre en place.
* @roseuid 42D520A303D2
*/
private static void setProfile( final Node pNode, final McCabeConfiguration pConfiguration )
{
// Nom du parser
pConfiguration.mParser =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.profile.parser" ) ).getFirstChild().getNodeValue().trim();
// Liste des extensions
Node extensionsNode =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.profile.extensions" ) );
// Les extensions sont s�par�es par des ","
StringTokenizer token = new StringTokenizer( extensionsNode.getFirstChild().getNodeValue().trim(), "," );
ArrayList extensions = new ArrayList();
// On ajoute les extensions � la liste
while ( token.hasMoreTokens() )
{
extensions.add( token.nextToken().trim() );
}
String[] type = new String[0];
// On convertit la liste des extensions en tableau de String
pConfiguration.mExtensions = (String[]) extensions.toArray( type );
// R�cup�ration du niveau de m�trique
Node metricslevelNode =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.profile.metrics_level" ) );
if (metricslevelNode != null)
{
pConfiguration.mMetricsLevel = (String) metricslevelNode.getFirstChild().getNodeValue().trim();
}
// Liste des extensions des ent�tes
Node entetesNode =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.profile.entetes" ) );
if ( entetesNode != null )
{
// Les en-t�tes sont s�par�s par des ","
token = new StringTokenizer( entetesNode.getFirstChild().getNodeValue().trim(), "," );
ArrayList entetes = new ArrayList();
while ( token.hasMoreTokens() )
{
entetes.add( token.nextToken().trim() );
}
type = new String[0];
// Conversion de la liste cr�er en tableau de String
pConfiguration.mEntetes = (String[]) entetes.toArray( type );
}
// Liste des param�tres de parsing
Node parametersNode =
ConfigUtility.getNodeByTagName( pNode, McCabeMessages.getString( "configuration.profile.parameters" ) );
ArrayList parameters = new ArrayList();
// Un tag par param�tre
Node parameterNode = parametersNode.getFirstChild();
// On ajoute tous les param�tres
while ( null != parameterNode )
{
if ( parameterNode.getNodeType() == Node.ELEMENT_NODE )
{
parameters.add( ConfigUtility.filterStringWithSystemProps( parameterNode.getFirstChild().getNodeValue() ) );
}
parameterNode = parameterNode.getNextSibling();
}
// Conversion en tableau de String
pConfiguration.mParseParameters = (String[]) parameters.toArray( type );
// Liste des rapports
pConfiguration.mReports = getStrListFromNode( pNode, "configuration.profiles.reports" );
}
/**
* Met en place le dossier contenant les fichiers g�n�r�s par McCabe pour le projet.
*
* @param pFile le dossier
* @roseuid 42DD182603A4
*/
public void setSubWorkspace( File pFile )
{
mSubWorkspace = pFile;
}
/**
* Rectourne le projet associ� � la configuration.
*
* @return le projet.
* @roseuid 42DE0375023D
*/
public ProjectBO getProject()
{
return mProject;
}
/**
* Remplit la configuration avec les param�tres li�s au projet.
*
* @param pConfig configuration � remplir.
* @param pDatas la liste des param�tres du projet.
* @throws ConfigurationException
*/
private static void setParameters( final McCabeConfiguration pConfig, final TaskData pDatas ) throws ConfigurationException
{
// On modifie le classpath
// Lorsqu'on r�cup�re les param�tres, si mClasspath n'est pas null
// on remplace la valeur key.substition.classpath par mClasspath
String classpath = "\"\"";
if ( null != pDatas.getData( TaskData.CLASSPATH ) )
{
classpath = (String) pDatas.getData( TaskData.CLASSPATH );
// On cr�e un classpath destin� � Unix, en s'assurant que chaque entr�e sp�cifi�e
// existe, sinon elle est supprim�e de la liste
StringBuffer sb = new StringBuffer();
StringTokenizer tok = new StringTokenizer( classpath, ";" );
File f = null;
while ( tok.hasMoreTokens() )
{
f = new File( tok.nextToken() );
if ( f.exists() )
{
sb.append( f.getAbsolutePath() );
// Les entr�es du Classpath doivent �tre s�par�s par des ":" pour Unix
sb.append( File.pathSeparator );
}
}
if ( sb.length() > 0 )
{
// S'il y a des valeurs dans le classpath, on sait
// qu'un : a �t� ajout� en trop
sb.deleteCharAt( sb.length() - 1 );
}
// On s'assure que la valeur du classpath est consid�r�e comme un seul param�tre
classpath = "\"" + sb.toString() + "\"";
}
//
String classPathPattern = McCabeMessages.getString( "key.substition.classpath" );
// On remplace le sourcepath par le premi�re rep�rtoire source
ListParameterBO sources =
(ListParameterBO) pConfig.getProject().getParameters().getParameters().get( ParametersConstants.SOURCES );
String firstProjectSourcePath = "." + File.separator;
if ( (null != sources) && (null != sources.getParameters()) && (!sources.getParameters().isEmpty()) )
{
firstProjectSourcePath = ((StringParameterBO) sources.getParameters().get(0)).getValue();
}
StringBuffer absProjectSourcePath = new StringBuffer();
absProjectSourcePath.append(pDatas.getData( TaskData.VIEW_PATH ));
if (pDatas.getData( TaskData.SUP_PATH ) != null)
{
String supPath = (String) pDatas.getData( TaskData.SUP_PATH );
absProjectSourcePath.append( File.separator ).append(supPath);
firstProjectSourcePath = firstProjectSourcePath.replaceFirst(supPath, "");
}
absProjectSourcePath.append( File.separator ).append(firstProjectSourcePath);
String replaceSourcePath = (String) pDatas.getData( TaskData.VIEW_PATH );
File f2 = new File( absProjectSourcePath.toString() );
if ( f2.exists() ) {
replaceSourcePath = f2.getAbsolutePath();
}
String sourceRootDirPattern = McCabeMessages.getString( "key.substition.sourcerootdir" );
for ( int i = 0; i < pConfig.mParseParameters.length; i++ )
{
if ( pConfig.mParseParameters[i].equals( classPathPattern ) )
{
pConfig.mParseParameters[i] = classpath;
}
else if( pConfig.mParseParameters[i].contains( sourceRootDirPattern ) )
{
pConfig.mParseParameters[i] = pConfig.mParseParameters[i].replaceAll(sourceRootDirPattern, replaceSourcePath);
}
}
}
/**
* Met en place l'instance du projet.
*
* @param pProject le projet analys�.
* @roseuid 42E5F0CF00D2
*/
public void setProject( final ProjectBO pProject )
{
mProject = pProject;
}
/**
* @return le fichier de log
*/
public File getLogger()
{
return mLogger;
}
/**
* @param pFile le fichier de log
*/
public void setLogger( File pFile )
{
mLogger = pFile;
}
/**
* @return le fichier de log des erreurs
*/
public File getErrorLogger()
{
return mErrorLogger;
}
/**
* @param pFile le fichier de log des erreurs
*/
public void setErrorLogger( File pFile )
{
mErrorLogger = pFile;
}
/**
* Indique si le message d'erreur doit �tre pass� en warning
*
* @param errorMsg le message d'erreur � v�rifier
* @return true si le message d'erreur est consid�r� comme un warning
*/
public boolean changeErrorMsgToWarning( String errorMsg )
{
return matchesRegexInTab( errorMsg, mErrorToWarningMsgs );
}
/**
* Ajoute si le nom du fichier si le message est indiqu� dans la partie "addFileNameMessages" du filtre des messages
* de sortie
*
* @param msg le message � modifier
* @param fileName le nom du fichier � ajouter
* @return le message modifi� si besoin
*/
public String addFileNameToMsg( String msg, String fileName )
{
String result = msg;
if ( matchesRegexInTab( msg, mAddFileNameMsgs ) )
{
result += " File: " + fileName;
}
return result;
}
/**
* Indique si le message de sortie doit �tre ignor�
*
* @param msg le message de sortie � v�rifier
* @return true si le message doit �tre ignor�
*/
public boolean ignoreMsg( String msg )
{
boolean result = false;
// On ignore les messages nuls ou vide
if ( msg != null && !msg.equals( "" ) )
{
result = matchesRegexInTab( msg, mIgnoringMsgs );
}
return result;
}
/**
* substitue <code>msg</code> par le message donn� en configuration si il est pr�sent dans la liste
*
* @param msg le messae � remplacer potentiellement
* @return le message de substitution
*/
public String getReplacingMsg( String msg )
{
String result = msg;
boolean found = false;
// on recherche l'expression r�guli�re correspondant au message
for ( Iterator it = mReplacingMsgs.keySet().iterator(); it.hasNext() && !found; )
{
String curRegex = (String) it.next();
if ( msg.matches( curRegex ) )
{
result = (String) mReplacingMsgs.get( curRegex );
found = true;
}
}
return result;
}
/**
* @param msg le message � v�rifier
* @param regexs la liste des expressions r�guli�res
* @return true si <code>msg</code> match une expression r�guli�re contenue dans <code>tab</code>
*/
private boolean matchesRegexInTab( String msg, List regexs )
{
boolean result = false;
for ( int i = 0; i < regexs.size() && !result; i++ )
{
result = msg.matches( (String) regexs.get( i ) );
}
return result;
}
/**
* @return la liste Les expressions r�guli�res des messages auquel il faut ajouter le nom du fichier
*/
public List getAddFileNameMsgs()
{
return mAddFileNameMsgs;
}
/**
* @return la liste des messages d'erreur � mettre en warning
*/
public List getErrorToWarningMsgs()
{
return mErrorToWarningMsgs;
}
/**
* @return la liste des messages � ignorer
*/
public List getIgnoringMsgs()
{
return mIgnoringMsgs;
}
/**
* @return la liste des messages � remplacer par un autre
*/
public Map getReplacingMsgs()
{
return mReplacingMsgs;
}
}