All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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