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