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