1
2
3
4
5 package org.apache.maven.model.v4;
6
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.io.Reader;
11 import java.io.Writer;
12 import java.text.DateFormat;
13 import java.util.ArrayList;
14 import java.util.Date;
15 import java.util.HashSet;
16 import java.util.List;
17 import java.util.Map;
18 import java.util.Objects;
19 import java.util.Properties;
20 import java.util.Set;
21 import org.apache.maven.api.annotations.Generated;
22 import org.apache.maven.api.model.InputLocation;
23 import org.apache.maven.api.model.InputLocationTracker;
24 import org.apache.maven.api.xml.XmlNode;
25 import org.apache.maven.internal.xml.XmlNodeBuilder;
26 import org.apache.maven.api.model.Model;
27 import org.apache.maven.api.model.ModelBase;
28 import org.apache.maven.api.model.PluginContainer;
29 import org.apache.maven.api.model.PluginConfiguration;
30 import org.apache.maven.api.model.BuildBase;
31 import org.apache.maven.api.model.Build;
32 import org.apache.maven.api.model.CiManagement;
33 import org.apache.maven.api.model.Notifier;
34 import org.apache.maven.api.model.Contributor;
35 import org.apache.maven.api.model.Dependency;
36 import org.apache.maven.api.model.Developer;
37 import org.apache.maven.api.model.Exclusion;
38 import org.apache.maven.api.model.IssueManagement;
39 import org.apache.maven.api.model.DistributionManagement;
40 import org.apache.maven.api.model.License;
41 import org.apache.maven.api.model.MailingList;
42 import org.apache.maven.api.model.Organization;
43 import org.apache.maven.api.model.PatternSet;
44 import org.apache.maven.api.model.Parent;
45 import org.apache.maven.api.model.Scm;
46 import org.apache.maven.api.model.FileSet;
47 import org.apache.maven.api.model.Resource;
48 import org.apache.maven.api.model.RepositoryBase;
49 import org.apache.maven.api.model.Repository;
50 import org.apache.maven.api.model.DeploymentRepository;
51 import org.apache.maven.api.model.RepositoryPolicy;
52 import org.apache.maven.api.model.Site;
53 import org.apache.maven.api.model.ConfigurationContainer;
54 import org.apache.maven.api.model.Plugin;
55 import org.apache.maven.api.model.PluginExecution;
56 import org.apache.maven.api.model.DependencyManagement;
57 import org.apache.maven.api.model.PluginManagement;
58 import org.apache.maven.api.model.Reporting;
59 import org.apache.maven.api.model.Profile;
60 import org.apache.maven.api.model.Activation;
61 import org.apache.maven.api.model.ActivationProperty;
62 import org.apache.maven.api.model.ActivationOS;
63 import org.apache.maven.api.model.ActivationFile;
64 import org.apache.maven.api.model.ReportPlugin;
65 import org.apache.maven.api.model.ReportSet;
66 import org.apache.maven.api.model.Prerequisites;
67 import org.apache.maven.api.model.Relocation;
68 import org.apache.maven.api.model.Extension;
69 import org.apache.maven.api.model.InputSource;
70 import org.codehaus.plexus.util.ReaderFactory;
71 import org.codehaus.plexus.util.xml.pull.EntityReplacementMap;
72 import org.codehaus.plexus.util.xml.pull.MXParser;
73 import org.codehaus.plexus.util.xml.pull.MXSerializer;
74 import org.codehaus.plexus.util.xml.pull.XmlPullParser;
75 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
76 import org.codehaus.plexus.util.xml.pull.XmlSerializer;
77
78 @Generated
79 public class MavenXpp3WriterEx {
80
81
82
83
84
85
86
87
88 private static final String NAMESPACE = null;
89
90
91
92
93 private String fileComment = null;
94
95
96
97
98 protected InputLocation.StringFormatter stringFormatter;
99
100
101
102
103
104
105
106
107
108
109 public void setFileComment(String fileComment) {
110 this.fileComment = fileComment;
111 }
112
113
114
115
116
117
118 public void setStringFormatter(InputLocation.StringFormatter stringFormatter) {
119 this.stringFormatter = stringFormatter;
120 }
121
122
123
124
125
126
127
128
129 public void write(Writer writer, Model model) throws java.io.IOException {
130 XmlSerializer serializer = new MXSerializer();
131 serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " ");
132 serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");
133 serializer.setOutput(writer);
134 serializer.startDocument(model.getModelEncoding(), null);
135 writeModel("project", model, serializer);
136 serializer.endDocument();
137 }
138
139
140
141
142
143
144
145
146 public void write(OutputStream stream, Model model) throws java.io.IOException {
147 XmlSerializer serializer = new MXSerializer();
148 serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " ");
149 serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");
150 serializer.setOutput(stream, model.getModelEncoding());
151 serializer.startDocument(model.getModelEncoding(), null);
152 writeModel("project", model, serializer);
153 serializer.endDocument();
154 }
155
156
157
158
159
160
161
162
163 protected void writeDomToSerializer(org.apache.maven.api.xml.XmlNode dom, XmlSerializer serializer) throws java.io.IOException {
164 serializer.startTag(NAMESPACE, dom.getName());
165 for (Map.Entry<String, String> attribute : dom.getAttributes().entrySet()) {
166 serializer.attribute(NAMESPACE, attribute.getKey(), attribute.getValue());
167 }
168 for (XmlNode aChild : dom.getChildren()) {
169 writeDomToSerializer(aChild, serializer);
170 }
171 String value = dom.getValue();
172 if (value != null) {
173 serializer.text(value);
174 }
175 serializer.endTag(NAMESPACE, dom.getName());
176
177 }
178
179
180 private void writeModel(String tagName, Model model, XmlSerializer serializer)
181 throws IOException {
182 if (model != null) {
183 if (this.fileComment != null) {
184 serializer.comment(this.fileComment);
185 }
186 serializer.setPrefix("", "http://maven.apache.org/POM/4.0.0");
187 serializer.setPrefix("xsi", "http://www.w3.org/2001/XMLSchema-instance");
188 serializer.startTag(NAMESPACE, tagName);
189 serializer.attribute("", "xsi:schemaLocation", "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd");
190 writeAttr("child.project.url.inherit.append.path", model.getChildProjectUrlInheritAppendPath(), serializer);
191 writeAttr("root", model.isRoot() ? "true" : null, serializer);
192 writeTag("modelVersion", null, model.getModelVersion(), serializer, model);
193 writeParent("parent", model.getParent(), serializer);
194 writeTag("groupId", null, model.getGroupId(), serializer, model);
195 writeTag("artifactId", null, model.getArtifactId(), serializer, model);
196 writeTag("version", null, model.getVersion(), serializer, model);
197 writeTag("packaging", "jar", model.getPackaging(), serializer, model);
198 writeTag("name", null, model.getName(), serializer, model);
199 writeTag("description", null, model.getDescription(), serializer, model);
200 writeTag("url", null, model.getUrl(), serializer, model);
201 writeTag("inceptionYear", null, model.getInceptionYear(), serializer, model);
202 writeOrganization("organization", model.getOrganization(), serializer);
203 writeList("licenses", false, model.getLicenses(), serializer, model,
204 t -> writeLicense("license", t, serializer));
205 writeList("developers", false, model.getDevelopers(), serializer, model,
206 t -> writeDeveloper("developer", t, serializer));
207 writeList("contributors", false, model.getContributors(), serializer, model,
208 t -> writeContributor("contributor", t, serializer));
209 writeList("mailingLists", false, model.getMailingLists(), serializer, model,
210 t -> writeMailingList("mailingList", t, serializer));
211 writePrerequisites("prerequisites", model.getPrerequisites(), serializer);
212 writeList("modules", model.getModules(), serializer, model,
213 t -> writeTag("module", null, t, serializer, null));
214 writeScm("scm", model.getScm(), serializer);
215 writeIssueManagement("issueManagement", model.getIssueManagement(), serializer);
216 writeCiManagement("ciManagement", model.getCiManagement(), serializer);
217 writeDistributionManagement("distributionManagement", model.getDistributionManagement(), serializer);
218 writeProperties("properties", model.getProperties(), serializer, model);
219 writeDependencyManagement("dependencyManagement", model.getDependencyManagement(), serializer);
220 writeList("dependencies", false, model.getDependencies(), serializer, model,
221 t -> writeDependency("dependency", t, serializer));
222 writeList("repositories", false, model.getRepositories(), serializer, model,
223 t -> writeRepository("repository", t, serializer));
224 writeList("pluginRepositories", false, model.getPluginRepositories(), serializer, model,
225 t -> writeRepository("pluginRepository", t, serializer));
226 writeBuild("build", model.getBuild(), serializer);
227 writeReporting("reporting", model.getReporting(), serializer);
228 writeList("profiles", false, model.getProfiles(), serializer, model,
229 t -> writeProfile("profile", t, serializer));
230 serializer.endTag(NAMESPACE, tagName);
231 writeLocationTracking(model, "", serializer);
232 }
233 }
234
235 private void writeModelBase(String tagName, ModelBase modelBase, XmlSerializer serializer)
236 throws IOException {
237 if (modelBase != null) {
238 serializer.startTag(NAMESPACE, tagName);
239 writeList("modules", modelBase.getModules(), serializer, modelBase,
240 t -> writeTag("module", null, t, serializer, null));
241 writeDistributionManagement("distributionManagement", modelBase.getDistributionManagement(), serializer);
242 writeProperties("properties", modelBase.getProperties(), serializer, modelBase);
243 writeDependencyManagement("dependencyManagement", modelBase.getDependencyManagement(), serializer);
244 writeList("dependencies", false, modelBase.getDependencies(), serializer, modelBase,
245 t -> writeDependency("dependency", t, serializer));
246 writeList("repositories", false, modelBase.getRepositories(), serializer, modelBase,
247 t -> writeRepository("repository", t, serializer));
248 writeList("pluginRepositories", false, modelBase.getPluginRepositories(), serializer, modelBase,
249 t -> writeRepository("pluginRepository", t, serializer));
250 writeReporting("reporting", modelBase.getReporting(), serializer);
251 serializer.endTag(NAMESPACE, tagName);
252 writeLocationTracking(modelBase, "", serializer);
253 }
254 }
255
256 private void writePluginContainer(String tagName, PluginContainer pluginContainer, XmlSerializer serializer)
257 throws IOException {
258 if (pluginContainer != null) {
259 serializer.startTag(NAMESPACE, tagName);
260 writeList("plugins", false, pluginContainer.getPlugins(), serializer, pluginContainer,
261 t -> writePlugin("plugin", t, serializer));
262 serializer.endTag(NAMESPACE, tagName);
263 writeLocationTracking(pluginContainer, "", serializer);
264 }
265 }
266
267 private void writePluginConfiguration(String tagName, PluginConfiguration pluginConfiguration, XmlSerializer serializer)
268 throws IOException {
269 if (pluginConfiguration != null) {
270 serializer.startTag(NAMESPACE, tagName);
271 writePluginManagement("pluginManagement", pluginConfiguration.getPluginManagement(), serializer);
272 writeList("plugins", false, pluginConfiguration.getPlugins(), serializer, pluginConfiguration,
273 t -> writePlugin("plugin", t, serializer));
274 serializer.endTag(NAMESPACE, tagName);
275 writeLocationTracking(pluginConfiguration, "", serializer);
276 }
277 }
278
279 private void writeBuildBase(String tagName, BuildBase buildBase, XmlSerializer serializer)
280 throws IOException {
281 if (buildBase != null) {
282 serializer.startTag(NAMESPACE, tagName);
283 writeTag("defaultGoal", null, buildBase.getDefaultGoal(), serializer, buildBase);
284 writeList("resources", false, buildBase.getResources(), serializer, buildBase,
285 t -> writeResource("resource", t, serializer));
286 writeList("testResources", false, buildBase.getTestResources(), serializer, buildBase,
287 t -> writeResource("testResource", t, serializer));
288 writeTag("directory", null, buildBase.getDirectory(), serializer, buildBase);
289 writeTag("finalName", null, buildBase.getFinalName(), serializer, buildBase);
290 writeList("filters", buildBase.getFilters(), serializer, buildBase,
291 t -> writeTag("filter", null, t, serializer, null));
292 writePluginManagement("pluginManagement", buildBase.getPluginManagement(), serializer);
293 writeList("plugins", false, buildBase.getPlugins(), serializer, buildBase,
294 t -> writePlugin("plugin", t, serializer));
295 serializer.endTag(NAMESPACE, tagName);
296 writeLocationTracking(buildBase, "", serializer);
297 }
298 }
299
300 private void writeBuild(String tagName, Build build, XmlSerializer serializer)
301 throws IOException {
302 if (build != null) {
303 serializer.startTag(NAMESPACE, tagName);
304 writeTag("sourceDirectory", null, build.getSourceDirectory(), serializer, build);
305 writeTag("scriptSourceDirectory", null, build.getScriptSourceDirectory(), serializer, build);
306 writeTag("testSourceDirectory", null, build.getTestSourceDirectory(), serializer, build);
307 writeTag("outputDirectory", null, build.getOutputDirectory(), serializer, build);
308 writeTag("testOutputDirectory", null, build.getTestOutputDirectory(), serializer, build);
309 writeList("extensions", false, build.getExtensions(), serializer, build,
310 t -> writeExtension("extension", t, serializer));
311 writeTag("defaultGoal", null, build.getDefaultGoal(), serializer, build);
312 writeList("resources", false, build.getResources(), serializer, build,
313 t -> writeResource("resource", t, serializer));
314 writeList("testResources", false, build.getTestResources(), serializer, build,
315 t -> writeResource("testResource", t, serializer));
316 writeTag("directory", null, build.getDirectory(), serializer, build);
317 writeTag("finalName", null, build.getFinalName(), serializer, build);
318 writeList("filters", build.getFilters(), serializer, build,
319 t -> writeTag("filter", null, t, serializer, null));
320 writePluginManagement("pluginManagement", build.getPluginManagement(), serializer);
321 writeList("plugins", false, build.getPlugins(), serializer, build,
322 t -> writePlugin("plugin", t, serializer));
323 serializer.endTag(NAMESPACE, tagName);
324 writeLocationTracking(build, "", serializer);
325 }
326 }
327
328 private void writeCiManagement(String tagName, CiManagement ciManagement, XmlSerializer serializer)
329 throws IOException {
330 if (ciManagement != null) {
331 serializer.startTag(NAMESPACE, tagName);
332 writeTag("system", null, ciManagement.getSystem(), serializer, ciManagement);
333 writeTag("url", null, ciManagement.getUrl(), serializer, ciManagement);
334 writeList("notifiers", false, ciManagement.getNotifiers(), serializer, ciManagement,
335 t -> writeNotifier("notifier", t, serializer));
336 serializer.endTag(NAMESPACE, tagName);
337 writeLocationTracking(ciManagement, "", serializer);
338 }
339 }
340
341 private void writeNotifier(String tagName, Notifier notifier, XmlSerializer serializer)
342 throws IOException {
343 if (notifier != null) {
344 serializer.startTag(NAMESPACE, tagName);
345 writeTag("type", "mail", notifier.getType(), serializer, notifier);
346 writeTag("sendOnError", "true", notifier.isSendOnError() ? null : "false", serializer, notifier);
347 writeTag("sendOnFailure", "true", notifier.isSendOnFailure() ? null : "false", serializer, notifier);
348 writeTag("sendOnSuccess", "true", notifier.isSendOnSuccess() ? null : "false", serializer, notifier);
349 writeTag("sendOnWarning", "true", notifier.isSendOnWarning() ? null : "false", serializer, notifier);
350 writeTag("address", null, notifier.getAddress(), serializer, notifier);
351 writeProperties("configuration", notifier.getConfiguration(), serializer, notifier);
352 serializer.endTag(NAMESPACE, tagName);
353 writeLocationTracking(notifier, "", serializer);
354 }
355 }
356
357 private void writeContributor(String tagName, Contributor contributor, XmlSerializer serializer)
358 throws IOException {
359 if (contributor != null) {
360 serializer.startTag(NAMESPACE, tagName);
361 writeTag("name", null, contributor.getName(), serializer, contributor);
362 writeTag("email", null, contributor.getEmail(), serializer, contributor);
363 writeTag("url", null, contributor.getUrl(), serializer, contributor);
364 writeTag("organization", null, contributor.getOrganization(), serializer, contributor);
365 writeTag("organizationUrl", null, contributor.getOrganizationUrl(), serializer, contributor);
366 writeList("roles", contributor.getRoles(), serializer, contributor,
367 t -> writeTag("role", null, t, serializer, null));
368 writeTag("timezone", null, contributor.getTimezone(), serializer, contributor);
369 writeProperties("properties", contributor.getProperties(), serializer, contributor);
370 serializer.endTag(NAMESPACE, tagName);
371 writeLocationTracking(contributor, "", serializer);
372 }
373 }
374
375 private void writeDependency(String tagName, Dependency dependency, XmlSerializer serializer)
376 throws IOException {
377 if (dependency != null) {
378 serializer.startTag(NAMESPACE, tagName);
379 writeTag("groupId", null, dependency.getGroupId(), serializer, dependency);
380 writeTag("artifactId", null, dependency.getArtifactId(), serializer, dependency);
381 writeTag("version", null, dependency.getVersion(), serializer, dependency);
382 writeTag("type", "jar", dependency.getType(), serializer, dependency);
383 writeTag("classifier", null, dependency.getClassifier(), serializer, dependency);
384 writeTag("scope", null, dependency.getScope(), serializer, dependency);
385 writeTag("systemPath", null, dependency.getSystemPath(), serializer, dependency);
386 writeList("exclusions", false, dependency.getExclusions(), serializer, dependency,
387 t -> writeExclusion("exclusion", t, serializer));
388 writeTag("optional", null, dependency.getOptional(), serializer, dependency);
389 serializer.endTag(NAMESPACE, tagName);
390 writeLocationTracking(dependency, "", serializer);
391 }
392 }
393
394 private void writeDeveloper(String tagName, Developer developer, XmlSerializer serializer)
395 throws IOException {
396 if (developer != null) {
397 serializer.startTag(NAMESPACE, tagName);
398 writeTag("id", null, developer.getId(), serializer, developer);
399 writeTag("name", null, developer.getName(), serializer, developer);
400 writeTag("email", null, developer.getEmail(), serializer, developer);
401 writeTag("url", null, developer.getUrl(), serializer, developer);
402 writeTag("organization", null, developer.getOrganization(), serializer, developer);
403 writeTag("organizationUrl", null, developer.getOrganizationUrl(), serializer, developer);
404 writeList("roles", developer.getRoles(), serializer, developer,
405 t -> writeTag("role", null, t, serializer, null));
406 writeTag("timezone", null, developer.getTimezone(), serializer, developer);
407 writeProperties("properties", developer.getProperties(), serializer, developer);
408 serializer.endTag(NAMESPACE, tagName);
409 writeLocationTracking(developer, "", serializer);
410 }
411 }
412
413 private void writeExclusion(String tagName, Exclusion exclusion, XmlSerializer serializer)
414 throws IOException {
415 if (exclusion != null) {
416 serializer.startTag(NAMESPACE, tagName);
417 writeTag("groupId", null, exclusion.getGroupId(), serializer, exclusion);
418 writeTag("artifactId", null, exclusion.getArtifactId(), serializer, exclusion);
419 serializer.endTag(NAMESPACE, tagName);
420 writeLocationTracking(exclusion, "", serializer);
421 }
422 }
423
424 private void writeIssueManagement(String tagName, IssueManagement issueManagement, XmlSerializer serializer)
425 throws IOException {
426 if (issueManagement != null) {
427 serializer.startTag(NAMESPACE, tagName);
428 writeTag("system", null, issueManagement.getSystem(), serializer, issueManagement);
429 writeTag("url", null, issueManagement.getUrl(), serializer, issueManagement);
430 serializer.endTag(NAMESPACE, tagName);
431 writeLocationTracking(issueManagement, "", serializer);
432 }
433 }
434
435 private void writeDistributionManagement(String tagName, DistributionManagement distributionManagement, XmlSerializer serializer)
436 throws IOException {
437 if (distributionManagement != null) {
438 serializer.startTag(NAMESPACE, tagName);
439 writeDeploymentRepository("repository", distributionManagement.getRepository(), serializer);
440 writeDeploymentRepository("snapshotRepository", distributionManagement.getSnapshotRepository(), serializer);
441 writeSite("site", distributionManagement.getSite(), serializer);
442 writeTag("downloadUrl", null, distributionManagement.getDownloadUrl(), serializer, distributionManagement);
443 writeRelocation("relocation", distributionManagement.getRelocation(), serializer);
444 writeTag("status", null, distributionManagement.getStatus(), serializer, distributionManagement);
445 serializer.endTag(NAMESPACE, tagName);
446 writeLocationTracking(distributionManagement, "", serializer);
447 }
448 }
449
450 private void writeLicense(String tagName, License license, XmlSerializer serializer)
451 throws IOException {
452 if (license != null) {
453 serializer.startTag(NAMESPACE, tagName);
454 writeTag("name", null, license.getName(), serializer, license);
455 writeTag("url", null, license.getUrl(), serializer, license);
456 writeTag("distribution", null, license.getDistribution(), serializer, license);
457 writeTag("comments", null, license.getComments(), serializer, license);
458 serializer.endTag(NAMESPACE, tagName);
459 writeLocationTracking(license, "", serializer);
460 }
461 }
462
463 private void writeMailingList(String tagName, MailingList mailingList, XmlSerializer serializer)
464 throws IOException {
465 if (mailingList != null) {
466 serializer.startTag(NAMESPACE, tagName);
467 writeTag("name", null, mailingList.getName(), serializer, mailingList);
468 writeTag("subscribe", null, mailingList.getSubscribe(), serializer, mailingList);
469 writeTag("unsubscribe", null, mailingList.getUnsubscribe(), serializer, mailingList);
470 writeTag("post", null, mailingList.getPost(), serializer, mailingList);
471 writeTag("archive", null, mailingList.getArchive(), serializer, mailingList);
472 writeList("otherArchives", mailingList.getOtherArchives(), serializer, mailingList,
473 t -> writeTag("otherArchive", null, t, serializer, null));
474 serializer.endTag(NAMESPACE, tagName);
475 writeLocationTracking(mailingList, "", serializer);
476 }
477 }
478
479 private void writeOrganization(String tagName, Organization organization, XmlSerializer serializer)
480 throws IOException {
481 if (organization != null) {
482 serializer.startTag(NAMESPACE, tagName);
483 writeTag("name", null, organization.getName(), serializer, organization);
484 writeTag("url", null, organization.getUrl(), serializer, organization);
485 serializer.endTag(NAMESPACE, tagName);
486 writeLocationTracking(organization, "", serializer);
487 }
488 }
489
490 private void writePatternSet(String tagName, PatternSet patternSet, XmlSerializer serializer)
491 throws IOException {
492 if (patternSet != null) {
493 serializer.startTag(NAMESPACE, tagName);
494 writeList("includes", patternSet.getIncludes(), serializer, patternSet,
495 t -> writeTag("include", null, t, serializer, null));
496 writeList("excludes", patternSet.getExcludes(), serializer, patternSet,
497 t -> writeTag("exclude", null, t, serializer, null));
498 serializer.endTag(NAMESPACE, tagName);
499 writeLocationTracking(patternSet, "", serializer);
500 }
501 }
502
503 private void writeParent(String tagName, Parent parent, XmlSerializer serializer)
504 throws IOException {
505 if (parent != null) {
506 serializer.startTag(NAMESPACE, tagName);
507 writeTag("groupId", null, parent.getGroupId(), serializer, parent);
508 writeTag("artifactId", null, parent.getArtifactId(), serializer, parent);
509 writeTag("version", null, parent.getVersion(), serializer, parent);
510 writeTag("relativePath", "../pom.xml", parent.getRelativePath(), serializer, parent);
511 serializer.endTag(NAMESPACE, tagName);
512 writeLocationTracking(parent, "", serializer);
513 }
514 }
515
516 private void writeScm(String tagName, Scm scm, XmlSerializer serializer)
517 throws IOException {
518 if (scm != null) {
519 serializer.startTag(NAMESPACE, tagName);
520 writeAttr("child.scm.connection.inherit.append.path", scm.getChildScmConnectionInheritAppendPath(), serializer);
521 writeAttr("child.scm.developerConnection.inherit.append.path", scm.getChildScmDeveloperConnectionInheritAppendPath(), serializer);
522 writeAttr("child.scm.url.inherit.append.path", scm.getChildScmUrlInheritAppendPath(), serializer);
523 writeTag("connection", null, scm.getConnection(), serializer, scm);
524 writeTag("developerConnection", null, scm.getDeveloperConnection(), serializer, scm);
525 writeTag("tag", "HEAD", scm.getTag(), serializer, scm);
526 writeTag("url", null, scm.getUrl(), serializer, scm);
527 serializer.endTag(NAMESPACE, tagName);
528 writeLocationTracking(scm, "", serializer);
529 }
530 }
531
532 private void writeFileSet(String tagName, FileSet fileSet, XmlSerializer serializer)
533 throws IOException {
534 if (fileSet != null) {
535 serializer.startTag(NAMESPACE, tagName);
536 writeTag("directory", null, fileSet.getDirectory(), serializer, fileSet);
537 writeList("includes", fileSet.getIncludes(), serializer, fileSet,
538 t -> writeTag("include", null, t, serializer, null));
539 writeList("excludes", fileSet.getExcludes(), serializer, fileSet,
540 t -> writeTag("exclude", null, t, serializer, null));
541 serializer.endTag(NAMESPACE, tagName);
542 writeLocationTracking(fileSet, "", serializer);
543 }
544 }
545
546 private void writeResource(String tagName, Resource resource, XmlSerializer serializer)
547 throws IOException {
548 if (resource != null) {
549 serializer.startTag(NAMESPACE, tagName);
550 writeTag("targetPath", null, resource.getTargetPath(), serializer, resource);
551 writeTag("filtering", null, resource.getFiltering(), serializer, resource);
552 writeTag("directory", null, resource.getDirectory(), serializer, resource);
553 writeList("includes", resource.getIncludes(), serializer, resource,
554 t -> writeTag("include", null, t, serializer, null));
555 writeList("excludes", resource.getExcludes(), serializer, resource,
556 t -> writeTag("exclude", null, t, serializer, null));
557 serializer.endTag(NAMESPACE, tagName);
558 writeLocationTracking(resource, "", serializer);
559 }
560 }
561
562 private void writeRepositoryBase(String tagName, RepositoryBase repositoryBase, XmlSerializer serializer)
563 throws IOException {
564 if (repositoryBase != null) {
565 serializer.startTag(NAMESPACE, tagName);
566 writeTag("id", null, repositoryBase.getId(), serializer, repositoryBase);
567 writeTag("name", null, repositoryBase.getName(), serializer, repositoryBase);
568 writeTag("url", null, repositoryBase.getUrl(), serializer, repositoryBase);
569 writeTag("layout", "default", repositoryBase.getLayout(), serializer, repositoryBase);
570 serializer.endTag(NAMESPACE, tagName);
571 writeLocationTracking(repositoryBase, "", serializer);
572 }
573 }
574
575 private void writeRepository(String tagName, Repository repository, XmlSerializer serializer)
576 throws IOException {
577 if (repository != null) {
578 serializer.startTag(NAMESPACE, tagName);
579 writeRepositoryPolicy("releases", repository.getReleases(), serializer);
580 writeRepositoryPolicy("snapshots", repository.getSnapshots(), serializer);
581 writeTag("id", null, repository.getId(), serializer, repository);
582 writeTag("name", null, repository.getName(), serializer, repository);
583 writeTag("url", null, repository.getUrl(), serializer, repository);
584 writeTag("layout", "default", repository.getLayout(), serializer, repository);
585 serializer.endTag(NAMESPACE, tagName);
586 writeLocationTracking(repository, "", serializer);
587 }
588 }
589
590 private void writeDeploymentRepository(String tagName, DeploymentRepository deploymentRepository, XmlSerializer serializer)
591 throws IOException {
592 if (deploymentRepository != null) {
593 serializer.startTag(NAMESPACE, tagName);
594 writeTag("uniqueVersion", "true", deploymentRepository.isUniqueVersion() ? null : "false", serializer, deploymentRepository);
595 writeRepositoryPolicy("releases", deploymentRepository.getReleases(), serializer);
596 writeRepositoryPolicy("snapshots", deploymentRepository.getSnapshots(), serializer);
597 writeTag("id", null, deploymentRepository.getId(), serializer, deploymentRepository);
598 writeTag("name", null, deploymentRepository.getName(), serializer, deploymentRepository);
599 writeTag("url", null, deploymentRepository.getUrl(), serializer, deploymentRepository);
600 writeTag("layout", "default", deploymentRepository.getLayout(), serializer, deploymentRepository);
601 serializer.endTag(NAMESPACE, tagName);
602 writeLocationTracking(deploymentRepository, "", serializer);
603 }
604 }
605
606 private void writeRepositoryPolicy(String tagName, RepositoryPolicy repositoryPolicy, XmlSerializer serializer)
607 throws IOException {
608 if (repositoryPolicy != null) {
609 serializer.startTag(NAMESPACE, tagName);
610 writeTag("enabled", null, repositoryPolicy.getEnabled(), serializer, repositoryPolicy);
611 writeTag("updatePolicy", null, repositoryPolicy.getUpdatePolicy(), serializer, repositoryPolicy);
612 writeTag("checksumPolicy", null, repositoryPolicy.getChecksumPolicy(), serializer, repositoryPolicy);
613 serializer.endTag(NAMESPACE, tagName);
614 writeLocationTracking(repositoryPolicy, "", serializer);
615 }
616 }
617
618 private void writeSite(String tagName, Site site, XmlSerializer serializer)
619 throws IOException {
620 if (site != null) {
621 serializer.startTag(NAMESPACE, tagName);
622 writeAttr("child.site.url.inherit.append.path", site.getChildSiteUrlInheritAppendPath(), serializer);
623 writeTag("id", null, site.getId(), serializer, site);
624 writeTag("name", null, site.getName(), serializer, site);
625 writeTag("url", null, site.getUrl(), serializer, site);
626 serializer.endTag(NAMESPACE, tagName);
627 writeLocationTracking(site, "", serializer);
628 }
629 }
630
631 private void writeConfigurationContainer(String tagName, ConfigurationContainer configurationContainer, XmlSerializer serializer)
632 throws IOException {
633 if (configurationContainer != null) {
634 serializer.startTag(NAMESPACE, tagName);
635 writeTag("inherited", null, configurationContainer.getInherited(), serializer, configurationContainer);
636 writeDom(configurationContainer.getConfiguration(), serializer);
637 serializer.endTag(NAMESPACE, tagName);
638 writeLocationTracking(configurationContainer, "", serializer);
639 }
640 }
641
642 private void writePlugin(String tagName, Plugin plugin, XmlSerializer serializer)
643 throws IOException {
644 if (plugin != null) {
645 serializer.startTag(NAMESPACE, tagName);
646 writeTag("groupId", "org.apache.maven.plugins", plugin.getGroupId(), serializer, plugin);
647 writeTag("artifactId", null, plugin.getArtifactId(), serializer, plugin);
648 writeTag("version", null, plugin.getVersion(), serializer, plugin);
649 writeTag("extensions", null, plugin.getExtensions(), serializer, plugin);
650 writeList("executions", false, plugin.getExecutions(), serializer, plugin,
651 t -> writePluginExecution("execution", t, serializer));
652 writeList("dependencies", false, plugin.getDependencies(), serializer, plugin,
653 t -> writeDependency("dependency", t, serializer));
654 writeTag("inherited", null, plugin.getInherited(), serializer, plugin);
655 writeDom(plugin.getConfiguration(), serializer);
656 serializer.endTag(NAMESPACE, tagName);
657 writeLocationTracking(plugin, "", serializer);
658 }
659 }
660
661 private void writePluginExecution(String tagName, PluginExecution pluginExecution, XmlSerializer serializer)
662 throws IOException {
663 if (pluginExecution != null) {
664 serializer.startTag(NAMESPACE, tagName);
665 writeTag("id", "default", pluginExecution.getId(), serializer, pluginExecution);
666 writeTag("phase", null, pluginExecution.getPhase(), serializer, pluginExecution);
667 writeList("goals", pluginExecution.getGoals(), serializer, pluginExecution,
668 t -> writeTag("goal", null, t, serializer, null));
669 writeTag("inherited", null, pluginExecution.getInherited(), serializer, pluginExecution);
670 writeDom(pluginExecution.getConfiguration(), serializer);
671 serializer.endTag(NAMESPACE, tagName);
672 writeLocationTracking(pluginExecution, "", serializer);
673 }
674 }
675
676 private void writeDependencyManagement(String tagName, DependencyManagement dependencyManagement, XmlSerializer serializer)
677 throws IOException {
678 if (dependencyManagement != null) {
679 serializer.startTag(NAMESPACE, tagName);
680 writeList("dependencies", false, dependencyManagement.getDependencies(), serializer, dependencyManagement,
681 t -> writeDependency("dependency", t, serializer));
682 serializer.endTag(NAMESPACE, tagName);
683 writeLocationTracking(dependencyManagement, "", serializer);
684 }
685 }
686
687 private void writePluginManagement(String tagName, PluginManagement pluginManagement, XmlSerializer serializer)
688 throws IOException {
689 if (pluginManagement != null) {
690 serializer.startTag(NAMESPACE, tagName);
691 writeList("plugins", false, pluginManagement.getPlugins(), serializer, pluginManagement,
692 t -> writePlugin("plugin", t, serializer));
693 serializer.endTag(NAMESPACE, tagName);
694 writeLocationTracking(pluginManagement, "", serializer);
695 }
696 }
697
698 private void writeReporting(String tagName, Reporting reporting, XmlSerializer serializer)
699 throws IOException {
700 if (reporting != null) {
701 serializer.startTag(NAMESPACE, tagName);
702 writeTag("excludeDefaults", null, reporting.getExcludeDefaults(), serializer, reporting);
703 writeTag("outputDirectory", null, reporting.getOutputDirectory(), serializer, reporting);
704 writeList("plugins", false, reporting.getPlugins(), serializer, reporting,
705 t -> writeReportPlugin("plugin", t, serializer));
706 serializer.endTag(NAMESPACE, tagName);
707 writeLocationTracking(reporting, "", serializer);
708 }
709 }
710
711 private void writeProfile(String tagName, Profile profile, XmlSerializer serializer)
712 throws IOException {
713 if (profile != null) {
714 serializer.startTag(NAMESPACE, tagName);
715 writeTag("id", "default", profile.getId(), serializer, profile);
716 writeActivation("activation", profile.getActivation(), serializer);
717 writeBuildBase("build", profile.getBuild(), serializer);
718 writeList("modules", profile.getModules(), serializer, profile,
719 t -> writeTag("module", null, t, serializer, null));
720 writeDistributionManagement("distributionManagement", profile.getDistributionManagement(), serializer);
721 writeProperties("properties", profile.getProperties(), serializer, profile);
722 writeDependencyManagement("dependencyManagement", profile.getDependencyManagement(), serializer);
723 writeList("dependencies", false, profile.getDependencies(), serializer, profile,
724 t -> writeDependency("dependency", t, serializer));
725 writeList("repositories", false, profile.getRepositories(), serializer, profile,
726 t -> writeRepository("repository", t, serializer));
727 writeList("pluginRepositories", false, profile.getPluginRepositories(), serializer, profile,
728 t -> writeRepository("pluginRepository", t, serializer));
729 writeReporting("reporting", profile.getReporting(), serializer);
730 serializer.endTag(NAMESPACE, tagName);
731 writeLocationTracking(profile, "", serializer);
732 }
733 }
734
735 private void writeActivation(String tagName, Activation activation, XmlSerializer serializer)
736 throws IOException {
737 if (activation != null) {
738 serializer.startTag(NAMESPACE, tagName);
739 writeTag("activeByDefault", "false", activation.isActiveByDefault() ? "true" : null, serializer, activation);
740 writeTag("jdk", null, activation.getJdk(), serializer, activation);
741 writeActivationOS("os", activation.getOs(), serializer);
742 writeActivationProperty("property", activation.getProperty(), serializer);
743 writeActivationFile("file", activation.getFile(), serializer);
744 serializer.endTag(NAMESPACE, tagName);
745 writeLocationTracking(activation, "", serializer);
746 }
747 }
748
749 private void writeActivationProperty(String tagName, ActivationProperty activationProperty, XmlSerializer serializer)
750 throws IOException {
751 if (activationProperty != null) {
752 serializer.startTag(NAMESPACE, tagName);
753 writeTag("name", null, activationProperty.getName(), serializer, activationProperty);
754 writeTag("value", null, activationProperty.getValue(), serializer, activationProperty);
755 serializer.endTag(NAMESPACE, tagName);
756 writeLocationTracking(activationProperty, "", serializer);
757 }
758 }
759
760 private void writeActivationOS(String tagName, ActivationOS activationOS, XmlSerializer serializer)
761 throws IOException {
762 if (activationOS != null) {
763 serializer.startTag(NAMESPACE, tagName);
764 writeTag("name", null, activationOS.getName(), serializer, activationOS);
765 writeTag("family", null, activationOS.getFamily(), serializer, activationOS);
766 writeTag("arch", null, activationOS.getArch(), serializer, activationOS);
767 writeTag("version", null, activationOS.getVersion(), serializer, activationOS);
768 serializer.endTag(NAMESPACE, tagName);
769 writeLocationTracking(activationOS, "", serializer);
770 }
771 }
772
773 private void writeActivationFile(String tagName, ActivationFile activationFile, XmlSerializer serializer)
774 throws IOException {
775 if (activationFile != null) {
776 serializer.startTag(NAMESPACE, tagName);
777 writeTag("missing", null, activationFile.getMissing(), serializer, activationFile);
778 writeTag("exists", null, activationFile.getExists(), serializer, activationFile);
779 serializer.endTag(NAMESPACE, tagName);
780 writeLocationTracking(activationFile, "", serializer);
781 }
782 }
783
784 private void writeReportPlugin(String tagName, ReportPlugin reportPlugin, XmlSerializer serializer)
785 throws IOException {
786 if (reportPlugin != null) {
787 serializer.startTag(NAMESPACE, tagName);
788 writeTag("groupId", "org.apache.maven.plugins", reportPlugin.getGroupId(), serializer, reportPlugin);
789 writeTag("artifactId", null, reportPlugin.getArtifactId(), serializer, reportPlugin);
790 writeTag("version", null, reportPlugin.getVersion(), serializer, reportPlugin);
791 writeList("reportSets", false, reportPlugin.getReportSets(), serializer, reportPlugin,
792 t -> writeReportSet("reportSet", t, serializer));
793 writeTag("inherited", null, reportPlugin.getInherited(), serializer, reportPlugin);
794 writeDom(reportPlugin.getConfiguration(), serializer);
795 serializer.endTag(NAMESPACE, tagName);
796 writeLocationTracking(reportPlugin, "", serializer);
797 }
798 }
799
800 private void writeReportSet(String tagName, ReportSet reportSet, XmlSerializer serializer)
801 throws IOException {
802 if (reportSet != null) {
803 serializer.startTag(NAMESPACE, tagName);
804 writeTag("id", "default", reportSet.getId(), serializer, reportSet);
805 writeList("reports", reportSet.getReports(), serializer, reportSet,
806 t -> writeTag("report", null, t, serializer, null));
807 writeTag("inherited", null, reportSet.getInherited(), serializer, reportSet);
808 writeDom(reportSet.getConfiguration(), serializer);
809 serializer.endTag(NAMESPACE, tagName);
810 writeLocationTracking(reportSet, "", serializer);
811 }
812 }
813
814 private void writePrerequisites(String tagName, Prerequisites prerequisites, XmlSerializer serializer)
815 throws IOException {
816 if (prerequisites != null) {
817 serializer.startTag(NAMESPACE, tagName);
818 writeTag("maven", "2.0", prerequisites.getMaven(), serializer, prerequisites);
819 serializer.endTag(NAMESPACE, tagName);
820 writeLocationTracking(prerequisites, "", serializer);
821 }
822 }
823
824 private void writeRelocation(String tagName, Relocation relocation, XmlSerializer serializer)
825 throws IOException {
826 if (relocation != null) {
827 serializer.startTag(NAMESPACE, tagName);
828 writeTag("groupId", null, relocation.getGroupId(), serializer, relocation);
829 writeTag("artifactId", null, relocation.getArtifactId(), serializer, relocation);
830 writeTag("version", null, relocation.getVersion(), serializer, relocation);
831 writeTag("message", null, relocation.getMessage(), serializer, relocation);
832 serializer.endTag(NAMESPACE, tagName);
833 writeLocationTracking(relocation, "", serializer);
834 }
835 }
836
837 private void writeExtension(String tagName, Extension extension, XmlSerializer serializer)
838 throws IOException {
839 if (extension != null) {
840 serializer.startTag(NAMESPACE, tagName);
841 writeTag("groupId", null, extension.getGroupId(), serializer, extension);
842 writeTag("artifactId", null, extension.getArtifactId(), serializer, extension);
843 writeTag("version", null, extension.getVersion(), serializer, extension);
844 serializer.endTag(NAMESPACE, tagName);
845 writeLocationTracking(extension, "", serializer);
846 }
847 }
848
849 @FunctionalInterface
850 private interface ElementWriter<T> {
851 public void write(T t) throws IOException;
852 }
853
854 private <T> void writeList(String tagName, List<T> list, XmlSerializer serializer, InputLocationTracker locationTracker, ElementWriter<T> writer) throws IOException {
855 writeList(tagName, false, list, serializer, locationTracker, writer);
856 }
857
858 private <T> void writeList(String tagName, boolean flat, List<T> list, XmlSerializer serializer, InputLocationTracker locationTracker, ElementWriter<T> writer) throws IOException {
859 if (list != null && !list.isEmpty()) {
860 if (!flat) {
861 serializer.startTag(NAMESPACE, tagName);
862 }
863 int index = 0;
864 InputLocation location = locationTracker != null ? locationTracker.getLocation(tagName) : null;
865 for (T t : list) {
866 writer.write(t);
867 writeLocationTracking(location, Integer.valueOf(index++), serializer);
868 }
869 if (!flat) {
870 serializer.endTag(NAMESPACE, tagName);
871 writeLocationTracking(locationTracker, tagName, serializer);
872 }
873 }
874 }
875
876 private <T> void writeProperties(String tagName, Map<String, String> props, XmlSerializer serializer, InputLocationTracker locationTracker) throws IOException {
877 if (props != null && !props.isEmpty()) {
878 serializer.startTag(NAMESPACE, tagName);
879 InputLocation location = locationTracker != null ? locationTracker.getLocation(tagName) : null;
880 for (Map.Entry<String, String> entry : props.entrySet()) {
881 String key = entry.getKey();
882 writeTag(key, null, entry.getValue(), serializer, null);
883 writeLocationTracking(location, key, serializer);
884 }
885 serializer.endTag(NAMESPACE, tagName);
886 writeLocationTracking(locationTracker, tagName, serializer);
887 }
888 }
889
890 private void writeDom(XmlNode dom, XmlSerializer serializer) throws IOException {
891 if (dom != null) {
892 serializer.startTag(NAMESPACE, dom.getName());
893 for (Map.Entry<String, String> attr : dom.getAttributes().entrySet()) {
894 serializer.attribute(NAMESPACE, attr.getKey(), attr.getValue());
895 }
896 for (XmlNode child : dom.getChildren()) {
897 writeDom(child, serializer);
898 }
899 String value = dom.getValue();
900 if (value != null) {
901 serializer.text(value);
902 }
903 serializer.endTag(NAMESPACE, dom.getName());
904 }
905 }
906
907 private void writeTag(String tagName, String defaultValue, String value, XmlSerializer serializer, InputLocationTracker locationTracker) throws IOException {
908 if (value != null && !Objects.equals(defaultValue, value)) {
909 serializer.startTag(NAMESPACE, tagName).text(value).endTag(NAMESPACE, tagName);
910 writeLocationTracking(locationTracker, tagName, serializer);
911 }
912 }
913
914 private void writeAttr(String attrName, String value, XmlSerializer serializer) throws IOException {
915 if (value != null) {
916 serializer.attribute(NAMESPACE, attrName, value);
917 }
918 }
919
920
921
922
923
924
925
926
927
928 protected void writeLocationTracking(InputLocationTracker locationTracker, Object key, XmlSerializer serializer) throws java.io.IOException {
929 InputLocation location = (locationTracker == null) ? null : locationTracker.getLocation(key);
930 if (location != null) {
931 serializer.comment(toString(location));
932 }
933 }
934
935
936
937
938
939
940
941 protected String toString(InputLocation location) {
942 if (stringFormatter != null) {
943 return stringFormatter.toString(location);
944 }
945 return ' ' + location.getSource().toString() + ':' + location.getLineNumber() + ' ';
946 }
947 }