View Javadoc
1   // =================== DO NOT EDIT THIS FILE ====================
2   //  Generated by Modello Velocity from writer-ex.vm
3   //  template, any modifications will be overwritten.
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       //- Class/Member Variables -/
83      //--------------------------/
84  
85      /**
86       * Field NAMESPACE.
87       */
88      private static final String NAMESPACE = null;
89  
90      /**
91       * Field fileComment.
92       */
93      private String fileComment = null;
94  
95      /**
96       * Field stringFormatter.
97       */
98      protected InputLocation.StringFormatter stringFormatter;
99  
100       //-----------/
101      //- Methods -/
102     //-----------/
103 
104     /**
105      * Method setFileComment.
106      *
107      * @param fileComment a fileComment object.
108      */
109     public void setFileComment(String fileComment) {
110         this.fileComment = fileComment;
111     } //-- void setFileComment(String)
112 
113     /**
114      * Method setStringFormatter.
115      *
116      * @param stringFormatter
117      */
118     public void setStringFormatter(InputLocation.StringFormatter stringFormatter) {
119         this.stringFormatter = stringFormatter;
120     } //-- void setStringFormatter(InputLocation.StringFormatter)
121 
122     /**
123      * Method write.
124      *
125      * @param writer a writer object
126      * @param model a Model object
127      * @throws java.io.IOException java.io.IOException if any
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     } //-- void write(Writer, Model)
138 
139     /**
140      * Method write.
141      *
142      * @param stream a stream object
143      * @param model a Model object
144      * @throws java.io.IOException java.io.IOException if any
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     } //-- void write(OutputStream, Model)
155 
156     /**
157      * Method writeDomToSerializer.
158      *
159      * @param dom a dom object.
160      * @param serializer a serializer object.
161      * @throws java.io.IOException java.io.IOException if any.
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     } //-- void writeDomToSerializer(org.apache.maven.api.xml.XmlNode, XmlSerializer)
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      * Method writeLocationTracking.
922      *
923      * @param locationTracker
924      * @param serializer
925      * @param key
926      * @throws java.io.IOException
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     } //-- void writeLocationTracking(InputLocationTracker, Object, XmlSerializer)
934 
935     /**
936      * Method toString.
937      *
938      * @param location
939      * @return String
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     } //-- String toString(InputLocation)
947 }