aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java')
-rw-r--r--framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java2924
1 files changed, 2924 insertions, 0 deletions
diff --git a/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
new file mode 100644
index 00000000..b671d981
--- /dev/null
+++ b/framework/src/maven/apache-maven-3.3.3/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
@@ -0,0 +1,2924 @@
+package org.apache.maven.model.merge;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.model.Activation;
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.CiManagement;
+import org.apache.maven.model.ConfigurationContainer;
+import org.apache.maven.model.Contributor;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
+import org.apache.maven.model.DeploymentRepository;
+import org.apache.maven.model.Developer;
+import org.apache.maven.model.DistributionManagement;
+import org.apache.maven.model.Exclusion;
+import org.apache.maven.model.Extension;
+import org.apache.maven.model.FileSet;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.IssueManagement;
+import org.apache.maven.model.License;
+import org.apache.maven.model.MailingList;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
+import org.apache.maven.model.Notifier;
+import org.apache.maven.model.Organization;
+import org.apache.maven.model.Parent;
+import org.apache.maven.model.PatternSet;
+import org.apache.maven.model.Plugin;
+import org.apache.maven.model.PluginConfiguration;
+import org.apache.maven.model.PluginContainer;
+import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.Prerequisites;
+import org.apache.maven.model.Profile;
+import org.apache.maven.model.Relocation;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Repository;
+import org.apache.maven.model.RepositoryBase;
+import org.apache.maven.model.RepositoryPolicy;
+import org.apache.maven.model.Resource;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.Site;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+
+/**
+ * This is a hand-crafted prototype of the default model merger that should eventually be generated by Modello by a new
+ * Java plugin. Code structure to merge source (read-only) object into the target object is:<ul>
+ * <li><code>merge<i>Classname</i>( <i>Classname</i> target, <i>Classname</i> source, boolean sourceDominant,
+ * Map<Object, Object> context )</code> for each model class</li>
+ * <li><code>merge<i>Classname</i>_<i>FieldName</i>( <i>Classname</i> target, <i>Classname</i> source, boolean
+ * sourceDominant, Map<Object, Object> context )</code> for each field of each model class</li>
+ * <li><code>Object get<i>Classname</i>Key( <i>Classname</i> <i>classname</i> )</code>
+ * for each class that is used in a list</li>
+ * </ul>
+ * Code is written like it could be generated, with default behaviour to be overridden when necessary.
+ * This is particularly the case for <code>Object get<i>Classname</i>Key( <i>Classname</i> <i>classname</i> )</code>
+ * method, which by default return the object itself and is expected to be overridden to calculate better suited key
+ * value.
+ *
+ * @author Benjamin Bentmann
+ */
+@SuppressWarnings( { "checkstyle:methodname" } )
+public class ModelMerger
+{
+
+ /**
+ * Merges the specified source object into the given target object.
+ *
+ * @param target The target object whose existing contents should be merged with the source, must not be
+ * <code>null</code>.
+ * @param source The (read-only) source object that should be merged into the target object, may be
+ * <code>null</code>.
+ * @param sourceDominant A flag indicating whether either the target object or the source object provides the
+ * dominant data.
+ * @param hints A set of key-value pairs that customized merger implementations can use to carry domain-specific
+ * information along, may be <code>null</code>.
+ */
+ public void merge( Model target, Model source, boolean sourceDominant, Map<?, ?> hints )
+ {
+ if ( target == null )
+ {
+ throw new IllegalArgumentException( "target missing" );
+ }
+
+ if ( source == null )
+ {
+ return;
+ }
+
+ Map<Object, Object> context = new HashMap<Object, Object>();
+ if ( hints != null )
+ {
+ context.putAll( hints );
+ }
+
+ mergeModel( target, source, sourceDominant, context );
+ }
+
+ protected void mergeModel( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeModelBase( target, source, sourceDominant, context );
+
+ mergeModel_ModelVersion( target, source, sourceDominant, context );
+ mergeModel_Parent( target, source, sourceDominant, context );
+ mergeModel_GroupId( target, source, sourceDominant, context );
+ mergeModel_ArtifactId( target, source, sourceDominant, context );
+ mergeModel_Version( target, source, sourceDominant, context );
+ mergeModel_Packaging( target, source, sourceDominant, context );
+ mergeModel_Name( target, source, sourceDominant, context );
+ mergeModel_Description( target, source, sourceDominant, context );
+ mergeModel_Url( target, source, sourceDominant, context );
+ mergeModel_InceptionYear( target, source, sourceDominant, context );
+ mergeModel_Organization( target, source, sourceDominant, context );
+ mergeModel_Licenses( target, source, sourceDominant, context );
+ mergeModel_MailingLists( target, source, sourceDominant, context );
+ mergeModel_Developers( target, source, sourceDominant, context );
+ mergeModel_Contributors( target, source, sourceDominant, context );
+ mergeModel_IssueManagement( target, source, sourceDominant, context );
+ mergeModel_Scm( target, source, sourceDominant, context );
+ mergeModel_CiManagement( target, source, sourceDominant, context );
+ mergeModel_Prerequisites( target, source, sourceDominant, context );
+ mergeModel_Build( target, source, sourceDominant, context );
+ mergeModel_Profiles( target, source, sourceDominant, context );
+ }
+
+ protected void mergeModel_ModelVersion( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getModelVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getModelVersion() == null )
+ {
+ target.setModelVersion( src );
+ target.setLocation( "modelVersion", source.getLocation( "modelVersion" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Parent( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ Parent src = source.getParent();
+ if ( src != null )
+ {
+ Parent tgt = target.getParent();
+ if ( tgt == null )
+ {
+ tgt = new Parent();
+ tgt.setRelativePath( null );
+ target.setParent( tgt );
+ }
+ mergeParent( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_GroupId( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_ArtifactId( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Version( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Packaging( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getPackaging();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getPackaging() == null )
+ {
+ target.setPackaging( src );
+ target.setLocation( "packaging", source.getLocation( "packaging" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Name( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Description( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDescription();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDescription() == null )
+ {
+ target.setDescription( src );
+ target.setLocation( "description", source.getLocation( "description" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Url( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_InceptionYear( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getInceptionYear();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getInceptionYear() == null )
+ {
+ target.setInceptionYear( src );
+ target.setLocation( "inceptionYear", source.getLocation( "inceptionYear" ) );
+ }
+ }
+ }
+
+ protected void mergeModel_Organization( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Organization src = source.getOrganization();
+ if ( src != null )
+ {
+ Organization tgt = target.getOrganization();
+ if ( tgt == null )
+ {
+ tgt = new Organization();
+ target.setOrganization( tgt );
+ }
+ mergeOrganization( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Licenses( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<License> src = source.getLicenses();
+ if ( !src.isEmpty() )
+ {
+ List<License> tgt = target.getLicenses();
+ Map<Object, License> merged = new LinkedHashMap<Object, License>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( License element : tgt )
+ {
+ Object key = getLicenseKey( element );
+ merged.put( key, element );
+ }
+
+ for ( License element : src )
+ {
+ Object key = getLicenseKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setLicenses( new ArrayList<License>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_MailingLists( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<MailingList> src = source.getMailingLists();
+ if ( !src.isEmpty() )
+ {
+ List<MailingList> tgt = target.getMailingLists();
+ Map<Object, MailingList> merged = new LinkedHashMap<Object, MailingList>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( MailingList element : tgt )
+ {
+ Object key = getMailingListKey( element );
+ merged.put( key, element );
+ }
+
+ for ( MailingList element : src )
+ {
+ Object key = getMailingListKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setMailingLists( new ArrayList<MailingList>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_Developers( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Developer> src = source.getDevelopers();
+ if ( !src.isEmpty() )
+ {
+ List<Developer> tgt = target.getDevelopers();
+ Map<Object, Developer> merged = new LinkedHashMap<Object, Developer>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Developer element : tgt )
+ {
+ Object key = getDeveloperKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Developer element : src )
+ {
+ Object key = getDeveloperKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDevelopers( new ArrayList<Developer>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_Contributors( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Contributor> src = source.getContributors();
+ if ( !src.isEmpty() )
+ {
+ List<Contributor> tgt = target.getContributors();
+ Map<Object, Contributor> merged = new LinkedHashMap<Object, Contributor>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Contributor element : tgt )
+ {
+ Object key = getContributorKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Contributor element : src )
+ {
+ Object key = getContributorKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setContributors( new ArrayList<Contributor>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModel_IssueManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ IssueManagement src = source.getIssueManagement();
+ if ( src != null )
+ {
+ IssueManagement tgt = target.getIssueManagement();
+ if ( tgt == null )
+ {
+ tgt = new IssueManagement();
+ target.setIssueManagement( tgt );
+ }
+ mergeIssueManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Scm( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ Scm src = source.getScm();
+ if ( src != null )
+ {
+ Scm tgt = target.getScm();
+ if ( tgt == null )
+ {
+ tgt = new Scm();
+ tgt.setTag( null );
+ target.setScm( tgt );
+ }
+ mergeScm( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_CiManagement( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ CiManagement src = source.getCiManagement();
+ if ( src != null )
+ {
+ CiManagement tgt = target.getCiManagement();
+ if ( tgt == null )
+ {
+ tgt = new CiManagement();
+ target.setCiManagement( tgt );
+ }
+ mergeCiManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Prerequisites( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Prerequisites src = source.getPrerequisites();
+ if ( src != null )
+ {
+ Prerequisites tgt = target.getPrerequisites();
+ if ( tgt == null )
+ {
+ tgt = new Prerequisites();
+ tgt.setMaven( null );
+ target.setPrerequisites( tgt );
+ }
+ mergePrerequisites( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Build( Model target, Model source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ Build src = source.getBuild();
+ if ( src != null )
+ {
+ Build tgt = target.getBuild();
+ if ( tgt == null )
+ {
+ tgt = new Build();
+ target.setBuild( tgt );
+ }
+ mergeBuild( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModel_Profiles( Model target, Model source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Profile> src = source.getProfiles();
+ if ( !src.isEmpty() )
+ {
+ List<Profile> tgt = target.getProfiles();
+ Map<Object, Profile> merged = new LinkedHashMap<Object, Profile>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Profile element : tgt )
+ {
+ Object key = getProfileKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Profile element : src )
+ {
+ Object key = getProfileKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setProfiles( new ArrayList<Profile>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeModelBase_DistributionManagement( target, source, sourceDominant, context );
+ mergeModelBase_Modules( target, source, sourceDominant, context );
+ mergeModelBase_Repositories( target, source, sourceDominant, context );
+ mergeModelBase_PluginRepositories( target, source, sourceDominant, context );
+ mergeModelBase_Dependencies( target, source, sourceDominant, context );
+ mergeModelBase_Reporting( target, source, sourceDominant, context );
+ mergeModelBase_DependencyManagement( target, source, sourceDominant, context );
+ mergeModelBase_Properties( target, source, sourceDominant, context );
+ }
+
+ protected void mergeModelBase_Modules( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getModules();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getModules();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setModules( merged );
+ }
+ }
+
+ protected void mergeModelBase_Dependencies( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Dependency> src = source.getDependencies();
+ if ( !src.isEmpty() )
+ {
+ List<Dependency> tgt = target.getDependencies();
+ Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Dependency element : tgt )
+ {
+ Object key = getDependencyKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Dependency element : src )
+ {
+ Object key = getDependencyKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase_Repositories( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Repository> src = source.getRepositories();
+ if ( !src.isEmpty() )
+ {
+ List<Repository> tgt = target.getRepositories();
+ Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Repository element : tgt )
+ {
+ Object key = getRepositoryKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Repository element : src )
+ {
+ Object key = getRepositoryKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setRepositories( new ArrayList<Repository>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase_PluginRepositories( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Repository> src = source.getPluginRepositories();
+ if ( !src.isEmpty() )
+ {
+ List<Repository> tgt = target.getPluginRepositories();
+ Map<Object, Repository> merged = new LinkedHashMap<Object, Repository>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Repository element : tgt )
+ {
+ Object key = getRepositoryKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Repository element : src )
+ {
+ Object key = getRepositoryKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPluginRepositories( new ArrayList<Repository>( merged.values() ) );
+ }
+ }
+
+ protected void mergeModelBase_DistributionManagement( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DistributionManagement src = source.getDistributionManagement();
+ if ( src != null )
+ {
+ DistributionManagement tgt = target.getDistributionManagement();
+ if ( tgt == null )
+ {
+ tgt = new DistributionManagement();
+ target.setDistributionManagement( tgt );
+ }
+ mergeDistributionManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModelBase_Reporting( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Reporting src = source.getReporting();
+ if ( src != null )
+ {
+ Reporting tgt = target.getReporting();
+ if ( tgt == null )
+ {
+ tgt = new Reporting();
+ target.setReporting( tgt );
+ }
+ mergeReporting( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModelBase_DependencyManagement( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DependencyManagement src = source.getDependencyManagement();
+ if ( src != null )
+ {
+ DependencyManagement tgt = target.getDependencyManagement();
+ if ( tgt == null )
+ {
+ tgt = new DependencyManagement();
+ target.setDependencyManagement( tgt );
+ }
+ mergeDependencyManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeModelBase_Properties( ModelBase target, ModelBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Properties merged = new Properties();
+ if ( sourceDominant )
+ {
+ merged.putAll( target.getProperties() );
+ merged.putAll( source.getProperties() );
+ }
+ else
+ {
+ merged.putAll( source.getProperties() );
+ merged.putAll( target.getProperties() );
+ }
+ target.setProperties( merged );
+ target.setLocation( "properties", InputLocation.merge( target.getLocation( "properties" ),
+ source.getLocation( "properties" ), sourceDominant ) );
+ }
+
+ protected void mergeDistributionManagement( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeDistributionManagement_Repository( target, source, sourceDominant, context );
+ mergeDistributionManagement_SnapshotRepository( target, source, sourceDominant, context );
+ mergeDistributionManagement_Site( target, source, sourceDominant, context );
+ mergeDistributionManagement_Status( target, source, sourceDominant, context );
+ mergeDistributionManagement_DownloadUrl( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDistributionManagement_Repository( DistributionManagement target,
+ DistributionManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getRepository();
+ if ( tgt == null )
+ {
+ tgt = new DeploymentRepository();
+ target.setRepository( tgt );
+ }
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeDistributionManagement_SnapshotRepository( DistributionManagement target,
+ DistributionManagement source,
+ boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ DeploymentRepository src = source.getSnapshotRepository();
+ if ( src != null )
+ {
+ DeploymentRepository tgt = target.getSnapshotRepository();
+ if ( tgt == null )
+ {
+ tgt = new DeploymentRepository();
+ target.setSnapshotRepository( tgt );
+ }
+ mergeDeploymentRepository( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeDistributionManagement_Site( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ Site src = source.getSite();
+ if ( src != null )
+ {
+ Site tgt = target.getSite();
+ if ( tgt == null )
+ {
+ tgt = new Site();
+ target.setSite( tgt );
+ }
+ mergeSite( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeDistributionManagement_Status( DistributionManagement target, DistributionManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getStatus();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getStatus() == null )
+ {
+ target.setStatus( src );
+ target.setLocation( "status", source.getLocation( "status" ) );
+ }
+ }
+ }
+
+ protected void mergeDistributionManagement_DownloadUrl( DistributionManagement target,
+ DistributionManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDownloadUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDownloadUrl() == null )
+ {
+ target.setDownloadUrl( src );
+ target.setLocation( "downloadUrl", source.getLocation( "downloadUrl" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRelocation_GroupId( target, source, sourceDominant, context );
+ mergeRelocation_ArtifactId( target, source, sourceDominant, context );
+ mergeRelocation_Version( target, source, sourceDominant, context );
+ mergeRelocation_Message( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRelocation_GroupId( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation_ArtifactId( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation_Version( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeRelocation_Message( Relocation target, Relocation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getMessage();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getMessage() == null )
+ {
+ target.setMessage( src );
+ target.setLocation( "message", source.getLocation( "message" ) );
+ }
+ }
+ }
+
+ protected void mergeDeploymentRepository( DeploymentRepository target, DeploymentRepository source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeRepository( target, source, sourceDominant, context );
+ mergeDeploymentRepository_UniqueVersion( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDeploymentRepository_UniqueVersion( DeploymentRepository target, DeploymentRepository source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setUniqueVersion( source.isUniqueVersion() );
+ target.setLocation( "uniqueVersion", source.getLocation( "uniqueVersion" ) );
+ }
+ }
+
+ protected void mergeSite( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeSite_Id( target, source, sourceDominant, context );
+ mergeSite_Name( target, source, sourceDominant, context );
+ mergeSite_Url( target, source, sourceDominant, context );
+ }
+
+ protected void mergeSite_Id( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeSite_Name( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeSite_Url( Site target, Site source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeRepository( Repository target, Repository source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRepositoryBase( target, source, sourceDominant, context );
+ mergeRepository_Releases( target, source, sourceDominant, context );
+ mergeRepository_Snapshots( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRepository_Releases( Repository target, Repository source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ RepositoryPolicy src = source.getReleases();
+ if ( src != null )
+ {
+ RepositoryPolicy tgt = target.getReleases();
+ if ( tgt == null )
+ {
+ tgt = new RepositoryPolicy();
+ target.setReleases( tgt );
+ }
+ mergeRepositoryPolicy( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeRepository_Snapshots( Repository target, Repository source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ RepositoryPolicy src = source.getSnapshots();
+ if ( src != null )
+ {
+ RepositoryPolicy tgt = target.getSnapshots();
+ if ( tgt == null )
+ {
+ tgt = new RepositoryPolicy();
+ target.setSnapshots( tgt );
+ }
+ mergeRepositoryPolicy( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergeRepositoryBase( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRepositoryBase_Id( target, source, sourceDominant, context );
+ mergeRepositoryBase_Name( target, source, sourceDominant, context );
+ mergeRepositoryBase_Url( target, source, sourceDominant, context );
+ mergeRepositoryBase_Layout( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRepositoryBase_Id( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryBase_Url( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryBase_Name( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryBase_Layout( RepositoryBase target, RepositoryBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getLayout();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getLayout() == null )
+ {
+ target.setLayout( src );
+ target.setLocation( "layout", source.getLocation( "layout" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryPolicy( RepositoryPolicy target, RepositoryPolicy source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeRepositoryPolicy_Enabled( target, source, sourceDominant, context );
+ mergeRepositoryPolicy_UpdatePolicy( target, source, sourceDominant, context );
+ mergeRepositoryPolicy_ChecksumPolicy( target, source, sourceDominant, context );
+ }
+
+ protected void mergeRepositoryPolicy_Enabled( RepositoryPolicy target, RepositoryPolicy source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getEnabled();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getEnabled() == null )
+ {
+ target.setEnabled( src );
+ target.setLocation( "enabled", source.getLocation( "enabled" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryPolicy_UpdatePolicy( RepositoryPolicy target, RepositoryPolicy source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUpdatePolicy();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUpdatePolicy() == null )
+ {
+ target.setUpdatePolicy( src );
+ target.setLocation( "updatePolicy", source.getLocation( "updatePolicy" ) );
+ }
+ }
+ }
+
+ protected void mergeRepositoryPolicy_ChecksumPolicy( RepositoryPolicy target, RepositoryPolicy source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getChecksumPolicy();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getChecksumPolicy() == null )
+ {
+ target.setChecksumPolicy( src );
+ target.setLocation( "checksumPolicy", source.getLocation( "checksumPolicy" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeDependency_GroupId( target, source, sourceDominant, context );
+ mergeDependency_ArtifactId( target, source, sourceDominant, context );
+ mergeDependency_Version( target, source, sourceDominant, context );
+ mergeDependency_Type( target, source, sourceDominant, context );
+ mergeDependency_Classifier( target, source, sourceDominant, context );
+ mergeDependency_Scope( target, source, sourceDominant, context );
+ mergeDependency_SystemPath( target, source, sourceDominant, context );
+ mergeDependency_Optional( target, source, sourceDominant, context );
+ mergeDependency_Exclusions( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDependency_GroupId( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_ArtifactId( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Version( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Type( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getType();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getType() == null )
+ {
+ target.setType( src );
+ target.setLocation( "type", source.getLocation( "type" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Classifier( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getClassifier();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getClassifier() == null )
+ {
+ target.setClassifier( src );
+ target.setLocation( "classifier", source.getLocation( "classifier" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Scope( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getScope();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getScope() == null )
+ {
+ target.setScope( src );
+ target.setLocation( "scope", source.getLocation( "scope" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_SystemPath( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSystemPath();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSystemPath() == null )
+ {
+ target.setSystemPath( src );
+ target.setLocation( "systemPath", source.getLocation( "systemPath" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Optional( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOptional();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOptional() == null )
+ {
+ target.setOptional( src );
+ target.setLocation( "optional", source.getLocation( "optional" ) );
+ }
+ }
+ }
+
+ protected void mergeDependency_Exclusions( Dependency target, Dependency source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Exclusion> src = source.getExclusions();
+ if ( !src.isEmpty() )
+ {
+ List<Exclusion> tgt = target.getExclusions();
+
+ Map<Object, Exclusion> merged = new LinkedHashMap<Object, Exclusion>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Exclusion element : tgt )
+ {
+ Object key = getExclusionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Exclusion element : src )
+ {
+ Object key = getExclusionKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExclusions( new ArrayList<Exclusion>( merged.values() ) );
+ }
+ }
+
+ protected void mergeExclusion( Exclusion target, Exclusion source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeExclusion_GroupId( target, source, sourceDominant, context );
+ mergeExclusion_ArtifactId( target, source, sourceDominant, context );
+ }
+
+ protected void mergeExclusion_GroupId( Exclusion target, Exclusion source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeExclusion_ArtifactId( Exclusion target, Exclusion source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeReporting( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeReporting_OutputDirectory( target, source, sourceDominant, context );
+ mergeReporting_ExcludeDefaults( target, source, sourceDominant, context );
+ mergeReporting_Plugins( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReporting_OutputDirectory( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOutputDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOutputDirectory() == null )
+ {
+ target.setOutputDirectory( src );
+ target.setLocation( "outputDirectory", source.getLocation( "outputDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeReporting_ExcludeDefaults( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getExcludeDefaults();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getExcludeDefaults() == null )
+ {
+ target.setExcludeDefaults( src );
+ target.setLocation( "excludeDefaults", source.getLocation( "excludeDefaults" ) );
+ }
+ }
+ }
+
+ protected void mergeReporting_Plugins( Reporting target, Reporting source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportPlugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<ReportPlugin> tgt = target.getPlugins();
+ Map<Object, ReportPlugin> merged =
+ new LinkedHashMap<Object, ReportPlugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportPlugin element : tgt )
+ {
+ Object key = getReportPluginKey( element );
+ merged.put( key, element );
+ }
+
+ for ( ReportPlugin element : src )
+ {
+ Object key = getReportPluginKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPlugins( new ArrayList<ReportPlugin>( merged.values() ) );
+ }
+ }
+
+ protected void mergeReportPlugin( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergeReportPlugin_GroupId( target, source, sourceDominant, context );
+ mergeReportPlugin_ArtifactId( target, source, sourceDominant, context );
+ mergeReportPlugin_Version( target, source, sourceDominant, context );
+ mergeReportPlugin_ReportSets( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReportPlugin_GroupId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_ArtifactId( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_Version( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeReportPlugin_ReportSets( ReportPlugin target, ReportPlugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<ReportSet> src = source.getReportSets();
+ if ( !src.isEmpty() )
+ {
+ List<ReportSet> tgt = target.getReportSets();
+ Map<Object, ReportSet> merged = new LinkedHashMap<Object, ReportSet>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( ReportSet element : tgt )
+ {
+ Object key = getReportSetKey( element );
+ merged.put( key, element );
+ }
+
+ for ( ReportSet element : src )
+ {
+ Object key = getReportSetKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setReportSets( new ArrayList<ReportSet>( merged.values() ) );
+ }
+ }
+
+ protected void mergeReportSet( ReportSet target, ReportSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergeReportSet_Id( target, source, sourceDominant, context );
+ mergeReportSet_Reports( target, source, sourceDominant, context );
+ }
+
+ protected void mergeReportSet_Id( ReportSet target, ReportSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeReportSet_Reports( ReportSet target, ReportSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getReports();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getReports();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setReports( merged );
+ }
+ }
+
+ protected void mergeDependencyManagement( DependencyManagement target, DependencyManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeDependencyManagement_Dependencies( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDependencyManagement_Dependencies( DependencyManagement target, DependencyManagement source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Dependency> src = source.getDependencies();
+ if ( !src.isEmpty() )
+ {
+ List<Dependency> tgt = target.getDependencies();
+ Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Dependency element : tgt )
+ {
+ Object key = getDependencyKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Dependency element : src )
+ {
+ Object key = getDependencyKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
+ }
+ }
+
+ protected void mergeParent( Parent target, Parent source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeParent_GroupId( target, source, sourceDominant, context );
+ mergeParent_ArtifactId( target, source, sourceDominant, context );
+ mergeParent_Version( target, source, sourceDominant, context );
+ mergeParent_RelativePath( target, source, sourceDominant, context );
+ }
+
+ protected void mergeParent_GroupId( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeParent_ArtifactId( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeParent_Version( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeParent_RelativePath( Parent target, Parent source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getRelativePath();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getRelativePath() == null )
+ {
+ target.setRelativePath( src );
+ target.setLocation( "relativePath", source.getLocation( "relativePath" ) );
+ }
+ }
+ }
+
+ protected void mergeOrganization( Organization target, Organization source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeOrganization_Name( target, source, sourceDominant, context );
+ mergeOrganization_Url( target, source, sourceDominant, context );
+ }
+
+ protected void mergeOrganization_Name( Organization target, Organization source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeOrganization_Url( Organization target, Organization source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense( License target, License source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeLicense_Name( target, source, sourceDominant, context );
+ mergeLicense_Url( target, source, sourceDominant, context );
+ mergeLicense_Distribution( target, source, sourceDominant, context );
+ mergeLicense_Comments( target, source, sourceDominant, context );
+ }
+
+ protected void mergeLicense_Name( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense_Url( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense_Distribution( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDistribution();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDistribution() == null )
+ {
+ target.setDistribution( src );
+ target.setLocation( "distribution", source.getLocation( "distribution" ) );
+ }
+ }
+ }
+
+ protected void mergeLicense_Comments( License target, License source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getComments();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getComments() == null )
+ {
+ target.setComments( src );
+ target.setLocation( "comments", source.getLocation( "comments" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeMailingList_Name( target, source, sourceDominant, context );
+ mergeMailingList_Subscribe( target, source, sourceDominant, context );
+ mergeMailingList_Unsubscribe( target, source, sourceDominant, context );
+ mergeMailingList_Post( target, source, sourceDominant, context );
+ mergeMailingList_OtherArchives( target, source, sourceDominant, context );
+ }
+
+ protected void mergeMailingList_Name( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Subscribe( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSubscribe();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSubscribe() == null )
+ {
+ target.setSubscribe( src );
+ target.setLocation( "subscribe", source.getLocation( "subscribe" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Unsubscribe( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUnsubscribe();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUnsubscribe() == null )
+ {
+ target.setUnsubscribe( src );
+ target.setLocation( "unsubscribe", source.getLocation( "unsubscribe" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Post( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getPost();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getPost() == null )
+ {
+ target.setPost( src );
+ target.setLocation( "post", source.getLocation( "post" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_Archive( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArchive();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArchive() == null )
+ {
+ target.setArchive( src );
+ target.setLocation( "archive", source.getLocation( "archive" ) );
+ }
+ }
+ }
+
+ protected void mergeMailingList_OtherArchives( MailingList target, MailingList source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getOtherArchives();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getOtherArchives();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setOtherArchives( merged );
+ }
+ }
+
+ protected void mergeDeveloper( Developer target, Developer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeContributor( target, source, sourceDominant, context );
+ mergeDeveloper_Id( target, source, sourceDominant, context );
+ }
+
+ protected void mergeDeveloper_Id( Developer target, Developer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeContributor_Name( target, source, sourceDominant, context );
+ mergeContributor_Email( target, source, sourceDominant, context );
+ mergeContributor_Url( target, source, sourceDominant, context );
+ mergeContributor_Organization( target, source, sourceDominant, context );
+ mergeContributor_OrganizationUrl( target, source, sourceDominant, context );
+ mergeContributor_Timezone( target, source, sourceDominant, context );
+ mergeContributor_Roles( target, source, sourceDominant, context );
+ mergeContributor_Properties( target, source, sourceDominant, context );
+ }
+
+ protected void mergeContributor_Name( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getName() == null )
+ {
+ target.setName( src );
+ target.setLocation( "name", source.getLocation( "name" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Email( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getEmail();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getEmail() == null )
+ {
+ target.setEmail( src );
+ target.setLocation( "email", source.getLocation( "email" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Url( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Organization( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOrganization();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOrganization() == null )
+ {
+ target.setOrganization( src );
+ target.setLocation( "organization", source.getLocation( "organization" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_OrganizationUrl( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOrganizationUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOrganizationUrl() == null )
+ {
+ target.setOrganizationUrl( src );
+ target.setLocation( "organizationUrl", source.getLocation( "organizationUrl" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Timezone( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTimezone();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTimezone() == null )
+ {
+ target.setTimezone( src );
+ target.setLocation( "timezone", source.getLocation( "timezone" ) );
+ }
+ }
+ }
+
+ protected void mergeContributor_Roles( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getRoles();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getRoles();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setRoles( merged );
+ }
+ }
+
+ protected void mergeContributor_Properties( Contributor target, Contributor source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Properties merged = new Properties();
+ if ( sourceDominant )
+ {
+ merged.putAll( target.getProperties() );
+ merged.putAll( source.getProperties() );
+ }
+ else
+ {
+ merged.putAll( source.getProperties() );
+ merged.putAll( target.getProperties() );
+ }
+ target.setProperties( merged );
+ target.setLocation( "properties", InputLocation.merge( target.getLocation( "properties" ),
+ source.getLocation( "properties" ), sourceDominant ) );
+ }
+
+ protected void mergeIssueManagement( IssueManagement target, IssueManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeIssueManagement_Url( target, source, sourceDominant, context );
+ mergeIssueManagement_System( target, source, sourceDominant, context );
+ }
+
+ protected void mergeIssueManagement_System( IssueManagement target, IssueManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSystem();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSystem() == null )
+ {
+ target.setSystem( src );
+ target.setLocation( "system", source.getLocation( "system" ) );
+ }
+ }
+ }
+
+ protected void mergeIssueManagement_Url( IssueManagement target, IssueManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeScm( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeScm_Url( target, source, sourceDominant, context );
+ mergeScm_Connection( target, source, sourceDominant, context );
+ mergeScm_DeveloperConnection( target, source, sourceDominant, context );
+ mergeScm_Tag( target, source, sourceDominant, context );
+ }
+
+ protected void mergeScm_Url( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeScm_Connection( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getConnection();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getConnection() == null )
+ {
+ target.setConnection( src );
+ target.setLocation( "connection", source.getLocation( "connection" ) );
+ }
+ }
+ }
+
+ protected void mergeScm_DeveloperConnection( Scm target, Scm source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDeveloperConnection();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDeveloperConnection() == null )
+ {
+ target.setDeveloperConnection( src );
+ target.setLocation( "developerConnection", source.getLocation( "developerConnection" ) );
+ }
+ }
+ }
+
+ protected void mergeScm_Tag( Scm target, Scm source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getTag();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTag() == null )
+ {
+ target.setTag( src );
+ target.setLocation( "tag", source.getLocation( "tag" ) );
+ }
+ }
+ }
+
+ protected void mergeCiManagement( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeCiManagement_System( target, source, sourceDominant, context );
+ mergeCiManagement_Url( target, source, sourceDominant, context );
+ mergeCiManagement_Notifiers( target, source, sourceDominant, context );
+ }
+
+ protected void mergeCiManagement_System( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSystem();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSystem() == null )
+ {
+ target.setSystem( src );
+ target.setLocation( "system", source.getLocation( "system" ) );
+ }
+ }
+ }
+
+ protected void mergeCiManagement_Url( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getUrl();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getUrl() == null )
+ {
+ target.setUrl( src );
+ target.setLocation( "url", source.getLocation( "url" ) );
+ }
+ }
+ }
+
+ protected void mergeCiManagement_Notifiers( CiManagement target, CiManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Notifier> src = source.getNotifiers();
+ if ( !src.isEmpty() )
+ {
+ List<Notifier> tgt = target.getNotifiers();
+ Map<Object, Notifier> merged = new LinkedHashMap<Object, Notifier>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Notifier element : tgt )
+ {
+ Object key = getNotifierKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Notifier element : src )
+ {
+ Object key = getNotifierKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setNotifiers( new ArrayList<Notifier>( merged.values() ) );
+ }
+ }
+
+ protected void mergeNotifier( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeNotifier_Type( target, source, sourceDominant, context );
+ mergeNotifier_Address( target, source, sourceDominant, context );
+ mergeNotifier_Configuration( target, source, sourceDominant, context );
+ mergeNotifier_SendOnError( target, source, sourceDominant, context );
+ mergeNotifier_SendOnFailure( target, source, sourceDominant, context );
+ mergeNotifier_SendOnSuccess( target, source, sourceDominant, context );
+ mergeNotifier_SendOnWarning( target, source, sourceDominant, context );
+ }
+
+ protected void mergeNotifier_Type( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getType();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getType() == null )
+ {
+ target.setType( src );
+ }
+ }
+ }
+
+ protected void mergeNotifier_Address( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getAddress();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getAddress() == null )
+ {
+ target.setAddress( src );
+ }
+ }
+ }
+
+ protected void mergeNotifier_Configuration( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Properties merged = new Properties();
+ if ( sourceDominant )
+ {
+ merged.putAll( target.getConfiguration() );
+ merged.putAll( source.getConfiguration() );
+ }
+ else
+ {
+ merged.putAll( source.getConfiguration() );
+ merged.putAll( target.getConfiguration() );
+ }
+ target.setConfiguration( merged );
+ }
+
+ protected void mergeNotifier_SendOnError( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnError( source.isSendOnError() );
+ }
+ }
+
+ protected void mergeNotifier_SendOnFailure( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnFailure( source.isSendOnFailure() );
+ }
+ }
+
+ protected void mergeNotifier_SendOnSuccess( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnSuccess( source.isSendOnSuccess() );
+ }
+ }
+
+ protected void mergeNotifier_SendOnWarning( Notifier target, Notifier source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ if ( sourceDominant )
+ {
+ target.setSendOnWarning( source.isSendOnWarning() );
+ }
+ }
+
+ protected void mergePrerequisites( Prerequisites target, Prerequisites source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePrerequisites_Maven( target, source, sourceDominant, context );
+ }
+
+ protected void mergePrerequisites_Maven( Prerequisites target, Prerequisites source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getMaven();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getMaven() == null )
+ {
+ target.setMaven( src );
+ target.setLocation( "maven", source.getLocation( "maven" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild( Build target, Build source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeBuildBase( target, source, sourceDominant, context );
+ mergeBuild_SourceDirectory( target, source, sourceDominant, context );
+ mergeBuild_ScriptSourceDirectory( target, source, sourceDominant, context );
+ mergeBuild_TestSourceDirectory( target, source, sourceDominant, context );
+ mergeBuild_OutputDirectory( target, source, sourceDominant, context );
+ mergeBuild_TestOutputDirectory( target, source, sourceDominant, context );
+ mergeBuild_Extensions( target, source, sourceDominant, context );
+ }
+
+ protected void mergeBuild_SourceDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getSourceDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getSourceDirectory() == null )
+ {
+ target.setSourceDirectory( src );
+ target.setLocation( "sourceDirectory", source.getLocation( "sourceDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_ScriptSourceDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getScriptSourceDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getScriptSourceDirectory() == null )
+ {
+ target.setScriptSourceDirectory( src );
+ target.setLocation( "scriptSourceDirectory", source.getLocation( "scriptSourceDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_TestSourceDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTestSourceDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTestSourceDirectory() == null )
+ {
+ target.setTestSourceDirectory( src );
+ target.setLocation( "testSourceDirectory", source.getLocation( "testSourceDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_OutputDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getOutputDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getOutputDirectory() == null )
+ {
+ target.setOutputDirectory( src );
+ target.setLocation( "outputDirectory", source.getLocation( "outputDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_TestOutputDirectory( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTestOutputDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTestOutputDirectory() == null )
+ {
+ target.setTestOutputDirectory( src );
+ target.setLocation( "testOutputDirectory", source.getLocation( "testOutputDirectory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuild_Extensions( Build target, Build source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Extension> src = source.getExtensions();
+ if ( !src.isEmpty() )
+ {
+ List<Extension> tgt = target.getExtensions();
+ Map<Object, Extension> merged = new LinkedHashMap<Object, Extension>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Extension element : tgt )
+ {
+ Object key = getExtensionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Extension element : src )
+ {
+ Object key = getExtensionKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExtensions( new ArrayList<Extension>( merged.values() ) );
+ }
+ }
+
+ protected void mergeExtension( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeExtension_GroupId( target, source, sourceDominant, context );
+ mergeExtension_ArtifactId( target, source, sourceDominant, context );
+ mergeExtension_Version( target, source, sourceDominant, context );
+ }
+
+ protected void mergeExtension_GroupId( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergeExtension_ArtifactId( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergeExtension_Version( Extension target, Extension source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePluginConfiguration( target, source, sourceDominant, context );
+ mergeBuildBase_DefaultGoal( target, source, sourceDominant, context );
+ mergeBuildBase_FinalName( target, source, sourceDominant, context );
+ mergeBuildBase_Directory( target, source, sourceDominant, context );
+ mergeBuildBase_Resources( target, source, sourceDominant, context );
+ mergeBuildBase_TestResources( target, source, sourceDominant, context );
+ mergeBuildBase_Filters( target, source, sourceDominant, context );
+ }
+
+ protected void mergeBuildBase_DefaultGoal( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDefaultGoal();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDefaultGoal() == null )
+ {
+ target.setDefaultGoal( src );
+ target.setLocation( "defaultGoal", source.getLocation( "defaultGoal" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase_Directory( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDirectory() == null )
+ {
+ target.setDirectory( src );
+ target.setLocation( "directory", source.getLocation( "directory" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase_FinalName( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getFinalName();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getFinalName() == null )
+ {
+ target.setFinalName( src );
+ target.setLocation( "finalName", source.getLocation( "finalName" ) );
+ }
+ }
+ }
+
+ protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getFilters();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getFilters();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setFilters( merged );
+ }
+ }
+
+ protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Resource> src = source.getResources();
+ if ( !src.isEmpty() )
+ {
+ List<Resource> tgt = target.getResources();
+ Map<Object, Resource> merged = new LinkedHashMap<Object, Resource>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Resource element : tgt )
+ {
+ Object key = getResourceKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Resource element : src )
+ {
+ Object key = getResourceKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setResources( new ArrayList<Resource>( merged.values() ) );
+ }
+ }
+
+ protected void mergeBuildBase_TestResources( BuildBase target, BuildBase source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Resource> src = source.getTestResources();
+ if ( !src.isEmpty() )
+ {
+ List<Resource> tgt = target.getTestResources();
+ Map<Object, Resource> merged = new LinkedHashMap<Object, Resource>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Resource element : tgt )
+ {
+ Object key = getResourceKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Resource element : src )
+ {
+ Object key = getResourceKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setTestResources( new ArrayList<Resource>( merged.values() ) );
+ }
+ }
+
+ protected void mergePluginConfiguration( PluginConfiguration target, PluginConfiguration source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergePluginContainer( target, source, sourceDominant, context );
+ mergePluginConfiguration_PluginManagement( target, source, sourceDominant, context );
+ }
+
+ protected void mergePluginConfiguration_PluginManagement( PluginConfiguration target, PluginConfiguration source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ PluginManagement src = source.getPluginManagement();
+ if ( src != null )
+ {
+ PluginManagement tgt = target.getPluginManagement();
+ if ( tgt == null )
+ {
+ tgt = new PluginManagement();
+ target.setPluginManagement( tgt );
+ }
+ mergePluginManagement( tgt, src, sourceDominant, context );
+ }
+ }
+
+ protected void mergePluginContainer( PluginContainer target, PluginContainer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePluginContainer_Plugins( target, source, sourceDominant, context );
+ }
+
+ protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ List<Plugin> src = source.getPlugins();
+ if ( !src.isEmpty() )
+ {
+ List<Plugin> tgt = target.getPlugins();
+ Map<Object, Plugin> merged = new LinkedHashMap<Object, Plugin>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Plugin element : tgt )
+ {
+ Object key = getPluginKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Plugin element : src )
+ {
+ Object key = getPluginKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
+ }
+ }
+
+ protected void mergePluginManagement( PluginManagement target, PluginManagement source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePluginContainer( target, source, sourceDominant, context );
+ }
+
+ protected void mergePlugin( Plugin target, Plugin source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergePlugin_GroupId( target, source, sourceDominant, context );
+ mergePlugin_ArtifactId( target, source, sourceDominant, context );
+ mergePlugin_Version( target, source, sourceDominant, context );
+ mergePlugin_Extensions( target, source, sourceDominant, context );
+ mergePlugin_Dependencies( target, source, sourceDominant, context );
+ mergePlugin_Executions( target, source, sourceDominant, context );
+ }
+
+ protected void mergePlugin_GroupId( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getGroupId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getGroupId() == null )
+ {
+ target.setGroupId( src );
+ target.setLocation( "groupId", source.getLocation( "groupId" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_ArtifactId( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getArtifactId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getArtifactId() == null )
+ {
+ target.setArtifactId( src );
+ target.setLocation( "artifactId", source.getLocation( "artifactId" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_Version( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getVersion();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getVersion() == null )
+ {
+ target.setVersion( src );
+ target.setLocation( "version", source.getLocation( "version" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_Extensions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getExtensions();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getExtensions() == null )
+ {
+ target.setExtensions( src );
+ target.setLocation( "extensions", source.getLocation( "extensions" ) );
+ }
+ }
+ }
+
+ protected void mergePlugin_Dependencies( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<Dependency> src = source.getDependencies();
+ if ( !src.isEmpty() )
+ {
+ List<Dependency> tgt = target.getDependencies();
+ Map<Object, Dependency> merged = new LinkedHashMap<Object, Dependency>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( Dependency element : tgt )
+ {
+ Object key = getDependencyKey( element );
+ merged.put( key, element );
+ }
+
+ for ( Dependency element : src )
+ {
+ Object key = getDependencyKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setDependencies( new ArrayList<Dependency>( merged.values() ) );
+ }
+ }
+
+ protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<PluginExecution> src = source.getExecutions();
+ if ( !src.isEmpty() )
+ {
+ List<PluginExecution> tgt = target.getExecutions();
+
+ Map<Object, PluginExecution> merged =
+ new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 );
+
+ for ( PluginExecution element : tgt )
+ {
+ Object key = getPluginExecutionKey( element );
+ merged.put( key, element );
+ }
+
+ for ( PluginExecution element : src )
+ {
+ Object key = getPluginExecutionKey( element );
+ if ( sourceDominant || !merged.containsKey( key ) )
+ {
+ merged.put( key, element );
+ }
+ }
+
+ target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) );
+ }
+ }
+
+ protected void mergeConfigurationContainer( ConfigurationContainer target, ConfigurationContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeConfigurationContainer_Inherited( target, source, sourceDominant, context );
+ mergeConfigurationContainer_Configuration( target, source, sourceDominant, context );
+ }
+
+ protected void mergeConfigurationContainer_Inherited( ConfigurationContainer target, ConfigurationContainer source,
+ boolean sourceDominant, Map<Object, Object> context )
+ {
+ String src = source.getInherited();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getInherited() == null )
+ {
+ target.setInherited( src );
+ target.setLocation( "inherited", source.getLocation( "inherited" ) );
+ }
+ }
+ }
+
+ protected void mergeConfigurationContainer_Configuration( ConfigurationContainer target,
+ ConfigurationContainer source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ Xpp3Dom src = (Xpp3Dom) source.getConfiguration();
+ if ( src != null )
+ {
+ Xpp3Dom tgt = (Xpp3Dom) target.getConfiguration();
+ if ( sourceDominant || tgt == null )
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( new Xpp3Dom( src ), tgt );
+ }
+ else
+ {
+ tgt = Xpp3Dom.mergeXpp3Dom( tgt, src );
+ }
+ target.setConfiguration( tgt );
+ }
+ }
+
+ protected void mergePluginExecution( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeConfigurationContainer( target, source, sourceDominant, context );
+ mergePluginExecution_Id( target, source, sourceDominant, context );
+ mergePluginExecution_Phase( target, source, sourceDominant, context );
+ mergePluginExecution_Goals( target, source, sourceDominant, context );
+ }
+
+ protected void mergePluginExecution_Id( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getId() == null )
+ {
+ target.setId( src );
+ target.setLocation( "id", source.getLocation( "id" ) );
+ }
+ }
+ }
+
+ protected void mergePluginExecution_Phase( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getPhase();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getPhase() == null )
+ {
+ target.setPhase( src );
+ target.setLocation( "phase", source.getLocation( "phase" ) );
+ }
+ }
+ }
+
+ protected void mergePluginExecution_Goals( PluginExecution target, PluginExecution source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getGoals();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getGoals();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setGoals( merged );
+ }
+ }
+
+ protected void mergeResource( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergeFileSet( target, source, sourceDominant, context );
+ mergeResource_TargetPath( target, source, sourceDominant, context );
+ mergeResource_Filtering( target, source, sourceDominant, context );
+ mergeResource_MergeId( target, source, sourceDominant, context );
+ }
+
+ protected void mergeResource_TargetPath( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getTargetPath();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getTargetPath() == null )
+ {
+ target.setTargetPath( src );
+ target.setLocation( "targetPath", source.getLocation( "targetPath" ) );
+ }
+ }
+ }
+
+ protected void mergeResource_Filtering( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getFiltering();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getFiltering() == null )
+ {
+ target.setFiltering( src );
+ target.setLocation( "filtering", source.getLocation( "filtering" ) );
+ }
+ }
+ }
+
+ protected void mergeResource_MergeId( Resource target, Resource source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getMergeId();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getMergeId() == null )
+ {
+ target.setMergeId( src );
+ }
+ }
+ }
+
+ protected void mergeFileSet( FileSet target, FileSet source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergePatternSet( target, source, sourceDominant, context );
+ mergeFileSet_Directory( target, source, sourceDominant, context );
+ }
+
+ protected void mergeFileSet_Directory( FileSet target, FileSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ String src = source.getDirectory();
+ if ( src != null )
+ {
+ if ( sourceDominant || target.getDirectory() == null )
+ {
+ target.setDirectory( src );
+ target.setLocation( "directory", source.getLocation( "directory" ) );
+ }
+ }
+ }
+
+ protected void mergePatternSet( PatternSet target, PatternSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ mergePatternSet_Includes( target, source, sourceDominant, context );
+ mergePatternSet_Excludes( target, source, sourceDominant, context );
+ }
+
+ protected void mergePatternSet_Includes( PatternSet target, PatternSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getIncludes();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getIncludes();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setIncludes( merged );
+ }
+ }
+
+ protected void mergePatternSet_Excludes( PatternSet target, PatternSet source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ List<String> src = source.getExcludes();
+ if ( !src.isEmpty() )
+ {
+ List<String> tgt = target.getExcludes();
+ List<String> merged = new ArrayList<String>( tgt.size() + src.size() );
+ merged.addAll( tgt );
+ merged.addAll( src );
+ target.setExcludes( merged );
+ }
+ }
+
+ protected void mergeProfile( Profile target, Profile source, boolean sourceDominant, Map<Object, Object> context )
+ {
+ mergeModelBase( target, source, sourceDominant, context );
+ // TODO
+ }
+
+ protected void mergeActivation( Activation target, Activation source, boolean sourceDominant,
+ Map<Object, Object> context )
+ {
+ // TODO
+ }
+
+ protected Object getDependencyKey( Dependency dependency )
+ {
+ return dependency;
+ }
+
+ protected Object getPluginKey( Plugin plugin )
+ {
+ return plugin;
+ }
+
+ protected Object getPluginExecutionKey( PluginExecution pluginExecution )
+ {
+ return pluginExecution;
+ }
+
+ protected Object getReportPluginKey( ReportPlugin reportPlugin )
+ {
+ return reportPlugin;
+ }
+
+ protected Object getReportSetKey( ReportSet reportSet )
+ {
+ return reportSet;
+ }
+
+ protected Object getLicenseKey( License license )
+ {
+ return license;
+ }
+
+ protected Object getMailingListKey( MailingList mailingList )
+ {
+ return mailingList;
+ }
+
+ protected Object getDeveloperKey( Developer developer )
+ {
+ return developer;
+ }
+
+ protected Object getContributorKey( Contributor contributor )
+ {
+ return contributor;
+ }
+
+ protected Object getProfileKey( Profile profile )
+ {
+ return profile;
+ }
+
+ protected Object getRepositoryKey( Repository repository )
+ {
+ return getRepositoryBaseKey( repository );
+ }
+
+ protected Object getRepositoryBaseKey( RepositoryBase repositoryBase )
+ {
+ return repositoryBase;
+ }
+
+ protected Object getNotifierKey( Notifier notifier )
+ {
+ return notifier;
+ }
+
+ protected Object getResourceKey( Resource resource )
+ {
+ return resource;
+ }
+
+ protected Object getExtensionKey( Extension extension )
+ {
+ return extension;
+ }
+
+ protected Object getExclusionKey( Exclusion exclusion )
+ {
+ return exclusion;
+ }
+
+}