1 |
commit: cc8aa4b89b5f9e268d4d40d04b25418e70955ea3 |
2 |
Author: zongyu <zzy2529420793 <AT> gmail <DOT> com> |
3 |
AuthorDate: Fri Jul 31 09:07:48 2020 +0000 |
4 |
Commit: Miroslav Šulc <fordfrog <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Jul 31 16:25:14 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=cc8aa4b8 |
7 |
|
8 |
initial effort to make java-ebuilder parse licenses from pom.xml |
9 |
|
10 |
Signed-off-by: zongyu <zzy2529420793 <AT> gmail.com> |
11 |
|
12 |
.../gentoo/java/ebuilder/maven/MavenEbuilder.java | 2 + |
13 |
.../gentoo/java/ebuilder/maven/MavenLicenses.java | 62 ++++++++++++++++++++ |
14 |
.../gentoo/java/ebuilder/maven/MavenParser.java | 66 ++++++++++++++++++++++ |
15 |
.../gentoo/java/ebuilder/maven/MavenProject.java | 22 ++++++++ |
16 |
src/main/resources/licenseMap.properties | 2 + |
17 |
5 files changed, 154 insertions(+) |
18 |
|
19 |
diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java |
20 |
index 37d45a4..3b5c3d6 100644 |
21 |
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java |
22 |
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java |
23 |
@@ -702,6 +702,8 @@ public class MavenEbuilder { |
24 |
|
25 |
if (config.getLicense() != null) { |
26 |
writer.print(config.getLicense()); |
27 |
+ } else { |
28 |
+ writer.print(mavenProject.getLicenses()); |
29 |
} |
30 |
|
31 |
writer.println('"'); |
32 |
|
33 |
diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenLicenses.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenLicenses.java |
34 |
new file mode 100644 |
35 |
index 0000000..e2db62c |
36 |
--- /dev/null |
37 |
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenLicenses.java |
38 |
@@ -0,0 +1,62 @@ |
39 |
+package org.gentoo.java.ebuilder.maven; |
40 |
+ |
41 |
+import java.io.FileNotFoundException; |
42 |
+import java.io.IOException; |
43 |
+import java.util.HashMap; |
44 |
+import java.util.Map; |
45 |
+import java.util.Properties; |
46 |
+ |
47 |
+/** |
48 |
+ * translate licenses from pom.xml to portage |
49 |
+ * |
50 |
+ * @author Zhang Zongyu |
51 |
+ */ |
52 |
+public class MavenLicenses { |
53 |
+ |
54 |
+ /** |
55 |
+ * Location of the resource file mapping licenses. |
56 |
+ */ |
57 |
+ private static final String licenseMapFile |
58 |
+ = "/licenseMap.properties"; |
59 |
+ |
60 |
+ /** |
61 |
+ * the Map that will convert license from maven |
62 |
+ * to portage. |
63 |
+ */ |
64 |
+ private Map<String, String> licenseMap; |
65 |
+ |
66 |
+ /** |
67 |
+ * Load cache from resource |
68 |
+ */ |
69 |
+ @SuppressWarnings({"unchecked", "rawtypes"}) |
70 |
+ MavenLicenses() { |
71 |
+ Properties mapProperty = new Properties(); |
72 |
+ try { |
73 |
+ mapProperty.load( |
74 |
+ this.getClass().getResourceAsStream( |
75 |
+ licenseMapFile)); |
76 |
+ } catch (final IOException ex) { |
77 |
+ throw new RuntimeException( |
78 |
+ "Failed to read license map from resource", ex); |
79 |
+ } |
80 |
+ |
81 |
+ licenseMap = (Map)mapProperty; |
82 |
+ } |
83 |
+ |
84 |
+ /** |
85 |
+ * query the LicenseMap |
86 |
+ * |
87 |
+ * @param licenseName the licenses/license/name in pom.xml |
88 |
+ * |
89 |
+ * @return license identifier that works with Portage |
90 |
+ */ |
91 |
+ public String getEquivalentLicense(String licenseName) { |
92 |
+ final String portageLicense = licenseMap.get(licenseName); |
93 |
+ |
94 |
+ if (portageLicense == null) { |
95 |
+ return "!!!equivalentPortageLicenseName-not-found!!!"; |
96 |
+ } else { |
97 |
+ return portageLicense; |
98 |
+ } |
99 |
+ } |
100 |
+} |
101 |
|
102 |
diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java |
103 |
index 8abc0aa..8c64e37 100644 |
104 |
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java |
105 |
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java |
106 |
@@ -16,6 +16,7 @@ import javax.xml.stream.XMLInputFactory; |
107 |
import javax.xml.stream.XMLStreamException; |
108 |
import javax.xml.stream.XMLStreamReader; |
109 |
import org.gentoo.java.ebuilder.Config; |
110 |
+import org.gentoo.java.ebuilder.maven.MavenLicenses; |
111 |
|
112 |
/** |
113 |
* Parser for parsing pom.xml into project collector class. |
114 |
@@ -419,6 +420,9 @@ public class MavenParser { |
115 |
case "groupId": |
116 |
mavenProject.setGroupId(reader.getElementText()); |
117 |
break; |
118 |
+ case "licenses": |
119 |
+ parseProjectLicenses(mavenProject, reader); |
120 |
+ break; |
121 |
case "properties": |
122 |
parseProjectProperties(mavenProject, reader); |
123 |
break; |
124 |
@@ -572,6 +576,68 @@ public class MavenParser { |
125 |
} |
126 |
} |
127 |
|
128 |
+ /** |
129 |
+ * Parses project licenses. |
130 |
+ * |
131 |
+ * @param mavenProject maven project instance |
132 |
+ * @param reader XML stream reader |
133 |
+ * |
134 |
+ * @throws XMLStreamException Thrown if problem occurred while reading the |
135 |
+ * XML stream. |
136 |
+ */ |
137 |
+ private void parseProjectLicenses(final MavenProject mavenProject, |
138 |
+ final XMLStreamReader reader) |
139 |
+ throws XMLStreamException { |
140 |
+ MavenLicenses mavenLic = new MavenLicenses(); |
141 |
+ |
142 |
+ while (reader.hasNext()) { |
143 |
+ reader.next(); |
144 |
+ |
145 |
+ if (reader.isStartElement()) { |
146 |
+ switch (reader.getLocalName()) { |
147 |
+ case "license": |
148 |
+ parseProjectLicense(mavenLic, mavenProject, reader); |
149 |
+ break; |
150 |
+ default: |
151 |
+ consumeElement(reader); |
152 |
+ } |
153 |
+ } else if (reader.isEndElement()) { |
154 |
+ return; |
155 |
+ } |
156 |
+ } |
157 |
+ } |
158 |
+ |
159 |
+ /** |
160 |
+ * Parses project license. |
161 |
+ * |
162 |
+ * @param mavenProject maven project instance |
163 |
+ * @param reader XML stream reader |
164 |
+ * |
165 |
+ * @throws XMLStreamException Thrown if problem occurred while reading the |
166 |
+ * XML stream. |
167 |
+ */ |
168 |
+ private void parseProjectLicense(final MavenLicenses mavenLicenses, |
169 |
+ final MavenProject mavenProject, final XMLStreamReader reader) |
170 |
+ throws XMLStreamException { |
171 |
+ while (reader.hasNext()) { |
172 |
+ reader.next(); |
173 |
+ |
174 |
+ if (reader.isStartElement()) { |
175 |
+ switch (reader.getLocalName()) { |
176 |
+ case "name": |
177 |
+ mavenProject.addLicense( |
178 |
+ mavenLicenses.getEquivalentLicense( |
179 |
+ reader.getElementText())); |
180 |
+ break; |
181 |
+ default: |
182 |
+ consumeElement(reader); |
183 |
+ } |
184 |
+ } else if (reader.isEndElement()) { |
185 |
+ return; |
186 |
+ } |
187 |
+ } |
188 |
+ } |
189 |
+ |
190 |
/** |
191 |
* Parses project properties. |
192 |
* |
193 |
|
194 |
diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java |
195 |
index 07fa60e..fa4958d 100644 |
196 |
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java |
197 |
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java |
198 |
@@ -41,6 +41,10 @@ public class MavenProject { |
199 |
* Whether the package has test classes. |
200 |
*/ |
201 |
private Boolean hasTests; |
202 |
+ /** |
203 |
+ * Lisences. |
204 |
+ */ |
205 |
+ private List<String> licenses = new ArrayList<>(10); |
206 |
/** |
207 |
* Homepage URL. |
208 |
*/ |
209 |
@@ -104,6 +108,15 @@ public class MavenProject { |
210 |
dependencies.add(dependency); |
211 |
} |
212 |
|
213 |
+ /** |
214 |
+ * Adds license to {@link #licenses}. |
215 |
+ * |
216 |
+ * @param license {@link #licenses} |
217 |
+ */ |
218 |
+ public void addLicense(final String license) { |
219 |
+ licenses.add(license); |
220 |
+ } |
221 |
+ |
222 |
/** |
223 |
* Adds path to {@link #resourceDirectories}. |
224 |
* |
225 |
@@ -296,6 +309,15 @@ public class MavenProject { |
226 |
this.homepage = homepage; |
227 |
} |
228 |
|
229 |
+ /** |
230 |
+ * Getter for {@link #licenses}. |
231 |
+ * |
232 |
+ * @return space separated licenses |
233 |
+ */ |
234 |
+ public String getLicenses() { |
235 |
+ return String.join(" ", licenses); |
236 |
+ } |
237 |
+ |
238 |
/** |
239 |
* Getter for {@link #mainClass}. |
240 |
* |
241 |
|
242 |
diff --git a/src/main/resources/licenseMap.properties b/src/main/resources/licenseMap.properties |
243 |
new file mode 100644 |
244 |
index 0000000..fe9262a |
245 |
--- /dev/null |
246 |
+++ b/src/main/resources/licenseMap.properties |
247 |
@@ -0,0 +1,2 @@ |
248 |
+#Fri Jul 31 23:28:29 CST 2020 |
249 |
+Apache\ License,\ Version\ 2.0=Apache-2.0 |