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

org.gephi.maven.MetadataUtils Maven / Gradle / Ivy

There is a newer version: 1.3.4
Show newest version
/*
 * 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; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy