001 /* 002 * SonarQube, open source software quality management tool. 003 * Copyright (C) 2008-2013 SonarSource 004 * mailto:contact AT sonarsource DOT com 005 * 006 * SonarQube is free software; you can redistribute it and/or 007 * modify it under the terms of the GNU Lesser General Public 008 * License as published by the Free Software Foundation; either 009 * version 3 of the License, or (at your option) any later version. 010 * 011 * SonarQube is distributed in the hope that it will be useful, 012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 014 * Lesser General Public License for more details. 015 * 016 * You should have received a copy of the GNU Lesser General Public License 017 * along with this program; if not, write to the Free Software Foundation, 018 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 019 */ 020 package org.sonar.api.batch.maven; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.apache.maven.model.Plugin; 024 import org.apache.maven.model.ReportPlugin; 025 import org.apache.maven.project.MavenProject; 026 import org.slf4j.LoggerFactory; 027 028 import java.nio.charset.Charset; 029 import java.util.Collection; 030 031 /** 032 * An utility class to manipulate Maven concepts 033 * 034 * @since 1.10 035 */ 036 public final class MavenUtils { 037 038 private static final String MAVEN_COMPILER_PLUGIN = "maven-compiler-plugin"; 039 public static final String GROUP_ID_APACHE_MAVEN = "org.apache.maven.plugins"; 040 public static final String GROUP_ID_CODEHAUS_MOJO = "org.codehaus.mojo"; 041 042 private MavenUtils() { 043 // utility class with only static methods 044 } 045 046 /** 047 * Returns the version of Java used by the maven compiler plugin 048 * 049 * @param pom the project pom 050 * @return the java version 051 */ 052 public static String getJavaVersion(MavenProject pom) { 053 MavenPlugin compilerPlugin = MavenPlugin.getPlugin(pom, GROUP_ID_APACHE_MAVEN, MAVEN_COMPILER_PLUGIN); 054 if (compilerPlugin != null) { 055 return compilerPlugin.getParameter("target"); 056 } 057 return null; 058 } 059 060 public static String getJavaSourceVersion(MavenProject pom) { 061 MavenPlugin compilerPlugin = MavenPlugin.getPlugin(pom, GROUP_ID_APACHE_MAVEN, MAVEN_COMPILER_PLUGIN); 062 if (compilerPlugin != null) { 063 return compilerPlugin.getParameter("source"); 064 } 065 return null; 066 } 067 068 /** 069 * Queries a collection of plugins based on a group id and an artifact id and returns the plugin if it exists 070 * 071 * @param plugins the plugins collection 072 * @param groupId the group id 073 * @param artifactId the artifact id 074 * @return the corresponding plugin if it exists, null otherwise 075 */ 076 public static Plugin getPlugin(Collection<Plugin> plugins, String groupId, String artifactId) { 077 if (plugins != null) { 078 for (Plugin plugin : plugins) { 079 if (equals(plugin, groupId, artifactId)) { 080 return plugin; 081 } 082 } 083 } 084 return null; 085 } 086 087 /** 088 * Tests whether a plugin has got a given artifact id and group id 089 * 090 * @param plugin the plugin to test 091 * @param groupId the group id 092 * @param artifactId the artifact id 093 * @return whether the plugin has got group + artifact ids 094 */ 095 public static boolean equals(Plugin plugin, String groupId, String artifactId) { 096 if (plugin != null && plugin.getArtifactId().equals(artifactId)) { 097 if (plugin.getGroupId() == null) { 098 return groupId == null || groupId.equals(MavenUtils.GROUP_ID_APACHE_MAVEN) || groupId.equals(MavenUtils.GROUP_ID_CODEHAUS_MOJO); 099 } 100 return plugin.getGroupId().equals(groupId); 101 } 102 return false; 103 } 104 105 /** 106 * Tests whether a ReportPlugin has got a given artifact id and group id 107 * 108 * @param plugin the ReportPlugin to test 109 * @param groupId the group id 110 * @param artifactId the artifact id 111 * @return whether the ReportPlugin has got group + artifact ids 112 */ 113 public static boolean equals(ReportPlugin plugin, String groupId, String artifactId) { 114 if (plugin != null && plugin.getArtifactId().equals(artifactId)) { 115 if (plugin.getGroupId() == null) { 116 return groupId == null || groupId.equals(MavenUtils.GROUP_ID_APACHE_MAVEN) || groupId.equals(MavenUtils.GROUP_ID_CODEHAUS_MOJO); 117 } 118 return plugin.getGroupId().equals(groupId); 119 } 120 return false; 121 } 122 123 /** 124 * @return source encoding 125 */ 126 public static String getSourceEncoding(MavenProject pom) { 127 return pom.getProperties().getProperty("project.build.sourceEncoding"); 128 } 129 130 /** 131 * Returns the charset of a pom 132 * 133 * @param pom the project pom 134 * @return the charset 135 */ 136 public static Charset getSourceCharset(MavenProject pom) { 137 String encoding = getSourceEncoding(pom); 138 if (StringUtils.isNotEmpty(encoding)) { 139 try { 140 return Charset.forName(encoding); 141 142 } catch (Exception e) { 143 LoggerFactory.getLogger(MavenUtils.class).warn("Can not get project charset", e); 144 } 145 } 146 return Charset.defaultCharset(); 147 } 148 }