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