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