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