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