commit:     cc8aa4b89b5f9e268d4d40d04b25418e70955ea3
Author:     zongyu <zzy2529420793 <AT> gmail <DOT> com>
AuthorDate: Fri Jul 31 09:07:48 2020 +0000
Commit:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
CommitDate: Fri Jul 31 16:25:14 2020 +0000
URL:        https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=cc8aa4b8

initial effort to make java-ebuilder parse licenses from pom.xml

Signed-off-by: zongyu <zzy2529420793 <AT> gmail.com>

 .../gentoo/java/ebuilder/maven/MavenEbuilder.java  |  2 +
 .../gentoo/java/ebuilder/maven/MavenLicenses.java  | 62 ++++++++++++++++++++
 .../gentoo/java/ebuilder/maven/MavenParser.java    | 66 ++++++++++++++++++++++
 .../gentoo/java/ebuilder/maven/MavenProject.java   | 22 ++++++++
 src/main/resources/licenseMap.properties           |  2 +
 5 files changed, 154 insertions(+)

diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java 
b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
index 37d45a4..3b5c3d6 100644
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
@@ -702,6 +702,8 @@ public class MavenEbuilder {
 
         if (config.getLicense() != null) {
             writer.print(config.getLicense());
+        } else {
+            writer.print(mavenProject.getLicenses());
         }
 
         writer.println('"');

diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenLicenses.java 
b/src/main/java/org/gentoo/java/ebuilder/maven/MavenLicenses.java
new file mode 100644
index 0000000..e2db62c
--- /dev/null
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenLicenses.java
@@ -0,0 +1,62 @@
+package org.gentoo.java.ebuilder.maven;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * translate licenses from pom.xml to portage
+ *
+ * @author Zhang Zongyu
+ */
+public class MavenLicenses {
+
+        /**
+         * Location of the resource file mapping licenses.
+         */
+        private static final String licenseMapFile
+                = "/licenseMap.properties";
+
+        /**
+         * the Map that will convert license from maven
+         * to portage.
+         */
+        private Map<String, String> licenseMap;
+
+        /**
+         * Load cache from resource
+         */
+        @SuppressWarnings({"unchecked", "rawtypes"})
+        MavenLicenses() {
+            Properties mapProperty = new Properties();
+            try {
+                mapProperty.load(
+                        this.getClass().getResourceAsStream(
+                        licenseMapFile));
+            } catch (final IOException ex) {
+                throw new RuntimeException(
+                        "Failed to read license map from resource", ex);
+            }
+
+            licenseMap = (Map)mapProperty;
+        }
+
+        /**
+         * query the LicenseMap
+         *
+         * @param licenseName the licenses/license/name in pom.xml
+         *
+         * @return license identifier that works with Portage
+         */
+        public String getEquivalentLicense(String licenseName) {
+            final String portageLicense = licenseMap.get(licenseName);
+
+            if (portageLicense == null) {
+                return "!!!equivalentPortageLicenseName-not-found!!!";
+            } else {
+                return portageLicense;
+            }
+        }
+}

diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java 
b/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java
index 8abc0aa..8c64e37 100644
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java
@@ -16,6 +16,7 @@ import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import org.gentoo.java.ebuilder.Config;
+import org.gentoo.java.ebuilder.maven.MavenLicenses;
 
 /**
  * Parser for parsing pom.xml into project collector class.
@@ -419,6 +420,9 @@ public class MavenParser {
                     case "groupId":
                         mavenProject.setGroupId(reader.getElementText());
                         break;
+                    case "licenses":
+                        parseProjectLicenses(mavenProject, reader);
+                        break;
                     case "properties":
                         parseProjectProperties(mavenProject, reader);
                         break;
@@ -572,6 +576,68 @@ public class MavenParser {
         }
     }
 
+    /**
+     * Parses project licenses.
+     *
+     * @param mavenProject maven project instance
+     * @param reader       XML stream reader
+     *
+     * @throws XMLStreamException Thrown if problem occurred while reading the
+     *                            XML stream.
+     */
+    private void parseProjectLicenses(final MavenProject mavenProject,
+            final XMLStreamReader reader)
+            throws XMLStreamException {
+        MavenLicenses mavenLic = new MavenLicenses();
+
+        while (reader.hasNext()) {
+            reader.next();
+
+            if (reader.isStartElement()) {
+                switch (reader.getLocalName()) {
+                    case "license":
+                        parseProjectLicense(mavenLic, mavenProject, reader);
+                        break;
+                    default:
+                        consumeElement(reader);
+                }
+            } else if (reader.isEndElement()) {
+                return;
+            }
+        }
+    }
+
+    /**
+     * Parses project license.
+     *
+     * @param mavenProject maven project instance
+     * @param reader       XML stream reader
+     *
+     * @throws XMLStreamException Thrown if problem occurred while reading the
+     *                            XML stream.
+     */
+    private void parseProjectLicense(final MavenLicenses mavenLicenses,
+            final MavenProject mavenProject, final XMLStreamReader reader)
+            throws XMLStreamException {
+        while (reader.hasNext()) {
+            reader.next();
+
+            if (reader.isStartElement()) {
+                switch (reader.getLocalName()) {
+                    case "name":
+                        mavenProject.addLicense(
+                                mavenLicenses.getEquivalentLicense(
+                                reader.getElementText()));
+                        break;
+                    default:
+                        consumeElement(reader);
+                }
+            } else if (reader.isEndElement()) {
+                return;
+            }
+        }
+    }
+
     /**
      * Parses project properties.
      *

diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java 
b/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java
index 07fa60e..fa4958d 100644
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java
@@ -41,6 +41,10 @@ public class MavenProject {
      * Whether the package has test classes.
      */
     private Boolean hasTests;
+    /**
+     * Lisences.
+     */
+    private List<String> licenses = new ArrayList<>(10);
     /**
      * Homepage URL.
      */
@@ -104,6 +108,15 @@ public class MavenProject {
         dependencies.add(dependency);
     }
 
+    /**
+     * Adds license to {@link #licenses}.
+     *
+     * @param license {@link #licenses}
+     */
+    public void addLicense(final String license) {
+        licenses.add(license);
+    }
+
     /**
      * Adds path to {@link #resourceDirectories}.
      *
@@ -296,6 +309,15 @@ public class MavenProject {
         this.homepage = homepage;
     }
 
+    /**
+     * Getter for {@link #licenses}.
+     *
+     * @return space separated licenses
+     */
+    public String getLicenses() {
+        return String.join(" ", licenses);
+    }
+
     /**
      * Getter for {@link #mainClass}.
      *

diff --git a/src/main/resources/licenseMap.properties 
b/src/main/resources/licenseMap.properties
new file mode 100644
index 0000000..fe9262a
--- /dev/null
+++ b/src/main/resources/licenseMap.properties
@@ -0,0 +1,2 @@
+#Fri Jul 31 23:28:29 CST 2020
+Apache\ License,\ Version\ 2.0=Apache-2.0

Reply via email to