/*
* Ada Sonar Plugin
* Copyright (C) 2010 Akram Ben Aissi
* dev@sonar.codehaus.org
*
* This program 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 (at your option) any later version.
*
* This program 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.plugins.ada.gnat.metric;
import java.util.ArrayList;
import java.util.List;
import org.sonar.plugins.ada.core.PluginAbstractExecutor;
/**
* The Class GnatMetricExecutor.
*/
public class GnatMetricExecutor extends PluginAbstractExecutor {
/** The configuration. */
private GnatConfiguration configuration;
/**
* Instantiates a new executor.
*
* @param configuration
* the configuration
*/
public GnatMetricExecutor(GnatConfiguration configuration) {
this.configuration = configuration;
}
/**
* @see org.sonar.plugins.ada.core.PluginAbstractExecutor#getCommandLine()
*/
@Override
protected List<String> getCommandLine() {
List<String> result = new ArrayList<String>();
result.add(configuration.getExecutable());
result.add(configuration.getDefaultArgument());
result.add(configuration.getDoNoteGenerateTextModifier());
result.add(configuration.getXmlOutputModifier());
result.add(configuration.getXmlOutputFileModifier());
result.add(configuration.getReportFile().toString());
String excludedPackages = configuration.getExcludedPackages();
if (excludedPackages != null) {
result.add(configuration.getExcludePackagesModifier() + excludedPackages);
}
String ignoreDirectories = configuration.getIgnoredDirectories();
if (ignoreDirectories != null) {
result.add(configuration.getIgnoreDirectoryModifier() + ignoreDirectories);
}
result.addAll(configuration.getSourceFiles());
addIncludesAndExtraArguments(result);
return result;
}
/**
* @param result
*/
private void addIncludesAndExtraArguments(List<String> result) {
// Add include directories. Copy the directories to include in a ArrayList
List<String> includeDirectories = new ArrayList<String>(configuration.getIncludeDirectories());
// if the option to automatically include source directories is set, we add the source directories to directories to include.
if (configuration.isIncludeSourceDirectories()) {
includeDirectories.addAll(configuration.getAutomaticalyIncludedDirectories());
}
// The -cargs and -I option should be repeated for each directory to include.
String includeDirectoryModifier = configuration.getIncludeDirectoryModifier();
for (String include : includeDirectories) {
include(result, includeDirectoryModifier, include);
}
String includeLibraryModifier = configuration.getIncludeLibraryModifier();
for (String include : configuration.getIncludeLibraries()) {
include(result, includeLibraryModifier, include);
}
for (String argument : configuration.getExtraArguments()) {
result.add(argument);
}
}
/**
* @param result
* @param includeDirectoryModifier
* @param include
*/
private void include(List<String> result, String includeDirectoryModifier, String include) {
String compilerArgumentModifier = configuration.getCompilerArgumentModifier();
result.add(compilerArgumentModifier);
result.add(includeDirectoryModifier);
result.add(include);
}
/**
* @return the configuration
*/
public GnatConfiguration getConfiguration() {
return configuration;
}
/**
* @see org.sonar.plugins.ada.core.PluginAbstractExecutor#getExecutable()
*/
@Override
protected String getExecutable() {
return configuration.getExecutable();
}
}