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