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