org.gephi.maven.MetadataUtils Maven / Gradle / Ivy
Show all versions of gephi-maven-plugin Show documentation
/*
* Copyright 2015 Gephi Consortium
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package org.gephi.maven;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.maven.model.Plugin;
import org.apache.maven.model.Scm;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.gephi.maven.json.Author;
/**
* Metadata utils.
*/
public class MetadataUtils {
/**
* Lookup and returns the value of the licenseName configuration.
*
* @param project project
* @return license name or null if not found
*/
protected static String getLicenseName(MavenProject project) {
Plugin nbmPlugin = lookupNbmPlugin(project);
if (nbmPlugin != null) {
Xpp3Dom config = (Xpp3Dom) nbmPlugin.getConfiguration();
if (config != null && config.getChild("licenseName") != null) {
return config.getChild("licenseName").getValue();
}
}
return null;
}
/**
* Lookup and returns the value of the homePageUrl configuration.
*
* @param project project
* @return homepage or null if not found
*/
protected static String getHomepage(MavenProject project) {
Plugin nbmPlugin = lookupNbmPlugin(project);
if (nbmPlugin != null) {
Xpp3Dom config = (Xpp3Dom) nbmPlugin.getConfiguration();
if (config != null && config.getChild("homePageUrl") != null) {
return config.getChild("homePageUrl").getValue();
}
}
return null;
}
/**
* Lookup and returns the value of the author configuration.
*
* The configuration string is split based on ',' so multiple authors can be
* defined.
*
* @param project project
* @return list of authors or null if not found
*/
protected static List getAuthors(MavenProject project) {
Plugin nbmPlugin = lookupNbmPlugin(project);
if (nbmPlugin != null) {
Xpp3Dom config = (Xpp3Dom) nbmPlugin.getConfiguration();
if (config != null && config.getChild("author") != null) {
String authorName = config.getChild("author").getValue();
String authorEmail = config.getChild("authorEmail") != null ? config.getChild("authorEmail").getValue() : null;
String authorUrl = config.getChild("authorUrl") != null ? config.getChild("authorUrl").getValue() : null;
Author author = new Author();
author.name = authorName;
author.email = authorEmail;
author.link = authorUrl;
return Arrays.asList(new Author[]{author});
}
}
return null;
}
/**
* Lookup and return the NBM plugin for this plugin.
*
* @param project project
* @return NBM plugin
*/
protected static Plugin lookupNbmPlugin(MavenProject project) {
List plugins = project.getBuildPlugins();
for (Iterator iterator = plugins.iterator(); iterator.hasNext();) {
Plugin plugin = (Plugin) iterator.next();
if ("org.codehaus.mojo:nbm-maven-plugin".equalsIgnoreCase(plugin.getKey())) {
return plugin;
}
}
return null;
}
/**
* Lookup and return the content of the README.md file for this plugin.
*
* @param project project
* @param log log
* @return content of REDME.md file or null if not found
*/
protected static String getReadme(MavenProject project, Log log) {
File readmePath = new File(project.getBasedir(), "README.md");
if (readmePath.exists()) {
log.debug("README.md file has been found: '" + readmePath.getAbsolutePath() + "'");
try {
StringBuilder builder = new StringBuilder();
LineNumberReader fileReader = new LineNumberReader(new FileReader(readmePath));
String line;
while ((line = fileReader.readLine()) != null) {
builder.append(line);
builder.append("\n");
}
log.info("File README.md with " + builder.length() + " characters has been attached to project '" + project.getName() + "'");
return builder.toString();
} catch (IOException ex) {
log.error("Error while reading README.md file", ex);
}
}
return null;
}
/**
* Lookup source code configuration or default to SCM.
*
* @param project project
* @param log log
* @return source code url or null
*/
protected static String getSourceCode(MavenProject project, Log log) {
Plugin nbmPlugin = lookupNbmPlugin(project);
if (nbmPlugin != null) {
Xpp3Dom config = (Xpp3Dom) nbmPlugin.getConfiguration();
if (config != null && config.getChild("sourceCodeUrl") != null) {
return config.getChild("sourceCodeUrl").getValue();
}
}
Scm scm = project.getScm();
if (scm != null && scm.getUrl() != null && !scm.getUrl().isEmpty()) {
log.debug("SCM configuration found, with url = '" + scm.getUrl() + "'");
return scm.getUrl();
} else {
}
return null;
}
/**
* Use local Git repository configuration to lookup the sourcecode URL.
*
* @param project project
* @param log log
* @return source code url or null
*/
protected static String getSourceCodeUrlFromGit(MavenProject project, Log log) {
File gitPath = new File(project.getBasedir(), ".git");
if (gitPath.exists() && gitPath.isDirectory()) {
File gitPathConfig = new File(gitPath, "config");
if (gitPathConfig.exists() && gitPathConfig.isFile()) {
log.debug("Git config gile located at '" + gitPathConfig.getAbsolutePath() + "'");
try {
BufferedReader fileReader = new BufferedReader(new FileReader(gitPathConfig));
Pattern pattern = Pattern.compile("\\s*url = (.*)");
String line, url = null;
while ((line = fileReader.readLine()) != null) {
Matcher m = pattern.matcher(line);
if (m.matches()) {
url = m.group(1);
break;
}
}
fileReader.close();
if (url != null) {
log.debug("URL found in .git/config: '" + url + "'");
if (url.startsWith("http://")) {
return url;
} else if (url.startsWith("git@")) {
Pattern gitPattern = Pattern.compile("git@([^:]*):([^.]*).git");
Matcher gitMatcher = gitPattern.matcher(url);
if (gitMatcher.matches()) {
String res = "http://" + gitMatcher.group(1) + "/" + gitMatcher.group(2);
log.debug("Rewrote URL to '" + res + "'");
return res;
}
} else {
log.debug("Couldn't find a pattern in the git URL: " + url);
}
}
} catch (IOException e) {
log.error("Error while reading Git config", e);
}
}
} else {
log.debug("The .git folder couldn't be found at '" + gitPath.getAbsolutePath() + "'");
}
return null;
}
}