package org.codehaus.mojo.jlint;
import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.reporting.MavenReportException;
import org.codehaus.plexus.resource.ResourceManager;
import org.codehaus.plexus.resource.loader.FileResourceCreationException;
public class JlintConfiguration
{
private ResourceManager locator;
private String configLocation;
private String configFile;
private ArrayList<String> rules;
private Log logger;
public JlintConfiguration( ResourceManager locator, String configLocation, Log logger )
{
this.locator = locator;
this.configLocation = configLocation;
this.logger = logger;
}
public void loadConfiguration()
{
try
{
configFile = getConfigFile();
}
catch ( MavenReportException e )
{
logger.error( e.toString() );
System.exit( -1 );
}
JlintXmlConfigReader configReader = new JlintXmlConfigReader( configFile );
rules = configReader.readConfiguration();
}
private String getConfigFile()
throws MavenReportException
{
try
{
File configFile = locator.getResourceAsFile( configLocation, "jlint-config.xml" );
if ( configFile == null )
{
throw new MavenReportException( "Unable to process config location: " + configLocation );
}
return configFile.getAbsolutePath();
}
catch ( org.codehaus.plexus.resource.loader.ResourceNotFoundException e )
{
throw new MavenReportException( "Unable to find configuration file at location " + configLocation, e );
}
catch ( FileResourceCreationException e )
{
throw new MavenReportException( "Unable to process configuration file location " + configLocation, e );
}
}
public String getCategoriesToDisable( ArrayList<JlintMessageItem> rules )
{
Set<String> configuredRules = getConfiguredRules( configFile );
Set<String> allRules = getAllRules( rules );
Iterator<String> rulesIterator = allRules.iterator();
StringBuilder resultCommand = new StringBuilder( " " );
while ( rulesIterator.hasNext() )
{
String category = rulesIterator.next();
// DEBUG
// System.out.println("All Rule: " + category);
// System.out.println("[" + configuredRules.contains(category) + "]");
if ( configuredRules.contains( category ) == Boolean.FALSE )
{
resultCommand.append( "-" );
resultCommand.append( category.toLowerCase() );
resultCommand.append( " " );
}
}
return resultCommand.toString();
}
public Set<String> getConfiguredRules( String configFilePath )
{
// Read XML input file here
HashSet<String> configuredRuleSet = new HashSet<String>();
loadConfiguration();
for ( String rule : rules )
{
configuredRuleSet.add( rule );
}
// tmp.add("WEAK_CMP");
// tmp.add("NOT_OVERRIDDEN");
return configuredRuleSet;
}
public HashSet<String> getAllRules( ArrayList<JlintMessageItem> rules )
{
HashSet<String> allRules = new HashSet<String>();
for ( JlintMessageItem ci : rules )
{
allRules.add( ci.getCategory() );
}
return allRules;
}
}