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