ch.hortis.sonar.mvn.PomUtils Maven / Gradle / Ivy
package ch.hortis.sonar.mvn;
import org.apache.commons.io.FileUtils;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.ReportPlugin;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public final class PomUtils {
public static final String APACHE_MOJO_GROUP_ID = "org.apache.maven.plugins";
public static final String CODEHAUS_MOJO_GROUP_ID = "org.codehaus.mojo";
public static Plugin findBuildPlugin(MavenProject pom, String groupId, String artifactId) {
if (pom != null) {
if (pom.getBuild() != null) {
return getPlugin(pom.getBuild().getPlugins(), groupId, artifactId);
}
}
return null;
}
public static Plugin findPlugin(MavenProject pom, String groupId, String artifactId) {
Collection plugins = findPluginDefinitions(pom, groupId, artifactId);
if (plugins.size()>0) {
return plugins.iterator().next();
}
return null;
}
public static Collection findPluginDefinitions(MavenProject pom, String groupId, String artifactId) {
Collection result = new ArrayList();
Plugin plugin = null;
if (pom != null) {
if (pom.getBuild() != null) {
plugin = getPlugin(pom.getBuild().getPlugins(), groupId, artifactId);
if (plugin!=null) {
result.add( plugin );
}
if (pom.getBuild().getPluginManagement() != null) {
plugin = getPlugin(pom.getBuild().getPluginManagement().getPlugins(), groupId, artifactId);
if (plugin!=null) {
result.add( plugin );
}
}
}
ReportPlugin reportPlugin = findReportPlugin(pom, groupId, artifactId);
if (reportPlugin != null) {
plugin = cloneReportPluginToPlugin(reportPlugin);
if (plugin!=null) {
result.add( plugin );
}
}
if (pom.getParent() != null) {
result.addAll( findPluginDefinitions(pom.getParent(), groupId, artifactId) );
}
}
return result;
}
public static Xpp3Dom findPluginConfiguration(MavenProject pom, String groupId, String artifactId) {
Xpp3Dom configuration = null;
if (pom.getBuild() != null) {
Plugin plugin = getPlugin(pom.getBuild().getPlugins(), groupId, artifactId);
if (plugin != null) {
configuration = (Xpp3Dom) plugin.getConfiguration();
}
}
if (configuration == null) {
ReportPlugin plugin = findReportPlugin(pom, groupId, artifactId);
if (plugin != null) {
configuration = (Xpp3Dom) plugin.getConfiguration();
}
}
if (configuration == null && pom.getPluginManagement() != null) {
Plugin plugin = getPlugin(pom.getPluginManagement().getPlugins(), groupId, artifactId);
if (plugin != null) {
configuration = (Xpp3Dom) plugin.getConfiguration();
}
}
if (configuration == null && pom.getParent() != null) {
configuration = findPluginConfiguration(pom.getParent(), groupId, artifactId);
}
return configuration;
}
public static Plugin getPlugin(Collection plugins, String groupId, String artifactId) {
Plugin result = null;
if (plugins != null) {
for (Iterator i = plugins.iterator(); i.hasNext();) {
Plugin plugin = (Plugin) i.next();
if (isSamePlugin(plugin.getGroupId(), plugin.getArtifactId(), groupId, artifactId)) {
result = plugin;
break;
}
}
}
return result;
}
protected static boolean isSamePlugin(String groupId1, String artifactId1, String groupId2, String artifactId2) {
boolean same = false;
if (artifactId1.equals(artifactId2)) {
if (groupId1==null) {
same = (groupId2==null || groupId2.equals(APACHE_MOJO_GROUP_ID) || groupId2.equals(CODEHAUS_MOJO_GROUP_ID));
} else {
same = groupId1.equals(groupId2);
}
}
return same;
}
public static ReportPlugin findReportPlugin(MavenProject pom, String groupId, String artifactId) {
ReportPlugin result = null;
if (pom != null && pom.getReporting() != null && pom.getReporting().getPlugins() != null) {
for (Iterator i = pom.getReporting().getPlugins().iterator(); i.hasNext();) {
ReportPlugin plugin = (ReportPlugin) i.next();
if (isSamePlugin(plugin.getGroupId(), plugin.getArtifactId(), groupId, artifactId)) {
result = plugin;
break;
}
}
}
return result;
}
public static Xpp3Dom getConfiguration(Plugin plugin) {
return (Xpp3Dom) plugin.getConfiguration();
}
public static String getConfigurationValue(Plugin plugin, String key) {
Xpp3Dom node = getConfigurationNode(plugin, key);
String value = null;
if (node != null) {
value = node.getValue();
}
return value;
}
public static Xpp3Dom getConfigurationNode(Plugin plugin, String key) {
Xpp3Dom result = null;
Xpp3Dom conf = getConfiguration(plugin);
if (conf != null) {
result = conf.getChild(key);
}
return result;
}
/**
* BE CAREFUL : the configuration node is not a clone but the same object !!
*/
public static Plugin cloneReportPluginToPlugin(ReportPlugin reportPlugin) {
Plugin plugin = new Plugin();
plugin.setGroupId(reportPlugin.getGroupId());
plugin.setArtifactId(reportPlugin.getArtifactId());
plugin.setVersion(reportPlugin.getVersion());
plugin.setConfiguration(((Xpp3Dom) reportPlugin.getConfiguration()));
return plugin;
}
public static Collection getJavaSourceFiles( MavenProject pom ) {
return getSourceFiles( pom, new String[] {"java"} );
}
public static Collection getJavaTestFiles( MavenProject pom ) {
return getTestFiles( pom, new String[] {"java"} );
}
public static Collection getSourceFiles( MavenProject pom, String[] extensions ) {
return getFilesFromDirectories( pom.getCompileSourceRoots(), extensions );
}
public static Collection getTestFiles( MavenProject pom, String[] extensions ) {
return getFilesFromDirectories( pom.getTestCompileSourceRoots(), extensions );
}
public static Collection getFilesFromDirectories( List directories , String[] extensions ) {
Collection result = new ArrayList();
if (directories!=null) {
for (String sourceDir : directories) {
File dir = new File(sourceDir);
if (dir.exists()) {
Collection files = FileUtils.listFiles( dir, extensions, true );
result.addAll(files);
}
}
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy