1 package org.apache.maven.model.merge;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.HashMap;
24 import java.util.LinkedHashMap;
25 import java.util.List;
26 import java.util.Map;
27 import java.util.Properties;
28
29 import org.apache.maven.model.Activation;
30 import org.apache.maven.model.Build;
31 import org.apache.maven.model.BuildBase;
32 import org.apache.maven.model.CiManagement;
33 import org.apache.maven.model.ConfigurationContainer;
34 import org.apache.maven.model.Contributor;
35 import org.apache.maven.model.Dependency;
36 import org.apache.maven.model.DependencyManagement;
37 import org.apache.maven.model.DeploymentRepository;
38 import org.apache.maven.model.Developer;
39 import org.apache.maven.model.DistributionManagement;
40 import org.apache.maven.model.Exclusion;
41 import org.apache.maven.model.Extension;
42 import org.apache.maven.model.FileSet;
43 import org.apache.maven.model.InputLocation;
44 import org.apache.maven.model.IssueManagement;
45 import org.apache.maven.model.License;
46 import org.apache.maven.model.MailingList;
47 import org.apache.maven.model.Model;
48 import org.apache.maven.model.ModelBase;
49 import org.apache.maven.model.Notifier;
50 import org.apache.maven.model.Organization;
51 import org.apache.maven.model.Parent;
52 import org.apache.maven.model.PatternSet;
53 import org.apache.maven.model.Plugin;
54 import org.apache.maven.model.PluginConfiguration;
55 import org.apache.maven.model.PluginContainer;
56 import org.apache.maven.model.PluginExecution;
57 import org.apache.maven.model.PluginManagement;
58 import org.apache.maven.model.Prerequisites;
59 import org.apache.maven.model.Profile;
60 import org.apache.maven.model.Relocation;
61 import org.apache.maven.model.ReportPlugin;
62 import org.apache.maven.model.ReportSet;
63 import org.apache.maven.model.Reporting;
64 import org.apache.maven.model.Repository;
65 import org.apache.maven.model.RepositoryBase;
66 import org.apache.maven.model.RepositoryPolicy;
67 import org.apache.maven.model.Resource;
68 import org.apache.maven.model.Scm;
69 import org.apache.maven.model.Site;
70 import org.codehaus.plexus.util.xml.Xpp3Dom;
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 public class ModelMerger
88 {
89
90
91
92
93
94
95
96
97
98
99
100
101
102 public void merge( Model target, Model source, boolean sourceDominant, Map<?, ?> hints )
103 {
104 if ( target == null )
105 {
106 throw new IllegalArgumentException( "target missing" );
107 }
108
109 if ( source == null )
110 {
111 return;
112 }
113
114 Map<Object, Object> context = new HashMap<Object, Object>();
115 if ( hints != null )
116 {
117 context.putAll( hints );
118 }
119
120 mergeModel( target, source, sourceDominant, context );
121 }
122
123 protected void mergeModel( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
124 {
125 mergeModelBase( target, source, sourceDominant, context );
126
127 mergeModel_ModelVersion( target, source, sourceDominant, context );
128 mergeModel_Parent( target, source, sourceDominant, context );
129 mergeModel_GroupId( target, source, sourceDominant, context );
130 mergeModel_ArtifactId( target, source, sourceDominant, context );
131 mergeModel_Version( target, source, sourceDominant, context );
132 mergeModel_Packaging( target, source, sourceDominant, context );
133 mergeModel_Name( target, source, sourceDominant, context );
134 mergeModel_Description( target, source, sourceDominant, context );
135 mergeModel_Url( target, source, sourceDominant, context );
136 mergeModel_InceptionYear( target, source, sourceDominant, context );
137 mergeModel_Organization( target, source, sourceDominant, context );
138 mergeModel_Licenses( target, source, sourceDominant, context );
139 mergeModel_MailingLists( target, source, sourceDominant, context );
140 mergeModel_Developers( target, source, sourceDominant, context );
141 mergeModel_Contributors( target, source, sourceDominant, context );
142 mergeModel_IssueManagement( target, source, sourceDominant, context );
143 mergeModel_Scm( target, source, sourceDominant, context );
144 mergeModel_CiManagement( target, source, sourceDominant, context );
145 mergeModel_Prerequisites( target, source, sourceDominant, context );
146 mergeModel_Build( target, source, sourceDominant, context );
147 mergeModel_Profiles( target, source, sourceDominant, context );
148 }
149
150 protected void mergeModel_ModelVersion( Model target, Model source, boolean sourceDominant,
151 Map<Object, Object> context )
152 {
153 String src = source.getModelVersion();
154 if ( src != null )
155 {
156 if ( sourceDominant || target.getModelVersion() == null )
157 {
158 target.setModelVersion( src );
159 target.setLocation( "modelVersion", source.getLocation( "modelVersion" ) );
160 }
161 }
162 }
163
164 protected void mergeModel_Parent( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
165 {
166 Parent src = source.getParent();
167 if ( src != null )
168 {
169 Parent tgt = target.getParent();
170 if ( tgt == null )
171 {
172 tgt = new Parent();
173 tgt.setRelativePath( null );
174 target.setParent( tgt );
175 }
176 mergeParent( tgt, src, sourceDominant, context );
177 }
178 }
179
180 protected void mergeModel_GroupId( Model target, Model source, boolean sourceDominant,
181 Map<Object, Object> context )
182 {
183 String src = source.getGroupId();
184 if ( src != null )
185 {
186 if ( sourceDominant || target.getGroupId() == null )
187 {
188 target.setGroupId( src );
189 target.setLocation( "groupId", source.getLocation( "groupId" ) );
190 }
191 }
192 }
193
194 protected void mergeModel_ArtifactId( Model target, Model source, boolean sourceDominant,
195 Map<Object, Object> context )
196 {
197 String src = source.getArtifactId();
198 if ( src != null )
199 {
200 if ( sourceDominant || target.getArtifactId() == null )
201 {
202 target.setArtifactId( src );
203 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
204 }
205 }
206 }
207
208 protected void mergeModel_Version( Model target, Model source, boolean sourceDominant,
209 Map<Object, Object> context )
210 {
211 String src = source.getVersion();
212 if ( src != null )
213 {
214 if ( sourceDominant || target.getVersion() == null )
215 {
216 target.setVersion( src );
217 target.setLocation( "version", source.getLocation( "version" ) );
218 }
219 }
220 }
221
222 protected void mergeModel_Packaging( Model target, Model source, boolean sourceDominant,
223 Map<Object, Object> context )
224 {
225 String src = source.getPackaging();
226 if ( src != null )
227 {
228 if ( sourceDominant || target.getPackaging() == null )
229 {
230 target.setPackaging( src );
231 target.setLocation( "packaging", source.getLocation( "packaging" ) );
232 }
233 }
234 }
235
236 protected void mergeModel_Name( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
237 {
238 String src = source.getName();
239 if ( src != null )
240 {
241 if ( sourceDominant || target.getName() == null )
242 {
243 target.setName( src );
244 target.setLocation( "name", source.getLocation( "name" ) );
245 }
246 }
247 }
248
249 protected void mergeModel_Description( Model target, Model source, boolean sourceDominant,
250 Map<Object, Object> context )
251 {
252 String src = source.getDescription();
253 if ( src != null )
254 {
255 if ( sourceDominant || target.getDescription() == null )
256 {
257 target.setDescription( src );
258 target.setLocation( "description", source.getLocation( "description" ) );
259 }
260 }
261 }
262
263 protected void mergeModel_Url( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
264 {
265 String src = source.getUrl();
266 if ( src != null )
267 {
268 if ( sourceDominant || target.getUrl() == null )
269 {
270 target.setUrl( src );
271 target.setLocation( "url", source.getLocation( "url" ) );
272 }
273 }
274 }
275
276 protected void mergeModel_InceptionYear( Model target, Model source, boolean sourceDominant,
277 Map<Object, Object> context )
278 {
279 String src = source.getInceptionYear();
280 if ( src != null )
281 {
282 if ( sourceDominant || target.getInceptionYear() == null )
283 {
284 target.setInceptionYear( src );
285 target.setLocation( "inceptionYear", source.getLocation( "inceptionYear" ) );
286 }
287 }
288 }
289
290 protected void mergeModel_Organization( Model target, Model source, boolean sourceDominant,
291 Map<Object, Object> context )
292 {
293 Organization src = source.getOrganization();
294 if ( src != null )
295 {
296 Organization tgt = target.getOrganization();
297 if ( tgt == null )
298 {
299 tgt = new Organization();
300 target.setOrganization( tgt );
301 }
302 mergeOrganization( tgt, src, sourceDominant, context );
303 }
304 }
305
306 protected void mergeModel_Licenses( Model target, Model source, boolean sourceDominant,
307 Map<Object, Object> context )
308 {
309 List<License> src = source.getLicenses();
310 if ( !src.isEmpty() )
311 {
312 List<License> tgt = target.getLicenses();
313 Map<Object, License> merged = new LinkedHashMap<Object, License>( ( src.size() + tgt.size() ) * 2 );
314
315 for ( License element : tgt )
316 {
317 Object key = getLicenseKey( element );
318 merged.put( key, element );
319 }
320
321 for ( License element : src )
322 {
323 Object key = getLicenseKey( element );
324 if ( sourceDominant || !merged.containsKey( key ) )
325 {
326 merged.put( key, element );
327 }
328 }
329
330 target.setLicenses( new ArrayList<License>( merged.values() ) );
331 }
332 }
333
334 protected void mergeModel_MailingLists( Model target, Model source, boolean sourceDominant,
335 Map<Object, Object> context )
336 {
337 List<MailingList> src = source.getMailingLists();
338 if ( !src.isEmpty() )
339 {
340 List<MailingList> tgt = target.getMailingLists();
341 Map<Object, MailingList> merged = new LinkedHashMap<Object, MailingList>( ( src.size() + tgt.size() ) * 2 );
342
343 for ( MailingList element : tgt )
344 {
345 Object key = getMailingListKey( element );
346 merged.put( key, element );
347 }
348
349 for ( MailingList element : src )
350 {
351 Object key = getMailingListKey( element );
352 if ( sourceDominant || !merged.containsKey( key ) )
353 {
354 merged.put( key, element );
355 }
356 }
357
358 target.setMailingLists( new ArrayList<MailingList>( merged.values() ) );
359 }
360 }
361
362 protected void mergeModel_Developers( Model target, Model source, boolean sourceDominant,
363 Map<Object, Object> context )
364 {
365 List<Developer> src = source.getDevelopers();
366 if ( !src.isEmpty() )
367 {
368 List<Developer> tgt = target.getDevelopers();
369 Map<Object, Developer> merged = new LinkedHashMap<Object, Developer>( ( src.size() + tgt.size() ) * 2 );
370
371 for ( Developer element : tgt )
372 {
373 Object key = getDeveloperKey( element );
374 merged.put( key, element );
375 }
376
377 for ( Developer element : src )
378 {
379 Object key = getDeveloperKey( element );
380 if ( sourceDominant || !merged.containsKey( key ) )
381 {
382 merged.put( key, element );
383 }
384 }
385
386 target.setDevelopers( new ArrayList<Developer>( merged.values() ) );
387 }
388 }
389
390 protected void mergeModel_Contributors( Model target, Model source, boolean sourceDominant,
391 Map<Object, Object> context )
392 {
393 List<Contributor> src = source.getContributors();
394 if ( !src.isEmpty() )
395 {
396 List<Contributor> tgt = target.getContributors();
397 Map<Object, Contributor> merged = new LinkedHashMap<Object, Contributor>( ( src.size() + tgt.size() ) * 2 );
398
399 for ( Contributor element : tgt )
400 {
401 Object key = getContributorKey( element );
402 merged.put( key, element );
403 }
404
405 for ( Contributor element : src )
406 {
407 Object key = getContributorKey( element );
408 if ( sourceDominant || !merged.containsKey( key ) )
409 {
410 merged.put( key, element );
411 }
412 }
413
414 target.setContributors( new ArrayList<Contributor>( merged.values() ) );
415 }
416 }
417
418 protected void mergeModel_IssueManagement( Model target, Model source, boolean sourceDominant,
419 Map<Object, Object> context )
420 {
421 IssueManagement src = source.getIssueManagement();
422 if ( src != null )
423 {
424 IssueManagement tgt = target.getIssueManagement();
425 if ( tgt == null )
426 {
427 tgt = new IssueManagement();
428 target.setIssueManagement( tgt );
429 }
430 mergeIssueManagement( tgt, src, sourceDominant, context );
431 }
432 }
433
434 protected void mergeModel_Scm( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
435 {
436 Scm src = source.getScm();
437 if ( src != null )
438 {
439 Scm tgt = target.getScm();
440 if ( tgt == null )
441 {
442 tgt = new Scm();
443 tgt.setTag( null );
444 target.setScm( tgt );
445 }
446 mergeScm( tgt, src, sourceDominant, context );
447 }
448 }
449
450 protected void mergeModel_CiManagement( Model target, Model source, boolean sourceDominant,
451 Map<Object, Object> context )
452 {
453 CiManagement src = source.getCiManagement();
454 if ( src != null )
455 {
456 CiManagement tgt = target.getCiManagement();
457 if ( tgt == null )
458 {
459 tgt = new CiManagement();
460 target.setCiManagement( tgt );
461 }
462 mergeCiManagement( tgt, src, sourceDominant, context );
463 }
464 }
465
466 protected void mergeModel_Prerequisites( Model target, Model source, boolean sourceDominant,
467 Map<Object, Object> context )
468 {
469 Prerequisites src = source.getPrerequisites();
470 if ( src != null )
471 {
472 Prerequisites tgt = target.getPrerequisites();
473 if ( tgt == null )
474 {
475 tgt = new Prerequisites();
476 tgt.setMaven( null );
477 target.setPrerequisites( tgt );
478 }
479 mergePrerequisites( tgt, src, sourceDominant, context );
480 }
481 }
482
483 protected void mergeModel_Build( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
484 {
485 Build src = source.getBuild();
486 if ( src != null )
487 {
488 Build tgt = target.getBuild();
489 if ( tgt == null )
490 {
491 tgt = new Build();
492 target.setBuild( tgt );
493 }
494 mergeBuild( tgt, src, sourceDominant, context );
495 }
496 }
497
498 protected void mergeModel_Profiles( Model target, Model source, boolean sourceDominant,
499 Map<Object, Object> context )
500 {
501 List<Profile> src = source.getProfiles();
502 if ( !src.isEmpty() )
503 {
504 List<Profile> tgt = target.getProfiles();
505 Map<Object, Profile> merged = new LinkedHashMap<Object, Profile>( ( src.size() + tgt.size() ) * 2 );
506
507 for ( Profile element : tgt )
508 {
509 Object key = getProfileKey( element );
510 merged.put( key, element );
511 }
512
513 for ( Profile element : src )
514 {
515 Object key = getProfileKey( element );
516 if ( sourceDominant || !merged.containsKey( key ) )
517 {
518 merged.put( key, element );
519 }
520 }
521
522 target.setProfiles( new ArrayList<Profile>( merged.values() ) );
523 }
524 }
525
526 protected void mergeModelBase( ModelBase target, ModelBase source, boolean sourceDominant,
527 Map<Object, Object> context )
528 {
529 mergeModelBase_DistributionManagement( target, source, sourceDominant, context );
530 mergeModelBase_Modules( target, source, sourceDominant, context );
531 mergeModelBase_Repositories( target, source, sourceDominant, context );
532 mergeModelBase_PluginRepositories( target, source, sourceDominant, context );
533 mergeModelBase_Dependencies( target, source, sourceDominant, context );
534 mergeModelBase_Reporting( target, source, sourceDominant, context );
535 mergeModelBase_DependencyManagement( target, source, sourceDominant, context );
536 mergeModelBase_Properties( target, source, sourceDominant, context );
537 }
538
539 protected void mergeModelBase_Modules( ModelBase target, ModelBase source, boolean sourceDominant,
540 Map<Object, Object> context )
541 {
542 List<String> src = source.getModules();
543 if ( !src.isEmpty() )
544 {
545 List<String> tgt = target.getModules();
546 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
547 merged.addAll( tgt );
548 merged.addAll( src );
549 target.setModules( merged );
550 }
551 }
552
553 protected void mergeModelBase_Dependencies( ModelBase target, ModelBase source, boolean sourceDominant,
554 Map<Object, Object> context )
555 {
556 List<Dependency> src = source.getDependencies();
557 if ( !src.isEmpty() )
558 {
559 List<Dependency> tgt = target.getDependencies();
560 Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
561
562 for ( Dependency element : tgt )
563 {
564 Object key = getDependencyKey( element );
565 merged.put( key, element );
566 }
567
568 for ( Dependency element : src )
569 {
570 Object key = getDependencyKey( element );
571 if ( sourceDominant || !merged.containsKey( key ) )
572 {
573 merged.put( key, element );
574 }
575 }
576
577 target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
578 }
579 }
580
581 protected void mergeModelBase_Repositories( ModelBase target, ModelBase source, boolean sourceDominant,
582 Map<Object, Object> context )
583 {
584 List<Repository> src = source.getRepositories();
585 if ( !src.isEmpty() )
586 {
587 List<Repository> tgt = target.getRepositories();
588 Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
589
590 for ( Repository element : tgt )
591 {
592 Object key = getRepositoryKey( element );
593 merged.put( key, element );
594 }
595
596 for ( Repository element : src )
597 {
598 Object key = getRepositoryKey( element );
599 if ( sourceDominant || !merged.containsKey( key ) )
600 {
601 merged.put( key, element );
602 }
603 }
604
605 target.setRepositories( new ArrayList<Repository>( merged.values() ) );
606 }
607 }
608
609 protected void mergeModelBase_PluginRepositories( ModelBase target, ModelBase source, boolean sourceDominant,
610 Map<Object, Object> context )
611 {
612 List<Repository> src = source.getPluginRepositories();
613 if ( !src.isEmpty() )
614 {
615 List<Repository> tgt = target.getPluginRepositories();
616 Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
617
618 for ( Repository element : tgt )
619 {
620 Object key = getRepositoryKey( element );
621 merged.put( key, element );
622 }
623
624 for ( Repository element : src )
625 {
626 Object key = getRepositoryKey( element );
627 if ( sourceDominant || !merged.containsKey( key ) )
628 {
629 merged.put( key, element );
630 }
631 }
632
633 target.setPluginRepositories( new ArrayList<Repository>( merged.values() ) );
634 }
635 }
636
637 protected void mergeModelBase_DistributionManagement( ModelBase target, ModelBase source, boolean sourceDominant,
638 Map<Object, Object> context )
639 {
640 DistributionManagement src = source.getDistributionManagement();
641 if ( src != null )
642 {
643 DistributionManagement tgt = target.getDistributionManagement();
644 if ( tgt == null )
645 {
646 tgt = new DistributionManagement();
647 target.setDistributionManagement( tgt );
648 }
649 mergeDistributionManagement( tgt, src, sourceDominant, context );
650 }
651 }
652
653 protected void mergeModelBase_Reporting( ModelBase target, ModelBase source, boolean sourceDominant,
654 Map<Object, Object> context )
655 {
656 Reporting src = source.getReporting();
657 if ( src != null )
658 {
659 Reporting tgt = target.getReporting();
660 if ( tgt == null )
661 {
662 tgt = new Reporting();
663 target.setReporting( tgt );
664 }
665 mergeReporting( tgt, src, sourceDominant, context );
666 }
667 }
668
669 protected void mergeModelBase_DependencyManagement( ModelBase target, ModelBase source, boolean sourceDominant,
670 Map<Object, Object> context )
671 {
672 DependencyManagement src = source.getDependencyManagement();
673 if ( src != null )
674 {
675 DependencyManagement tgt = target.getDependencyManagement();
676 if ( tgt == null )
677 {
678 tgt = new DependencyManagement();
679 target.setDependencyManagement( tgt );
680 }
681 mergeDependencyManagement( tgt, src, sourceDominant, context );
682 }
683 }
684
685 protected void mergeModelBase_Properties( ModelBase target, ModelBase source, boolean sourceDominant,
686 Map<Object, Object> context )
687 {
688 Properties merged = new Properties();
689 if ( sourceDominant )
690 {
691 merged.putAll( target.getProperties() );
692 merged.putAll( source.getProperties() );
693 }
694 else
695 {
696 merged.putAll( source.getProperties() );
697 merged.putAll( target.getProperties() );
698 }
699 target.setProperties( merged );
700 target.setLocation( "properties", InputLocation.merge( target.getLocation( "properties" ),
701 source.getLocation( "properties" ), sourceDominant ) );
702 }
703
704 protected void mergeDistributionManagement( DistributionManagement target, DistributionManagement source,
705 boolean sourceDominant, Map<Object, Object> context )
706 {
707 mergeDistributionManagement_Repository( target, source, sourceDominant, context );
708 mergeDistributionManagement_SnapshotRepository( target, source, sourceDominant, context );
709 mergeDistributionManagement_Site( target, source, sourceDominant, context );
710 mergeDistributionManagement_Status( target, source, sourceDominant, context );
711 mergeDistributionManagement_DownloadUrl( target, source, sourceDominant, context );
712 }
713
714 protected void mergeDistributionManagement_Repository( DistributionManagement target,
715 DistributionManagement source, boolean sourceDominant,
716 Map<Object, Object> context )
717 {
718 DeploymentRepository src = source.getRepository();
719 if ( src != null )
720 {
721 DeploymentRepository tgt = target.getRepository();
722 if ( tgt == null )
723 {
724 tgt = new DeploymentRepository();
725 target.setRepository( tgt );
726 }
727 mergeDeploymentRepository( tgt, src, sourceDominant, context );
728 }
729 }
730
731 protected void mergeDistributionManagement_SnapshotRepository( DistributionManagement target,
732 DistributionManagement source,
733 boolean sourceDominant,
734 Map<Object, Object> context )
735 {
736 DeploymentRepository src = source.getSnapshotRepository();
737 if ( src != null )
738 {
739 DeploymentRepository tgt = target.getSnapshotRepository();
740 if ( tgt == null )
741 {
742 tgt = new DeploymentRepository();
743 target.setSnapshotRepository( tgt );
744 }
745 mergeDeploymentRepository( tgt, src, sourceDominant, context );
746 }
747 }
748
749 protected void mergeDistributionManagement_Site( DistributionManagement target, DistributionManagement source,
750 boolean sourceDominant, Map<Object, Object> context )
751 {
752 Site src = source.getSite();
753 if ( src != null )
754 {
755 Site tgt = target.getSite();
756 if ( tgt == null )
757 {
758 tgt = new Site();
759 target.setSite( tgt );
760 }
761 mergeSite( tgt, src, sourceDominant, context );
762 }
763 }
764
765 protected void mergeDistributionManagement_Status( DistributionManagement target, DistributionManagement source,
766 boolean sourceDominant, Map<Object, Object> context )
767 {
768 String src = source.getStatus();
769 if ( src != null )
770 {
771 if ( sourceDominant || target.getStatus() == null )
772 {
773 target.setStatus( src );
774 target.setLocation( "status", source.getLocation( "status" ) );
775 }
776 }
777 }
778
779 protected void mergeDistributionManagement_DownloadUrl( DistributionManagement target,
780 DistributionManagement source, boolean sourceDominant,
781 Map<Object, Object> context )
782 {
783 String src = source.getDownloadUrl();
784 if ( src != null )
785 {
786 if ( sourceDominant || target.getDownloadUrl() == null )
787 {
788 target.setDownloadUrl( src );
789 target.setLocation( "downloadUrl", source.getLocation( "downloadUrl" ) );
790 }
791 }
792 }
793
794 protected void mergeRelocation( Relocation target, Relocation source, boolean sourceDominant,
795 Map<Object, Object> context )
796 {
797 mergeRelocation_GroupId( target, source, sourceDominant, context );
798 mergeRelocation_ArtifactId( target, source, sourceDominant, context );
799 mergeRelocation_Version( target, source, sourceDominant, context );
800 mergeRelocation_Message( target, source, sourceDominant, context );
801 }
802
803 protected void mergeRelocation_GroupId( Relocation target, Relocation source, boolean sourceDominant,
804 Map<Object, Object> context )
805 {
806 String src = source.getGroupId();
807 if ( src != null )
808 {
809 if ( sourceDominant || target.getGroupId() == null )
810 {
811 target.setGroupId( src );
812 target.setLocation( "groupId", source.getLocation( "groupId" ) );
813 }
814 }
815 }
816
817 protected void mergeRelocation_ArtifactId( Relocation target, Relocation source, boolean sourceDominant,
818 Map<Object, Object> context )
819 {
820 String src = source.getArtifactId();
821 if ( src != null )
822 {
823 if ( sourceDominant || target.getArtifactId() == null )
824 {
825 target.setArtifactId( src );
826 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
827 }
828 }
829 }
830
831 protected void mergeRelocation_Version( Relocation target, Relocation source, boolean sourceDominant,
832 Map<Object, Object> context )
833 {
834 String src = source.getVersion();
835 if ( src != null )
836 {
837 if ( sourceDominant || target.getVersion() == null )
838 {
839 target.setVersion( src );
840 target.setLocation( "version", source.getLocation( "version" ) );
841 }
842 }
843 }
844
845 protected void mergeRelocation_Message( Relocation target, Relocation source, boolean sourceDominant,
846 Map<Object, Object> context )
847 {
848 String src = source.getMessage();
849 if ( src != null )
850 {
851 if ( sourceDominant || target.getMessage() == null )
852 {
853 target.setMessage( src );
854 target.setLocation( "message", source.getLocation( "message" ) );
855 }
856 }
857 }
858
859 protected void mergeDeploymentRepository( DeploymentRepository target, DeploymentRepository source,
860 boolean sourceDominant, Map<Object, Object> context )
861 {
862 mergeRepository( target, source, sourceDominant, context );
863 mergeDeploymentRepository_UniqueVersion( target, source, sourceDominant, context );
864 }
865
866 protected void mergeDeploymentRepository_UniqueVersion( DeploymentRepository target, DeploymentRepository source,
867 boolean sourceDominant, Map<Object, Object> context )
868 {
869 if ( sourceDominant )
870 {
871 target.setUniqueVersion( source.isUniqueVersion() );
872 target.setLocation( "uniqueVersion", source.getLocation( "uniqueVersion" ) );
873 }
874 }
875
876 protected void mergeSite( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
877 {
878 mergeSite_Id( target, source, sourceDominant, context );
879 mergeSite_Name( target, source, sourceDominant, context );
880 mergeSite_Url( target, source, sourceDominant, context );
881 }
882
883 protected void mergeSite_Id( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
884 {
885 String src = source.getId();
886 if ( src != null )
887 {
888 if ( sourceDominant || target.getId() == null )
889 {
890 target.setId( src );
891 target.setLocation( "id", source.getLocation( "id" ) );
892 }
893 }
894 }
895
896 protected void mergeSite_Name( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
897 {
898 String src = source.getName();
899 if ( src != null )
900 {
901 if ( sourceDominant || target.getName() == null )
902 {
903 target.setName( src );
904 target.setLocation( "name", source.getLocation( "name" ) );
905 }
906 }
907 }
908
909 protected void mergeSite_Url( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
910 {
911 String src = source.getUrl();
912 if ( src != null )
913 {
914 if ( sourceDominant || target.getUrl() == null )
915 {
916 target.setUrl( src );
917 target.setLocation( "url", source.getLocation( "url" ) );
918 }
919 }
920 }
921
922 protected void mergeRepository( Repository target, Repository source, boolean sourceDominant,
923 Map<Object, Object> context )
924 {
925 mergeRepositoryBase( target, source, sourceDominant, context );
926 mergeRepository_Releases( target, source, sourceDominant, context );
927 mergeRepository_Snapshots( target, source, sourceDominant, context );
928 }
929
930 protected void mergeRepository_Releases( Repository target, Repository source, boolean sourceDominant,
931 Map<Object, Object> context )
932 {
933 RepositoryPolicy src = source.getReleases();
934 if ( src != null )
935 {
936 RepositoryPolicy tgt = target.getReleases();
937 if ( tgt == null )
938 {
939 tgt = new RepositoryPolicy();
940 target.setReleases( tgt );
941 }
942 mergeRepositoryPolicy( tgt, src, sourceDominant, context );
943 }
944 }
945
946 protected void mergeRepository_Snapshots( Repository target, Repository source, boolean sourceDominant,
947 Map<Object, Object> context )
948 {
949 RepositoryPolicy src = source.getSnapshots();
950 if ( src != null )
951 {
952 RepositoryPolicy tgt = target.getSnapshots();
953 if ( tgt == null )
954 {
955 tgt = new RepositoryPolicy();
956 target.setSnapshots( tgt );
957 }
958 mergeRepositoryPolicy( tgt, src, sourceDominant, context );
959 }
960 }
961
962 protected void mergeRepositoryBase( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
963 Map<Object, Object> context )
964 {
965 mergeRepositoryBase_Id( target, source, sourceDominant, context );
966 mergeRepositoryBase_Name( target, source, sourceDominant, context );
967 mergeRepositoryBase_Url( target, source, sourceDominant, context );
968 mergeRepositoryBase_Layout( target, source, sourceDominant, context );
969 }
970
971 protected void mergeRepositoryBase_Id( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
972 Map<Object, Object> context )
973 {
974 String src = source.getId();
975 if ( src != null )
976 {
977 if ( sourceDominant || target.getId() == null )
978 {
979 target.setId( src );
980 target.setLocation( "id", source.getLocation( "id" ) );
981 }
982 }
983 }
984
985 protected void mergeRepositoryBase_Url( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
986 Map<Object, Object> context )
987 {
988 String src = source.getUrl();
989 if ( src != null )
990 {
991 if ( sourceDominant || target.getUrl() == null )
992 {
993 target.setUrl( src );
994 target.setLocation( "url", source.getLocation( "url" ) );
995 }
996 }
997 }
998
999 protected void mergeRepositoryBase_Name( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
1000 Map<Object, Object> context )
1001 {
1002 String src = source.getName();
1003 if ( src != null )
1004 {
1005 if ( sourceDominant || target.getName() == null )
1006 {
1007 target.setName( src );
1008 target.setLocation( "name", source.getLocation( "name" ) );
1009 }
1010 }
1011 }
1012
1013 protected void mergeRepositoryBase_Layout( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
1014 Map<Object, Object> context )
1015 {
1016 String src = source.getLayout();
1017 if ( src != null )
1018 {
1019 if ( sourceDominant || target.getLayout() == null )
1020 {
1021 target.setLayout( src );
1022 target.setLocation( "layout", source.getLocation( "layout" ) );
1023 }
1024 }
1025 }
1026
1027 protected void mergeRepositoryPolicy( RepositoryPolicy target, RepositoryPolicy source, boolean sourceDominant,
1028 Map<Object, Object> context )
1029 {
1030 mergeRepositoryPolicy_Enabled( target, source, sourceDominant, context );
1031 mergeRepositoryPolicy_UpdatePolicy( target, source, sourceDominant, context );
1032 mergeRepositoryPolicy_ChecksumPolicy( target, source, sourceDominant, context );
1033 }
1034
1035 protected void mergeRepositoryPolicy_Enabled( RepositoryPolicy target, RepositoryPolicy source,
1036 boolean sourceDominant, Map<Object, Object> context )
1037 {
1038 String src = source.getEnabled();
1039 if ( src != null )
1040 {
1041 if ( sourceDominant || target.getEnabled() == null )
1042 {
1043 target.setEnabled( src );
1044 target.setLocation( "enabled", source.getLocation( "enabled" ) );
1045 }
1046 }
1047 }
1048
1049 protected void mergeRepositoryPolicy_UpdatePolicy( RepositoryPolicy target, RepositoryPolicy source,
1050 boolean sourceDominant, Map<Object, Object> context )
1051 {
1052 String src = source.getUpdatePolicy();
1053 if ( src != null )
1054 {
1055 if ( sourceDominant || target.getUpdatePolicy() == null )
1056 {
1057 target.setUpdatePolicy( src );
1058 target.setLocation( "updatePolicy", source.getLocation( "updatePolicy" ) );
1059 }
1060 }
1061 }
1062
1063 protected void mergeRepositoryPolicy_ChecksumPolicy( RepositoryPolicy target, RepositoryPolicy source,
1064 boolean sourceDominant, Map<Object, Object> context )
1065 {
1066 String src = source.getChecksumPolicy();
1067 if ( src != null )
1068 {
1069 if ( sourceDominant || target.getChecksumPolicy() == null )
1070 {
1071 target.setChecksumPolicy( src );
1072 target.setLocation( "checksumPolicy", source.getLocation( "checksumPolicy" ) );
1073 }
1074 }
1075 }
1076
1077 protected void mergeDependency( Dependency target, Dependency source, boolean sourceDominant,
1078 Map<Object, Object> context )
1079 {
1080 mergeDependency_GroupId( target, source, sourceDominant, context );
1081 mergeDependency_ArtifactId( target, source, sourceDominant, context );
1082 mergeDependency_Version( target, source, sourceDominant, context );
1083 mergeDependency_Type( target, source, sourceDominant, context );
1084 mergeDependency_Classifier( target, source, sourceDominant, context );
1085 mergeDependency_Scope( target, source, sourceDominant, context );
1086 mergeDependency_SystemPath( target, source, sourceDominant, context );
1087 mergeDependency_Optional( target, source, sourceDominant, context );
1088 mergeDependency_Exclusions( target, source, sourceDominant, context );
1089 }
1090
1091 protected void mergeDependency_GroupId( Dependency target, Dependency source, boolean sourceDominant,
1092 Map<Object, Object> context )
1093 {
1094 String src = source.getGroupId();
1095 if ( src != null )
1096 {
1097 if ( sourceDominant || target.getGroupId() == null )
1098 {
1099 target.setGroupId( src );
1100 target.setLocation( "groupId", source.getLocation( "groupId" ) );
1101 }
1102 }
1103 }
1104
1105 protected void mergeDependency_ArtifactId( Dependency target, Dependency source, boolean sourceDominant,
1106 Map<Object, Object> context )
1107 {
1108 String src = source.getArtifactId();
1109 if ( src != null )
1110 {
1111 if ( sourceDominant || target.getArtifactId() == null )
1112 {
1113 target.setArtifactId( src );
1114 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
1115 }
1116 }
1117 }
1118
1119 protected void mergeDependency_Version( Dependency target, Dependency source, boolean sourceDominant,
1120 Map<Object, Object> context )
1121 {
1122 String src = source.getVersion();
1123 if ( src != null )
1124 {
1125 if ( sourceDominant || target.getVersion() == null )
1126 {
1127 target.setVersion( src );
1128 target.setLocation( "version", source.getLocation( "version" ) );
1129 }
1130 }
1131 }
1132
1133 protected void mergeDependency_Type( Dependency target, Dependency source, boolean sourceDominant,
1134 Map<Object, Object> context )
1135 {
1136 String src = source.getType();
1137 if ( src != null )
1138 {
1139 if ( sourceDominant || target.getType() == null )
1140 {
1141 target.setType( src );
1142 target.setLocation( "type", source.getLocation( "type" ) );
1143 }
1144 }
1145 }
1146
1147 protected void mergeDependency_Classifier( Dependency target, Dependency source, boolean sourceDominant,
1148 Map<Object, Object> context )
1149 {
1150 String src = source.getClassifier();
1151 if ( src != null )
1152 {
1153 if ( sourceDominant || target.getClassifier() == null )
1154 {
1155 target.setClassifier( src );
1156 target.setLocation( "classifier", source.getLocation( "classifier" ) );
1157 }
1158 }
1159 }
1160
1161 protected void mergeDependency_Scope( Dependency target, Dependency source, boolean sourceDominant,
1162 Map<Object, Object> context )
1163 {
1164 String src = source.getScope();
1165 if ( src != null )
1166 {
1167 if ( sourceDominant || target.getScope() == null )
1168 {
1169 target.setScope( src );
1170 target.setLocation( "scope", source.getLocation( "scope" ) );
1171 }
1172 }
1173 }
1174
1175 protected void mergeDependency_SystemPath( Dependency target, Dependency source, boolean sourceDominant,
1176 Map<Object, Object> context )
1177 {
1178 String src = source.getSystemPath();
1179 if ( src != null )
1180 {
1181 if ( sourceDominant || target.getSystemPath() == null )
1182 {
1183 target.setSystemPath( src );
1184 target.setLocation( "systemPath", source.getLocation( "systemPath" ) );
1185 }
1186 }
1187 }
1188
1189 protected void mergeDependency_Optional( Dependency target, Dependency source, boolean sourceDominant,
1190 Map<Object, Object> context )
1191 {
1192 String src = source.getOptional();
1193 if ( src != null )
1194 {
1195 if ( sourceDominant || target.getOptional() == null )
1196 {
1197 target.setOptional( src );
1198 target.setLocation( "optional", source.getLocation( "optional" ) );
1199 }
1200 }
1201 }
1202
1203 protected void mergeDependency_Exclusions( Dependency target, Dependency source, boolean sourceDominant,
1204 Map<Object, Object> context )
1205 {
1206 List<Exclusion> src = source.getExclusions();
1207 if ( !src.isEmpty() )
1208 {
1209 List<Exclusion> tgt = target.getExclusions();
1210
1211 Map<Object, Exclusion> merged = new LinkedHashMap<Object, Exclusion>( ( src.size() + tgt.size() ) * 2 );
1212
1213 for ( Exclusion element : tgt )
1214 {
1215 Object key = getExclusionKey( element );
1216 merged.put( key, element );
1217 }
1218
1219 for ( Exclusion element : src )
1220 {
1221 Object key = getExclusionKey( element );
1222 if ( sourceDominant || !merged.containsKey( key ) )
1223 {
1224 merged.put( key, element );
1225 }
1226 }
1227
1228 target.setExclusions( new ArrayList<Exclusion>( merged.values() ) );
1229 }
1230 }
1231
1232 protected void mergeExclusion( Exclusion target, Exclusion source, boolean sourceDominant,
1233 Map<Object, Object> context )
1234 {
1235 mergeExclusion_GroupId( target, source, sourceDominant, context );
1236 mergeExclusion_ArtifactId( target, source, sourceDominant, context );
1237 }
1238
1239 protected void mergeExclusion_GroupId( Exclusion target, Exclusion source, boolean sourceDominant,
1240 Map<Object, Object> context )
1241 {
1242 String src = source.getGroupId();
1243 if ( src != null )
1244 {
1245 if ( sourceDominant || target.getGroupId() == null )
1246 {
1247 target.setGroupId( src );
1248 target.setLocation( "groupId", source.getLocation( "groupId" ) );
1249 }
1250 }
1251 }
1252
1253 protected void mergeExclusion_ArtifactId( Exclusion target, Exclusion source, boolean sourceDominant,
1254 Map<Object, Object> context )
1255 {
1256 String src = source.getArtifactId();
1257 if ( src != null )
1258 {
1259 if ( sourceDominant || target.getArtifactId() == null )
1260 {
1261 target.setArtifactId( src );
1262 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
1263 }
1264 }
1265 }
1266
1267 protected void mergeReporting( Reporting target, Reporting source, boolean sourceDominant,
1268 Map<Object, Object> context )
1269 {
1270 mergeReporting_OutputDirectory( target, source, sourceDominant, context );
1271 mergeReporting_ExcludeDefaults( target, source, sourceDominant, context );
1272 mergeReporting_Plugins( target, source, sourceDominant, context );
1273 }
1274
1275 protected void mergeReporting_OutputDirectory( Reporting target, Reporting source, boolean sourceDominant,
1276 Map<Object, Object> context )
1277 {
1278 String src = source.getOutputDirectory();
1279 if ( src != null )
1280 {
1281 if ( sourceDominant || target.getOutputDirectory() == null )
1282 {
1283 target.setOutputDirectory( src );
1284 target.setLocation( "outputDirectory", source.getLocation( "outputDirectory" ) );
1285 }
1286 }
1287 }
1288
1289 protected void mergeReporting_ExcludeDefaults( Reporting target, Reporting source, boolean sourceDominant,
1290 Map<Object, Object> context )
1291 {
1292 String src = source.getExcludeDefaults();
1293 if ( src != null )
1294 {
1295 if ( sourceDominant || target.getExcludeDefaults() == null )
1296 {
1297 target.setExcludeDefaults( src );
1298 target.setLocation( "excludeDefaults", source.getLocation( "excludeDefaults" ) );
1299 }
1300 }
1301 }
1302
1303 protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
1304 Map<Object, Object> context )
1305 {
1306 List<ReportPlugin> src = source.getPlugins();
1307 if ( !src.isEmpty() )
1308 {
1309 List<ReportPlugin> tgt = target.getPlugins();
1310 Map<Object, ReportPlugin> merged =
1311 new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
1312
1313 for ( ReportPlugin element : tgt )
1314 {
1315 Object key = getReportPluginKey( element );
1316 merged.put( key, element );
1317 }
1318
1319 for ( ReportPlugin element : src )
1320 {
1321 Object key = getReportPluginKey( element );
1322 if ( sourceDominant || !merged.containsKey( key ) )
1323 {
1324 merged.put( key, element );
1325 }
1326 }
1327
1328 target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
1329 }
1330 }
1331
1332 protected void mergeReportPlugin( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
1333 Map<Object, Object> context )
1334 {
1335 mergeConfigurationContainer( target, source, sourceDominant, context );
1336 mergeReportPlugin_GroupId( target, source, sourceDominant, context );
1337 mergeReportPlugin_ArtifactId( target, source, sourceDominant, context );
1338 mergeReportPlugin_Version( target, source, sourceDominant, context );
1339 mergeReportPlugin_ReportSets( target, source, sourceDominant, context );
1340 }
1341
1342 protected void mergeReportPlugin_GroupId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
1343 Map<Object, Object> context )
1344 {
1345 String src = source.getGroupId();
1346 if ( src != null )
1347 {
1348 if ( sourceDominant || target.getGroupId() == null )
1349 {
1350 target.setGroupId( src );
1351 target.setLocation( "groupId", source.getLocation( "groupId" ) );
1352 }
1353 }
1354 }
1355
1356 protected void mergeReportPlugin_ArtifactId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
1357 Map<Object, Object> context )
1358 {
1359 String src = source.getArtifactId();
1360 if ( src != null )
1361 {
1362 if ( sourceDominant || target.getArtifactId() == null )
1363 {
1364 target.setArtifactId( src );
1365 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
1366 }
1367 }
1368 }
1369
1370 protected void mergeReportPlugin_Version( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
1371 Map<Object, Object> context )
1372 {
1373 String src = source.getVersion();
1374 if ( src != null )
1375 {
1376 if ( sourceDominant || target.getVersion() == null )
1377 {
1378 target.setVersion( src );
1379 target.setLocation( "version", source.getLocation( "version" ) );
1380 }
1381 }
1382 }
1383
1384 protected void mergeReportPlugin_ReportSets( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
1385 Map<Object, Object> context )
1386 {
1387 List<ReportSet> src = source.getReportSets();
1388 if ( !src.isEmpty() )
1389 {
1390 List<ReportSet> tgt = target.getReportSets();
1391 Map<Object, ReportSet> merged = new LinkedHashMap<Object, ReportSet>( ( src.size() + tgt.size() ) * 2 );
1392
1393 for ( ReportSet element : tgt )
1394 {
1395 Object key = getReportSetKey( element );
1396 merged.put( key, element );
1397 }
1398
1399 for ( ReportSet element : src )
1400 {
1401 Object key = getReportSetKey( element );
1402 if ( sourceDominant || !merged.containsKey( key ) )
1403 {
1404 merged.put( key, element );
1405 }
1406 }
1407
1408 target.setReportSets( new ArrayList<ReportSet>( merged.values() ) );
1409 }
1410 }
1411
1412 protected void mergeReportSet( ReportSet target, ReportSet source, boolean sourceDominant,
1413 Map<Object, Object> context )
1414 {
1415 mergeConfigurationContainer( target, source, sourceDominant, context );
1416 mergeReportSet_Id( target, source, sourceDominant, context );
1417 mergeReportSet_Reports( target, source, sourceDominant, context );
1418 }
1419
1420 protected void mergeReportSet_Id( ReportSet target, ReportSet source, boolean sourceDominant,
1421 Map<Object, Object> context )
1422 {
1423 String src = source.getId();
1424 if ( src != null )
1425 {
1426 if ( sourceDominant || target.getId() == null )
1427 {
1428 target.setId( src );
1429 target.setLocation( "id", source.getLocation( "id" ) );
1430 }
1431 }
1432 }
1433
1434 protected void mergeReportSet_Reports( ReportSet target, ReportSet source, boolean sourceDominant,
1435 Map<Object, Object> context )
1436 {
1437 List<String> src = source.getReports();
1438 if ( !src.isEmpty() )
1439 {
1440 List<String> tgt = target.getReports();
1441 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
1442 merged.addAll( tgt );
1443 merged.addAll( src );
1444 target.setReports( merged );
1445 }
1446 }
1447
1448 protected void mergeDependencyManagement( DependencyManagement target, DependencyManagement source,
1449 boolean sourceDominant, Map<Object, Object> context )
1450 {
1451 mergeDependencyManagement_Dependencies( target, source, sourceDominant, context );
1452 }
1453
1454 protected void mergeDependencyManagement_Dependencies( DependencyManagement target, DependencyManagement source,
1455 boolean sourceDominant, Map<Object, Object> context )
1456 {
1457 List<Dependency> src = source.getDependencies();
1458 if ( !src.isEmpty() )
1459 {
1460 List<Dependency> tgt = target.getDependencies();
1461 Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
1462
1463 for ( Dependency element : tgt )
1464 {
1465 Object key = getDependencyKey( element );
1466 merged.put( key, element );
1467 }
1468
1469 for ( Dependency element : src )
1470 {
1471 Object key = getDependencyKey( element );
1472 if ( sourceDominant || !merged.containsKey( key ) )
1473 {
1474 merged.put( key, element );
1475 }
1476 }
1477
1478 target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
1479 }
1480 }
1481
1482 protected void mergeParent( Parent target, Parent source, boolean sourceDominant, Map<Object, Object> context )
1483 {
1484 mergeParent_GroupId( target, source, sourceDominant, context );
1485 mergeParent_ArtifactId( target, source, sourceDominant, context );
1486 mergeParent_Version( target, source, sourceDominant, context );
1487 mergeParent_RelativePath( target, source, sourceDominant, context );
1488 }
1489
1490 protected void mergeParent_GroupId( Parent target, Parent source, boolean sourceDominant,
1491 Map<Object, Object> context )
1492 {
1493 String src = source.getGroupId();
1494 if ( src != null )
1495 {
1496 if ( sourceDominant || target.getGroupId() == null )
1497 {
1498 target.setGroupId( src );
1499 target.setLocation( "groupId", source.getLocation( "groupId" ) );
1500 }
1501 }
1502 }
1503
1504 protected void mergeParent_ArtifactId( Parent target, Parent source, boolean sourceDominant,
1505 Map<Object, Object> context )
1506 {
1507 String src = source.getArtifactId();
1508 if ( src != null )
1509 {
1510 if ( sourceDominant || target.getArtifactId() == null )
1511 {
1512 target.setArtifactId( src );
1513 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
1514 }
1515 }
1516 }
1517
1518 protected void mergeParent_Version( Parent target, Parent source, boolean sourceDominant,
1519 Map<Object, Object> context )
1520 {
1521 String src = source.getVersion();
1522 if ( src != null )
1523 {
1524 if ( sourceDominant || target.getVersion() == null )
1525 {
1526 target.setVersion( src );
1527 target.setLocation( "version", source.getLocation( "version" ) );
1528 }
1529 }
1530 }
1531
1532 protected void mergeParent_RelativePath( Parent target, Parent source, boolean sourceDominant,
1533 Map<Object, Object> context )
1534 {
1535 String src = source.getRelativePath();
1536 if ( src != null )
1537 {
1538 if ( sourceDominant || target.getRelativePath() == null )
1539 {
1540 target.setRelativePath( src );
1541 target.setLocation( "relativePath", source.getLocation( "relativePath" ) );
1542 }
1543 }
1544 }
1545
1546 protected void mergeOrganization( Organization target, Organization source, boolean sourceDominant,
1547 Map<Object, Object> context )
1548 {
1549 mergeOrganization_Name( target, source, sourceDominant, context );
1550 mergeOrganization_Url( target, source, sourceDominant, context );
1551 }
1552
1553 protected void mergeOrganization_Name( Organization target, Organization source, boolean sourceDominant,
1554 Map<Object, Object> context )
1555 {
1556 String src = source.getName();
1557 if ( src != null )
1558 {
1559 if ( sourceDominant || target.getName() == null )
1560 {
1561 target.setName( src );
1562 target.setLocation( "name", source.getLocation( "name" ) );
1563 }
1564 }
1565 }
1566
1567 protected void mergeOrganization_Url( Organization target, Organization source, boolean sourceDominant,
1568 Map<Object, Object> context )
1569 {
1570 String src = source.getUrl();
1571 if ( src != null )
1572 {
1573 if ( sourceDominant || target.getUrl() == null )
1574 {
1575 target.setUrl( src );
1576 target.setLocation( "url", source.getLocation( "url" ) );
1577 }
1578 }
1579 }
1580
1581 protected void mergeLicense( License target, License source, boolean sourceDominant, Map<Object, Object> context )
1582 {
1583 mergeLicense_Name( target, source, sourceDominant, context );
1584 mergeLicense_Url( target, source, sourceDominant, context );
1585 mergeLicense_Distribution( target, source, sourceDominant, context );
1586 mergeLicense_Comments( target, source, sourceDominant, context );
1587 }
1588
1589 protected void mergeLicense_Name( License target, License source, boolean sourceDominant,
1590 Map<Object, Object> context )
1591 {
1592 String src = source.getName();
1593 if ( src != null )
1594 {
1595 if ( sourceDominant || target.getName() == null )
1596 {
1597 target.setName( src );
1598 target.setLocation( "name", source.getLocation( "name" ) );
1599 }
1600 }
1601 }
1602
1603 protected void mergeLicense_Url( License target, License source, boolean sourceDominant,
1604 Map<Object, Object> context )
1605 {
1606 String src = source.getUrl();
1607 if ( src != null )
1608 {
1609 if ( sourceDominant || target.getUrl() == null )
1610 {
1611 target.setUrl( src );
1612 target.setLocation( "url", source.getLocation( "url" ) );
1613 }
1614 }
1615 }
1616
1617 protected void mergeLicense_Distribution( License target, License source, boolean sourceDominant,
1618 Map<Object, Object> context )
1619 {
1620 String src = source.getDistribution();
1621 if ( src != null )
1622 {
1623 if ( sourceDominant || target.getDistribution() == null )
1624 {
1625 target.setDistribution( src );
1626 target.setLocation( "distribution", source.getLocation( "distribution" ) );
1627 }
1628 }
1629 }
1630
1631 protected void mergeLicense_Comments( License target, License source, boolean sourceDominant,
1632 Map<Object, Object> context )
1633 {
1634 String src = source.getComments();
1635 if ( src != null )
1636 {
1637 if ( sourceDominant || target.getComments() == null )
1638 {
1639 target.setComments( src );
1640 target.setLocation( "comments", source.getLocation( "comments" ) );
1641 }
1642 }
1643 }
1644
1645 protected void mergeMailingList( MailingList target, MailingList source, boolean sourceDominant,
1646 Map<Object, Object> context )
1647 {
1648 mergeMailingList_Name( target, source, sourceDominant, context );
1649 mergeMailingList_Subscribe( target, source, sourceDominant, context );
1650 mergeMailingList_Unsubscribe( target, source, sourceDominant, context );
1651 mergeMailingList_Post( target, source, sourceDominant, context );
1652 mergeMailingList_OtherArchives( target, source, sourceDominant, context );
1653 }
1654
1655 protected void mergeMailingList_Name( MailingList target, MailingList source, boolean sourceDominant,
1656 Map<Object, Object> context )
1657 {
1658 String src = source.getName();
1659 if ( src != null )
1660 {
1661 if ( sourceDominant || target.getName() == null )
1662 {
1663 target.setName( src );
1664 target.setLocation( "name", source.getLocation( "name" ) );
1665 }
1666 }
1667 }
1668
1669 protected void mergeMailingList_Subscribe( MailingList target, MailingList source, boolean sourceDominant,
1670 Map<Object, Object> context )
1671 {
1672 String src = source.getSubscribe();
1673 if ( src != null )
1674 {
1675 if ( sourceDominant || target.getSubscribe() == null )
1676 {
1677 target.setSubscribe( src );
1678 target.setLocation( "subscribe", source.getLocation( "subscribe" ) );
1679 }
1680 }
1681 }
1682
1683 protected void mergeMailingList_Unsubscribe( MailingList target, MailingList source, boolean sourceDominant,
1684 Map<Object, Object> context )
1685 {
1686 String src = source.getUnsubscribe();
1687 if ( src != null )
1688 {
1689 if ( sourceDominant || target.getUnsubscribe() == null )
1690 {
1691 target.setUnsubscribe( src );
1692 target.setLocation( "unsubscribe", source.getLocation( "unsubscribe" ) );
1693 }
1694 }
1695 }
1696
1697 protected void mergeMailingList_Post( MailingList target, MailingList source, boolean sourceDominant,
1698 Map<Object, Object> context )
1699 {
1700 String src = source.getPost();
1701 if ( src != null )
1702 {
1703 if ( sourceDominant || target.getPost() == null )
1704 {
1705 target.setPost( src );
1706 target.setLocation( "post", source.getLocation( "post" ) );
1707 }
1708 }
1709 }
1710
1711 protected void mergeMailingList_Archive( MailingList target, MailingList source, boolean sourceDominant,
1712 Map<Object, Object> context )
1713 {
1714 String src = source.getArchive();
1715 if ( src != null )
1716 {
1717 if ( sourceDominant || target.getArchive() == null )
1718 {
1719 target.setArchive( src );
1720 target.setLocation( "archive", source.getLocation( "archive" ) );
1721 }
1722 }
1723 }
1724
1725 protected void mergeMailingList_OtherArchives( MailingList target, MailingList source, boolean sourceDominant,
1726 Map<Object, Object> context )
1727 {
1728 List<String> src = source.getOtherArchives();
1729 if ( !src.isEmpty() )
1730 {
1731 List<String> tgt = target.getOtherArchives();
1732 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
1733 merged.addAll( tgt );
1734 merged.addAll( src );
1735 target.setOtherArchives( merged );
1736 }
1737 }
1738
1739 protected void mergeDeveloper( Developer target, Developer source, boolean sourceDominant,
1740 Map<Object, Object> context )
1741 {
1742 mergeContributor( target, source, sourceDominant, context );
1743 mergeDeveloper_Id( target, source, sourceDominant, context );
1744 }
1745
1746 protected void mergeDeveloper_Id( Developer target, Developer source, boolean sourceDominant,
1747 Map<Object, Object> context )
1748 {
1749 String src = source.getId();
1750 if ( src != null )
1751 {
1752 if ( sourceDominant || target.getId() == null )
1753 {
1754 target.setId( src );
1755 target.setLocation( "id", source.getLocation( "id" ) );
1756 }
1757 }
1758 }
1759
1760 protected void mergeContributor( Contributor target, Contributor source, boolean sourceDominant,
1761 Map<Object, Object> context )
1762 {
1763 mergeContributor_Name( target, source, sourceDominant, context );
1764 mergeContributor_Email( target, source, sourceDominant, context );
1765 mergeContributor_Url( target, source, sourceDominant, context );
1766 mergeContributor_Organization( target, source, sourceDominant, context );
1767 mergeContributor_OrganizationUrl( target, source, sourceDominant, context );
1768 mergeContributor_Timezone( target, source, sourceDominant, context );
1769 mergeContributor_Roles( target, source, sourceDominant, context );
1770 mergeContributor_Properties( target, source, sourceDominant, context );
1771 }
1772
1773 protected void mergeContributor_Name( Contributor target, Contributor source, boolean sourceDominant,
1774 Map<Object, Object> context )
1775 {
1776 String src = source.getName();
1777 if ( src != null )
1778 {
1779 if ( sourceDominant || target.getName() == null )
1780 {
1781 target.setName( src );
1782 target.setLocation( "name", source.getLocation( "name" ) );
1783 }
1784 }
1785 }
1786
1787 protected void mergeContributor_Email( Contributor target, Contributor source, boolean sourceDominant,
1788 Map<Object, Object> context )
1789 {
1790 String src = source.getEmail();
1791 if ( src != null )
1792 {
1793 if ( sourceDominant || target.getEmail() == null )
1794 {
1795 target.setEmail( src );
1796 target.setLocation( "email", source.getLocation( "email" ) );
1797 }
1798 }
1799 }
1800
1801 protected void mergeContributor_Url( Contributor target, Contributor source, boolean sourceDominant,
1802 Map<Object, Object> context )
1803 {
1804 String src = source.getUrl();
1805 if ( src != null )
1806 {
1807 if ( sourceDominant || target.getUrl() == null )
1808 {
1809 target.setUrl( src );
1810 target.setLocation( "url", source.getLocation( "url" ) );
1811 }
1812 }
1813 }
1814
1815 protected void mergeContributor_Organization( Contributor target, Contributor source, boolean sourceDominant,
1816 Map<Object, Object> context )
1817 {
1818 String src = source.getOrganization();
1819 if ( src != null )
1820 {
1821 if ( sourceDominant || target.getOrganization() == null )
1822 {
1823 target.setOrganization( src );
1824 target.setLocation( "organization", source.getLocation( "organization" ) );
1825 }
1826 }
1827 }
1828
1829 protected void mergeContributor_OrganizationUrl( Contributor target, Contributor source, boolean sourceDominant,
1830 Map<Object, Object> context )
1831 {
1832 String src = source.getOrganizationUrl();
1833 if ( src != null )
1834 {
1835 if ( sourceDominant || target.getOrganizationUrl() == null )
1836 {
1837 target.setOrganizationUrl( src );
1838 target.setLocation( "organizationUrl", source.getLocation( "organizationUrl" ) );
1839 }
1840 }
1841 }
1842
1843 protected void mergeContributor_Timezone( Contributor target, Contributor source, boolean sourceDominant,
1844 Map<Object, Object> context )
1845 {
1846 String src = source.getTimezone();
1847 if ( src != null )
1848 {
1849 if ( sourceDominant || target.getTimezone() == null )
1850 {
1851 target.setTimezone( src );
1852 target.setLocation( "timezone", source.getLocation( "timezone" ) );
1853 }
1854 }
1855 }
1856
1857 protected void mergeContributor_Roles( Contributor target, Contributor source, boolean sourceDominant,
1858 Map<Object, Object> context )
1859 {
1860 List<String> src = source.getRoles();
1861 if ( !src.isEmpty() )
1862 {
1863 List<String> tgt = target.getRoles();
1864 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
1865 merged.addAll( tgt );
1866 merged.addAll( src );
1867 target.setRoles( merged );
1868 }
1869 }
1870
1871 protected void mergeContributor_Properties( Contributor target, Contributor source, boolean sourceDominant,
1872 Map<Object, Object> context )
1873 {
1874 Properties merged = new Properties();
1875 if ( sourceDominant )
1876 {
1877 merged.putAll( target.getProperties() );
1878 merged.putAll( source.getProperties() );
1879 }
1880 else
1881 {
1882 merged.putAll( source.getProperties() );
1883 merged.putAll( target.getProperties() );
1884 }
1885 target.setProperties( merged );
1886 target.setLocation( "properties", InputLocation.merge( target.getLocation( "properties" ),
1887 source.getLocation( "properties" ), sourceDominant ) );
1888 }
1889
1890 protected void mergeIssueManagement( IssueManagement target, IssueManagement source, boolean sourceDominant,
1891 Map<Object, Object> context )
1892 {
1893 mergeIssueManagement_Url( target, source, sourceDominant, context );
1894 mergeIssueManagement_System( target, source, sourceDominant, context );
1895 }
1896
1897 protected void mergeIssueManagement_System( IssueManagement target, IssueManagement source, boolean sourceDominant,
1898 Map<Object, Object> context )
1899 {
1900 String src = source.getSystem();
1901 if ( src != null )
1902 {
1903 if ( sourceDominant || target.getSystem() == null )
1904 {
1905 target.setSystem( src );
1906 target.setLocation( "system", source.getLocation( "system" ) );
1907 }
1908 }
1909 }
1910
1911 protected void mergeIssueManagement_Url( IssueManagement target, IssueManagement source, boolean sourceDominant,
1912 Map<Object, Object> context )
1913 {
1914 String src = source.getUrl();
1915 if ( src != null )
1916 {
1917 if ( sourceDominant || target.getUrl() == null )
1918 {
1919 target.setUrl( src );
1920 target.setLocation( "url", source.getLocation( "url" ) );
1921 }
1922 }
1923 }
1924
1925 protected void mergeScm( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
1926 {
1927 mergeScm_Url( target, source, sourceDominant, context );
1928 mergeScm_Connection( target, source, sourceDominant, context );
1929 mergeScm_DeveloperConnection( target, source, sourceDominant, context );
1930 mergeScm_Tag( target, source, sourceDominant, context );
1931 }
1932
1933 protected void mergeScm_Url( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
1934 {
1935 String src = source.getUrl();
1936 if ( src != null )
1937 {
1938 if ( sourceDominant || target.getUrl() == null )
1939 {
1940 target.setUrl( src );
1941 target.setLocation( "url", source.getLocation( "url" ) );
1942 }
1943 }
1944 }
1945
1946 protected void mergeScm_Connection( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
1947 {
1948 String src = source.getConnection();
1949 if ( src != null )
1950 {
1951 if ( sourceDominant || target.getConnection() == null )
1952 {
1953 target.setConnection( src );
1954 target.setLocation( "connection", source.getLocation( "connection" ) );
1955 }
1956 }
1957 }
1958
1959 protected void mergeScm_DeveloperConnection( Scm target, Scm source, boolean sourceDominant,
1960 Map<Object, Object> context )
1961 {
1962 String src = source.getDeveloperConnection();
1963 if ( src != null )
1964 {
1965 if ( sourceDominant || target.getDeveloperConnection() == null )
1966 {
1967 target.setDeveloperConnection( src );
1968 target.setLocation( "developerConnection", source.getLocation( "developerConnection" ) );
1969 }
1970 }
1971 }
1972
1973 protected void mergeScm_Tag( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
1974 {
1975 String src = source.getTag();
1976 if ( src != null )
1977 {
1978 if ( sourceDominant || target.getTag() == null )
1979 {
1980 target.setTag( src );
1981 target.setLocation( "tag", source.getLocation( "tag" ) );
1982 }
1983 }
1984 }
1985
1986 protected void mergeCiManagement( CiManagement target, CiManagement source, boolean sourceDominant,
1987 Map<Object, Object> context )
1988 {
1989 mergeCiManagement_System( target, source, sourceDominant, context );
1990 mergeCiManagement_Url( target, source, sourceDominant, context );
1991 mergeCiManagement_Notifiers( target, source, sourceDominant, context );
1992 }
1993
1994 protected void mergeCiManagement_System( CiManagement target, CiManagement source, boolean sourceDominant,
1995 Map<Object, Object> context )
1996 {
1997 String src = source.getSystem();
1998 if ( src != null )
1999 {
2000 if ( sourceDominant || target.getSystem() == null )
2001 {
2002 target.setSystem( src );
2003 target.setLocation( "system", source.getLocation( "system" ) );
2004 }
2005 }
2006 }
2007
2008 protected void mergeCiManagement_Url( CiManagement target, CiManagement source, boolean sourceDominant,
2009 Map<Object, Object> context )
2010 {
2011 String src = source.getUrl();
2012 if ( src != null )
2013 {
2014 if ( sourceDominant || target.getUrl() == null )
2015 {
2016 target.setUrl( src );
2017 target.setLocation( "url", source.getLocation( "url" ) );
2018 }
2019 }
2020 }
2021
2022 protected void mergeCiManagement_Notifiers( CiManagement target, CiManagement source, boolean sourceDominant,
2023 Map<Object, Object> context )
2024 {
2025 List<Notifier> src = source.getNotifiers();
2026 if ( !src.isEmpty() )
2027 {
2028 List<Notifier> tgt = target.getNotifiers();
2029 Map<Object, Notifier> merged = new LinkedHashMap<Object, Notifier>( ( src.size() + tgt.size() ) * 2 );
2030
2031 for ( Notifier element : tgt )
2032 {
2033 Object key = getNotifierKey( element );
2034 merged.put( key, element );
2035 }
2036
2037 for ( Notifier element : src )
2038 {
2039 Object key = getNotifierKey( element );
2040 if ( sourceDominant || !merged.containsKey( key ) )
2041 {
2042 merged.put( key, element );
2043 }
2044 }
2045
2046 target.setNotifiers( new ArrayList<Notifier>( merged.values() ) );
2047 }
2048 }
2049
2050 protected void mergeNotifier( Notifier target, Notifier source, boolean sourceDominant,
2051 Map<Object, Object> context )
2052 {
2053 mergeNotifier_Type( target, source, sourceDominant, context );
2054 mergeNotifier_Address( target, source, sourceDominant, context );
2055 mergeNotifier_Configuration( target, source, sourceDominant, context );
2056 mergeNotifier_SendOnError( target, source, sourceDominant, context );
2057 mergeNotifier_SendOnFailure( target, source, sourceDominant, context );
2058 mergeNotifier_SendOnSuccess( target, source, sourceDominant, context );
2059 mergeNotifier_SendOnWarning( target, source, sourceDominant, context );
2060 }
2061
2062 protected void mergeNotifier_Type( Notifier target, Notifier source, boolean sourceDominant,
2063 Map<Object, Object> context )
2064 {
2065 String src = source.getType();
2066 if ( src != null )
2067 {
2068 if ( sourceDominant || target.getType() == null )
2069 {
2070 target.setType( src );
2071 }
2072 }
2073 }
2074
2075 protected void mergeNotifier_Address( Notifier target, Notifier source, boolean sourceDominant,
2076 Map<Object, Object> context )
2077 {
2078 String src = source.getAddress();
2079 if ( src != null )
2080 {
2081 if ( sourceDominant || target.getAddress() == null )
2082 {
2083 target.setAddress( src );
2084 }
2085 }
2086 }
2087
2088 protected void mergeNotifier_Configuration( Notifier target, Notifier source, boolean sourceDominant,
2089 Map<Object, Object> context )
2090 {
2091 Properties merged = new Properties();
2092 if ( sourceDominant )
2093 {
2094 merged.putAll( target.getConfiguration() );
2095 merged.putAll( source.getConfiguration() );
2096 }
2097 else
2098 {
2099 merged.putAll( source.getConfiguration() );
2100 merged.putAll( target.getConfiguration() );
2101 }
2102 target.setConfiguration( merged );
2103 }
2104
2105 protected void mergeNotifier_SendOnError( Notifier target, Notifier source, boolean sourceDominant,
2106 Map<Object, Object> context )
2107 {
2108 if ( sourceDominant )
2109 {
2110 target.setSendOnError( source.isSendOnError() );
2111 }
2112 }
2113
2114 protected void mergeNotifier_SendOnFailure( Notifier target, Notifier source, boolean sourceDominant,
2115 Map<Object, Object> context )
2116 {
2117 if ( sourceDominant )
2118 {
2119 target.setSendOnFailure( source.isSendOnFailure() );
2120 }
2121 }
2122
2123 protected void mergeNotifier_SendOnSuccess( Notifier target, Notifier source, boolean sourceDominant,
2124 Map<Object, Object> context )
2125 {
2126 if ( sourceDominant )
2127 {
2128 target.setSendOnSuccess( source.isSendOnSuccess() );
2129 }
2130 }
2131
2132 protected void mergeNotifier_SendOnWarning( Notifier target, Notifier source, boolean sourceDominant,
2133 Map<Object, Object> context )
2134 {
2135 if ( sourceDominant )
2136 {
2137 target.setSendOnWarning( source.isSendOnWarning() );
2138 }
2139 }
2140
2141 protected void mergePrerequisites( Prerequisites target, Prerequisites source, boolean sourceDominant,
2142 Map<Object, Object> context )
2143 {
2144 mergePrerequisites_Maven( target, source, sourceDominant, context );
2145 }
2146
2147 protected void mergePrerequisites_Maven( Prerequisites target, Prerequisites source, boolean sourceDominant,
2148 Map<Object, Object> context )
2149 {
2150 String src = source.getMaven();
2151 if ( src != null )
2152 {
2153 if ( sourceDominant || target.getMaven() == null )
2154 {
2155 target.setMaven( src );
2156 target.setLocation( "maven", source.getLocation( "maven" ) );
2157 }
2158 }
2159 }
2160
2161 protected void mergeBuild( Build target, Build source, boolean sourceDominant, Map<Object, Object> context )
2162 {
2163 mergeBuildBase( target, source, sourceDominant, context );
2164 mergeBuild_SourceDirectory( target, source, sourceDominant, context );
2165 mergeBuild_ScriptSourceDirectory( target, source, sourceDominant, context );
2166 mergeBuild_TestSourceDirectory( target, source, sourceDominant, context );
2167 mergeBuild_OutputDirectory( target, source, sourceDominant, context );
2168 mergeBuild_TestOutputDirectory( target, source, sourceDominant, context );
2169 mergeBuild_Extensions( target, source, sourceDominant, context );
2170 }
2171
2172 protected void mergeBuild_SourceDirectory( Build target, Build source, boolean sourceDominant,
2173 Map<Object, Object> context )
2174 {
2175 String src = source.getSourceDirectory();
2176 if ( src != null )
2177 {
2178 if ( sourceDominant || target.getSourceDirectory() == null )
2179 {
2180 target.setSourceDirectory( src );
2181 target.setLocation( "sourceDirectory", source.getLocation( "sourceDirectory" ) );
2182 }
2183 }
2184 }
2185
2186 protected void mergeBuild_ScriptSourceDirectory( Build target, Build source, boolean sourceDominant,
2187 Map<Object, Object> context )
2188 {
2189 String src = source.getScriptSourceDirectory();
2190 if ( src != null )
2191 {
2192 if ( sourceDominant || target.getScriptSourceDirectory() == null )
2193 {
2194 target.setScriptSourceDirectory( src );
2195 target.setLocation( "scriptSourceDirectory", source.getLocation( "scriptSourceDirectory" ) );
2196 }
2197 }
2198 }
2199
2200 protected void mergeBuild_TestSourceDirectory( Build target, Build source, boolean sourceDominant,
2201 Map<Object, Object> context )
2202 {
2203 String src = source.getTestSourceDirectory();
2204 if ( src != null )
2205 {
2206 if ( sourceDominant || target.getTestSourceDirectory() == null )
2207 {
2208 target.setTestSourceDirectory( src );
2209 target.setLocation( "testSourceDirectory", source.getLocation( "testSourceDirectory" ) );
2210 }
2211 }
2212 }
2213
2214 protected void mergeBuild_OutputDirectory( Build target, Build source, boolean sourceDominant,
2215 Map<Object, Object> context )
2216 {
2217 String src = source.getOutputDirectory();
2218 if ( src != null )
2219 {
2220 if ( sourceDominant || target.getOutputDirectory() == null )
2221 {
2222 target.setOutputDirectory( src );
2223 target.setLocation( "outputDirectory", source.getLocation( "outputDirectory" ) );
2224 }
2225 }
2226 }
2227
2228 protected void mergeBuild_TestOutputDirectory( Build target, Build source, boolean sourceDominant,
2229 Map<Object, Object> context )
2230 {
2231 String src = source.getTestOutputDirectory();
2232 if ( src != null )
2233 {
2234 if ( sourceDominant || target.getTestOutputDirectory() == null )
2235 {
2236 target.setTestOutputDirectory( src );
2237 target.setLocation( "testOutputDirectory", source.getLocation( "testOutputDirectory" ) );
2238 }
2239 }
2240 }
2241
2242 protected void mergeBuild_Extensions( Build target, Build source, boolean sourceDominant,
2243 Map<Object, Object> context )
2244 {
2245 List<Extension> src = source.getExtensions();
2246 if ( !src.isEmpty() )
2247 {
2248 List<Extension> tgt = target.getExtensions();
2249 Map<Object, Extension> merged = new LinkedHashMap<Object, Extension>( ( src.size() + tgt.size() ) * 2 );
2250
2251 for ( Extension element : tgt )
2252 {
2253 Object key = getExtensionKey( element );
2254 merged.put( key, element );
2255 }
2256
2257 for ( Extension element : src )
2258 {
2259 Object key = getExtensionKey( element );
2260 if ( sourceDominant || !merged.containsKey( key ) )
2261 {
2262 merged.put( key, element );
2263 }
2264 }
2265
2266 target.setExtensions( new ArrayList<Extension>( merged.values() ) );
2267 }
2268 }
2269
2270 protected void mergeExtension( Extension target, Extension source, boolean sourceDominant,
2271 Map<Object, Object> context )
2272 {
2273 mergeExtension_GroupId( target, source, sourceDominant, context );
2274 mergeExtension_ArtifactId( target, source, sourceDominant, context );
2275 mergeExtension_Version( target, source, sourceDominant, context );
2276 }
2277
2278 protected void mergeExtension_GroupId( Extension target, Extension source, boolean sourceDominant,
2279 Map<Object, Object> context )
2280 {
2281 String src = source.getGroupId();
2282 if ( src != null )
2283 {
2284 if ( sourceDominant || target.getGroupId() == null )
2285 {
2286 target.setGroupId( src );
2287 target.setLocation( "groupId", source.getLocation( "groupId" ) );
2288 }
2289 }
2290 }
2291
2292 protected void mergeExtension_ArtifactId( Extension target, Extension source, boolean sourceDominant,
2293 Map<Object, Object> context )
2294 {
2295 String src = source.getArtifactId();
2296 if ( src != null )
2297 {
2298 if ( sourceDominant || target.getArtifactId() == null )
2299 {
2300 target.setArtifactId( src );
2301 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
2302 }
2303 }
2304 }
2305
2306 protected void mergeExtension_Version( Extension target, Extension source, boolean sourceDominant,
2307 Map<Object, Object> context )
2308 {
2309 String src = source.getVersion();
2310 if ( src != null )
2311 {
2312 if ( sourceDominant || target.getVersion() == null )
2313 {
2314 target.setVersion( src );
2315 target.setLocation( "version", source.getLocation( "version" ) );
2316 }
2317 }
2318 }
2319
2320 protected void mergeBuildBase( BuildBase target, BuildBase source, boolean sourceDominant,
2321 Map<Object, Object> context )
2322 {
2323 mergePluginConfiguration( target, source, sourceDominant, context );
2324 mergeBuildBase_DefaultGoal( target, source, sourceDominant, context );
2325 mergeBuildBase_FinalName( target, source, sourceDominant, context );
2326 mergeBuildBase_Directory( target, source, sourceDominant, context );
2327 mergeBuildBase_Resources( target, source, sourceDominant, context );
2328 mergeBuildBase_TestResources( target, source, sourceDominant, context );
2329 mergeBuildBase_Filters( target, source, sourceDominant, context );
2330 }
2331
2332 protected void mergeBuildBase_DefaultGoal( BuildBase target, BuildBase source, boolean sourceDominant,
2333 Map<Object, Object> context )
2334 {
2335 String src = source.getDefaultGoal();
2336 if ( src != null )
2337 {
2338 if ( sourceDominant || target.getDefaultGoal() == null )
2339 {
2340 target.setDefaultGoal( src );
2341 target.setLocation( "defaultGoal", source.getLocation( "defaultGoal" ) );
2342 }
2343 }
2344 }
2345
2346 protected void mergeBuildBase_Directory( BuildBase target, BuildBase source, boolean sourceDominant,
2347 Map<Object, Object> context )
2348 {
2349 String src = source.getDirectory();
2350 if ( src != null )
2351 {
2352 if ( sourceDominant || target.getDirectory() == null )
2353 {
2354 target.setDirectory( src );
2355 target.setLocation( "directory", source.getLocation( "directory" ) );
2356 }
2357 }
2358 }
2359
2360 protected void mergeBuildBase_FinalName( BuildBase target, BuildBase source, boolean sourceDominant,
2361 Map<Object, Object> context )
2362 {
2363 String src = source.getFinalName();
2364 if ( src != null )
2365 {
2366 if ( sourceDominant || target.getFinalName() == null )
2367 {
2368 target.setFinalName( src );
2369 target.setLocation( "finalName", source.getLocation( "finalName" ) );
2370 }
2371 }
2372 }
2373
2374 protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, boolean sourceDominant,
2375 Map<Object, Object> context )
2376 {
2377 List<String> src = source.getFilters();
2378 if ( !src.isEmpty() )
2379 {
2380 List<String> tgt = target.getFilters();
2381 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
2382 merged.addAll( tgt );
2383 merged.addAll( src );
2384 target.setFilters( merged );
2385 }
2386 }
2387
2388 protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant,
2389 Map<Object, Object> context )
2390 {
2391 List<Resource> src = source.getResources();
2392 if ( !src.isEmpty() )
2393 {
2394 List<Resource> tgt = target.getResources();
2395 Map<Object, Resource> merged = new LinkedHashMap<Object, Resource>( ( src.size() + tgt.size() ) * 2 );
2396
2397 for ( Resource element : tgt )
2398 {
2399 Object key = getResourceKey( element );
2400 merged.put( key, element );
2401 }
2402
2403 for ( Resource element : src )
2404 {
2405 Object key = getResourceKey( element );
2406 if ( sourceDominant || !merged.containsKey( key ) )
2407 {
2408 merged.put( key, element );
2409 }
2410 }
2411
2412 target.setResources( new ArrayList<Resource>( merged.values() ) );
2413 }
2414 }
2415
2416 protected void mergeBuildBase_TestResources( BuildBase target, BuildBase source, boolean sourceDominant,
2417 Map<Object, Object> context )
2418 {
2419 List<Resource> src = source.getTestResources();
2420 if ( !src.isEmpty() )
2421 {
2422 List<Resource> tgt = target.getTestResources();
2423 Map<Object, Resource> merged = new LinkedHashMap<Object, Resource>( ( src.size() + tgt.size() ) * 2 );
2424
2425 for ( Resource element : tgt )
2426 {
2427 Object key = getResourceKey( element );
2428 merged.put( key, element );
2429 }
2430
2431 for ( Resource element : src )
2432 {
2433 Object key = getResourceKey( element );
2434 if ( sourceDominant || !merged.containsKey( key ) )
2435 {
2436 merged.put( key, element );
2437 }
2438 }
2439
2440 target.setTestResources( new ArrayList<Resource>( merged.values() ) );
2441 }
2442 }
2443
2444 protected void mergePluginConfiguration( PluginConfiguration target, PluginConfiguration source,
2445 boolean sourceDominant, Map<Object, Object> context )
2446 {
2447 mergePluginContainer( target, source, sourceDominant, context );
2448 mergePluginConfiguration_PluginManagement( target, source, sourceDominant, context );
2449 }
2450
2451 protected void mergePluginConfiguration_PluginManagement( PluginConfiguration target, PluginConfiguration source,
2452 boolean sourceDominant, Map<Object, Object> context )
2453 {
2454 PluginManagement src = source.getPluginManagement();
2455 if ( src != null )
2456 {
2457 PluginManagement tgt = target.getPluginManagement();
2458 if ( tgt == null )
2459 {
2460 tgt = new PluginManagement();
2461 target.setPluginManagement( tgt );
2462 }
2463 mergePluginManagement( tgt, src, sourceDominant, context );
2464 }
2465 }
2466
2467 protected void mergePluginContainer( PluginContainer target, PluginContainer source, boolean sourceDominant,
2468 Map<Object, Object> context )
2469 {
2470 mergePluginContainer_Plugins( target, source, sourceDominant, context );
2471 }
2472
2473 protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
2474 boolean sourceDominant, Map<Object, Object> context )
2475 {
2476 List<Plugin> src = source.getPlugins();
2477 if ( !src.isEmpty() )
2478 {
2479 List<Plugin> tgt = target.getPlugins();
2480 Map<Object, Plugin> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
2481
2482 for ( Plugin element : tgt )
2483 {
2484 Object key = getPluginKey( element );
2485 merged.put( key, element );
2486 }
2487
2488 for ( Plugin element : src )
2489 {
2490 Object key = getPluginKey( element );
2491 if ( sourceDominant || !merged.containsKey( key ) )
2492 {
2493 merged.put( key, element );
2494 }
2495 }
2496
2497 target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
2498 }
2499 }
2500
2501 protected void mergePluginManagement( PluginManagement target, PluginManagement source, boolean sourceDominant,
2502 Map<Object, Object> context )
2503 {
2504 mergePluginContainer( target, source, sourceDominant, context );
2505 }
2506
2507 protected void mergePlugin( Plugin target, Plugin source, boolean sourceDominant, Map<Object, Object> context )
2508 {
2509 mergeConfigurationContainer( target, source, sourceDominant, context );
2510 mergePlugin_GroupId( target, source, sourceDominant, context );
2511 mergePlugin_ArtifactId( target, source, sourceDominant, context );
2512 mergePlugin_Version( target, source, sourceDominant, context );
2513 mergePlugin_Extensions( target, source, sourceDominant, context );
2514 mergePlugin_Dependencies( target, source, sourceDominant, context );
2515 mergePlugin_Executions( target, source, sourceDominant, context );
2516 }
2517
2518 protected void mergePlugin_GroupId( Plugin target, Plugin source, boolean sourceDominant,
2519 Map<Object, Object> context )
2520 {
2521 String src = source.getGroupId();
2522 if ( src != null )
2523 {
2524 if ( sourceDominant || target.getGroupId() == null )
2525 {
2526 target.setGroupId( src );
2527 target.setLocation( "groupId", source.getLocation( "groupId" ) );
2528 }
2529 }
2530 }
2531
2532 protected void mergePlugin_ArtifactId( Plugin target, Plugin source, boolean sourceDominant,
2533 Map<Object, Object> context )
2534 {
2535 String src = source.getArtifactId();
2536 if ( src != null )
2537 {
2538 if ( sourceDominant || target.getArtifactId() == null )
2539 {
2540 target.setArtifactId( src );
2541 target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
2542 }
2543 }
2544 }
2545
2546 protected void mergePlugin_Version( Plugin target, Plugin source, boolean sourceDominant,
2547 Map<Object, Object> context )
2548 {
2549 String src = source.getVersion();
2550 if ( src != null )
2551 {
2552 if ( sourceDominant || target.getVersion() == null )
2553 {
2554 target.setVersion( src );
2555 target.setLocation( "version", source.getLocation( "version" ) );
2556 }
2557 }
2558 }
2559
2560 protected void mergePlugin_Extensions( Plugin target, Plugin source, boolean sourceDominant,
2561 Map<Object, Object> context )
2562 {
2563 String src = source.getExtensions();
2564 if ( src != null )
2565 {
2566 if ( sourceDominant || target.getExtensions() == null )
2567 {
2568 target.setExtensions( src );
2569 target.setLocation( "extensions", source.getLocation( "extensions" ) );
2570 }
2571 }
2572 }
2573
2574 protected void mergePlugin_Dependencies( Plugin target, Plugin source, boolean sourceDominant,
2575 Map<Object, Object> context )
2576 {
2577 List<Dependency> src = source.getDependencies();
2578 if ( !src.isEmpty() )
2579 {
2580 List<Dependency> tgt = target.getDependencies();
2581 Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
2582
2583 for ( Dependency element : tgt )
2584 {
2585 Object key = getDependencyKey( element );
2586 merged.put( key, element );
2587 }
2588
2589 for ( Dependency element : src )
2590 {
2591 Object key = getDependencyKey( element );
2592 if ( sourceDominant || !merged.containsKey( key ) )
2593 {
2594 merged.put( key, element );
2595 }
2596 }
2597
2598 target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
2599 }
2600 }
2601
2602 protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
2603 Map<Object, Object> context )
2604 {
2605 List<PluginExecution> src = source.getExecutions();
2606 if ( !src.isEmpty() )
2607 {
2608 List<PluginExecution> tgt = target.getExecutions();
2609
2610 Map<Object, PluginExecution> merged =
2611 new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
2612
2613 for ( PluginExecution element : tgt )
2614 {
2615 Object key = getPluginExecutionKey( element );
2616 merged.put( key, element );
2617 }
2618
2619 for ( PluginExecution element : src )
2620 {
2621 Object key = getPluginExecutionKey( element );
2622 if ( sourceDominant || !merged.containsKey( key ) )
2623 {
2624 merged.put( key, element );
2625 }
2626 }
2627
2628 target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
2629 }
2630 }
2631
2632 protected void mergeConfigurationContainer( ConfigurationContainer target, ConfigurationContainer source,
2633 boolean sourceDominant, Map<Object, Object> context )
2634 {
2635 mergeConfigurationContainer_Inherited( target, source, sourceDominant, context );
2636 mergeConfigurationContainer_Configuration( target, source, sourceDominant, context );
2637 }
2638
2639 protected void mergeConfigurationContainer_Inherited( ConfigurationContainer target, ConfigurationContainer source,
2640 boolean sourceDominant, Map<Object, Object> context )
2641 {
2642 String src = source.getInherited();
2643 if ( src != null )
2644 {
2645 if ( sourceDominant || target.getInherited() == null )
2646 {
2647 target.setInherited( src );
2648 target.setLocation( "inherited", source.getLocation( "inherited" ) );
2649 }
2650 }
2651 }
2652
2653 protected void mergeConfigurationContainer_Configuration( ConfigurationContainer target,
2654 ConfigurationContainer source, boolean sourceDominant,
2655 Map<Object, Object> context )
2656 {
2657 Xpp3Dom src = (Xpp3Dom) source.getConfiguration();
2658 if ( src != null )
2659 {
2660 Xpp3Dom tgt = (Xpp3Dom) target.getConfiguration();
2661 if ( sourceDominant || tgt == null )
2662 {
2663 tgt = Xpp3Dom.mergeXpp3Dom( new Xpp3Dom( src ), tgt );
2664 }
2665 else
2666 {
2667 tgt = Xpp3Dom.mergeXpp3Dom( tgt, src );
2668 }
2669 target.setConfiguration( tgt );
2670 }
2671 }
2672
2673 protected void mergePluginExecution( PluginExecution target, PluginExecution source, boolean sourceDominant,
2674 Map<Object, Object> context )
2675 {
2676 mergeConfigurationContainer( target, source, sourceDominant, context );
2677 mergePluginExecution_Id( target, source, sourceDominant, context );
2678 mergePluginExecution_Phase( target, source, sourceDominant, context );
2679 mergePluginExecution_Goals( target, source, sourceDominant, context );
2680 }
2681
2682 protected void mergePluginExecution_Id( PluginExecution target, PluginExecution source, boolean sourceDominant,
2683 Map<Object, Object> context )
2684 {
2685 String src = source.getId();
2686 if ( src != null )
2687 {
2688 if ( sourceDominant || target.getId() == null )
2689 {
2690 target.setId( src );
2691 target.setLocation( "id", source.getLocation( "id" ) );
2692 }
2693 }
2694 }
2695
2696 protected void mergePluginExecution_Phase( PluginExecution target, PluginExecution source, boolean sourceDominant,
2697 Map<Object, Object> context )
2698 {
2699 String src = source.getPhase();
2700 if ( src != null )
2701 {
2702 if ( sourceDominant || target.getPhase() == null )
2703 {
2704 target.setPhase( src );
2705 target.setLocation( "phase", source.getLocation( "phase" ) );
2706 }
2707 }
2708 }
2709
2710 protected void mergePluginExecution_Goals( PluginExecution target, PluginExecution source, boolean sourceDominant,
2711 Map<Object, Object> context )
2712 {
2713 List<String> src = source.getGoals();
2714 if ( !src.isEmpty() )
2715 {
2716 List<String> tgt = target.getGoals();
2717 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
2718 merged.addAll( tgt );
2719 merged.addAll( src );
2720 target.setGoals( merged );
2721 }
2722 }
2723
2724 protected void mergeResource( Resource target, Resource source, boolean sourceDominant,
2725 Map<Object, Object> context )
2726 {
2727 mergeFileSet( target, source, sourceDominant, context );
2728 mergeResource_TargetPath( target, source, sourceDominant, context );
2729 mergeResource_Filtering( target, source, sourceDominant, context );
2730 mergeResource_MergeId( target, source, sourceDominant, context );
2731 }
2732
2733 protected void mergeResource_TargetPath( Resource target, Resource source, boolean sourceDominant,
2734 Map<Object, Object> context )
2735 {
2736 String src = source.getTargetPath();
2737 if ( src != null )
2738 {
2739 if ( sourceDominant || target.getTargetPath() == null )
2740 {
2741 target.setTargetPath( src );
2742 target.setLocation( "targetPath", source.getLocation( "targetPath" ) );
2743 }
2744 }
2745 }
2746
2747 protected void mergeResource_Filtering( Resource target, Resource source, boolean sourceDominant,
2748 Map<Object, Object> context )
2749 {
2750 String src = source.getFiltering();
2751 if ( src != null )
2752 {
2753 if ( sourceDominant || target.getFiltering() == null )
2754 {
2755 target.setFiltering( src );
2756 target.setLocation( "filtering", source.getLocation( "filtering" ) );
2757 }
2758 }
2759 }
2760
2761 protected void mergeResource_MergeId( Resource target, Resource source, boolean sourceDominant,
2762 Map<Object, Object> context )
2763 {
2764 String src = source.getMergeId();
2765 if ( src != null )
2766 {
2767 if ( sourceDominant || target.getMergeId() == null )
2768 {
2769 target.setMergeId( src );
2770 }
2771 }
2772 }
2773
2774 protected void mergeFileSet( FileSet target, FileSet source, boolean sourceDominant, Map<Object, Object> context )
2775 {
2776 mergePatternSet( target, source, sourceDominant, context );
2777 mergeFileSet_Directory( target, source, sourceDominant, context );
2778 }
2779
2780 protected void mergeFileSet_Directory( FileSet target, FileSet source, boolean sourceDominant,
2781 Map<Object, Object> context )
2782 {
2783 String src = source.getDirectory();
2784 if ( src != null )
2785 {
2786 if ( sourceDominant || target.getDirectory() == null )
2787 {
2788 target.setDirectory( src );
2789 target.setLocation( "directory", source.getLocation( "directory" ) );
2790 }
2791 }
2792 }
2793
2794 protected void mergePatternSet( PatternSet target, PatternSet source, boolean sourceDominant,
2795 Map<Object, Object> context )
2796 {
2797 mergePatternSet_Includes( target, source, sourceDominant, context );
2798 mergePatternSet_Excludes( target, source, sourceDominant, context );
2799 }
2800
2801 protected void mergePatternSet_Includes( PatternSet target, PatternSet source, boolean sourceDominant,
2802 Map<Object, Object> context )
2803 {
2804 List<String> src = source.getIncludes();
2805 if ( !src.isEmpty() )
2806 {
2807 List<String> tgt = target.getIncludes();
2808 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
2809 merged.addAll( tgt );
2810 merged.addAll( src );
2811 target.setIncludes( merged );
2812 }
2813 }
2814
2815 protected void mergePatternSet_Excludes( PatternSet target, PatternSet source, boolean sourceDominant,
2816 Map<Object, Object> context )
2817 {
2818 List<String> src = source.getExcludes();
2819 if ( !src.isEmpty() )
2820 {
2821 List<String> tgt = target.getExcludes();
2822 List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
2823 merged.addAll( tgt );
2824 merged.addAll( src );
2825 target.setExcludes( merged );
2826 }
2827 }
2828
2829 protected void mergeProfile( Profile target, Profile source, boolean sourceDominant, Map<Object, Object> context )
2830 {
2831 mergeModelBase( target, source, sourceDominant, context );
2832
2833 }
2834
2835 protected void mergeActivation( Activation target, Activation source, boolean sourceDominant,
2836 Map<Object, Object> context )
2837 {
2838
2839 }
2840
2841 protected Object getDependencyKey( Dependency dependency )
2842 {
2843 return dependency;
2844 }
2845
2846 protected Object getPluginKey( Plugin plugin )
2847 {
2848 return plugin;
2849 }
2850
2851 protected Object getPluginExecutionKey( PluginExecution pluginExecution )
2852 {
2853 return pluginExecution;
2854 }
2855
2856 protected Object getReportPluginKey( ReportPlugin reportPlugin )
2857 {
2858 return reportPlugin;
2859 }
2860
2861 protected Object getReportSetKey( ReportSet reportSet )
2862 {
2863 return reportSet;
2864 }
2865
2866 protected Object getLicenseKey( License license )
2867 {
2868 return license;
2869 }
2870
2871 protected Object getMailingListKey( MailingList mailingList )
2872 {
2873 return mailingList;
2874 }
2875
2876 protected Object getDeveloperKey( Developer developer )
2877 {
2878 return developer;
2879 }
2880
2881 protected Object getContributorKey( Contributor contributor )
2882 {
2883 return contributor;
2884 }
2885
2886 protected Object getProfileKey( Profile profile )
2887 {
2888 return profile;
2889 }
2890
2891 protected Object getRepositoryKey( Repository repository )
2892 {
2893 return getRepositoryBaseKey( repository );
2894 }
2895
2896 protected Object getRepositoryBaseKey( RepositoryBase repositoryBase )
2897 {
2898 return repositoryBase;
2899 }
2900
2901 protected Object getNotifierKey( Notifier notifier )
2902 {
2903 return notifier;
2904 }
2905
2906 protected Object getResourceKey( Resource resource )
2907 {
2908 return resource;
2909 }
2910
2911 protected Object getExtensionKey( Extension extension )
2912 {
2913 return extension;
2914 }
2915
2916 protected Object getExclusionKey( Exclusion exclusion )
2917 {
2918 return exclusion;
2919 }
2920
2921 }