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