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