All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.maven.model.merge.ModelMerger Maven / Gradle / Ivy

There is a newer version: 4.0.0-beta-5
Show newest version
/*
 * 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.
 */
package org.apache.maven.model.merge;

import java.io.ObjectStreamException;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
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:
    *
  • mergeClassname( Classname target, Classname source, boolean sourceDominant, * Map<Object, Object> context ) for each model class
  • *
  • mergeClassname_FieldName( Classname target, Classname source, boolean * sourceDominant, Map<Object, Object> context ) for each field of each model class
  • *
  • Object getClassnameKey( Classname classname ) * for each class that is used in a list
  • *
* Code is written like it could be generated, with default behaviour to be overridden when necessary. * This is particularly the case for Object getClassnameKey( Classname classname ) * 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 * null. * @param source The (read-only) source object that should be merged into the target object, may be * null. * @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 null. */ public void merge(Model target, Model source, boolean sourceDominant, Map hints) { Objects.requireNonNull(target, "target cannot be null"); if (source == null) { return; } Map context = new HashMap<>(); if (hints != null) { context.putAll(hints); } mergeModel(target, source, sourceDominant, context); } protected void mergeModel(Model target, Model source, boolean sourceDominant, Map context) { mergeModelBase(target, source, sourceDominant, context); mergeModel_ChildProjectUrlInheritAppendPath(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 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 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 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 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_ChildProjectUrlInheritAppendPath( Model target, Model source, boolean sourceDominant, Map context) { String src = source.getChildProjectUrlInheritAppendPath(); if (src != null) { if (sourceDominant || target.getChildProjectUrlInheritAppendPath() == null) { target.setChildProjectUrlInheritAppendPath(src); target.setLocation( "child.project.url.inherit.append.path", source.getLocation("child.project.url.inherit.append.path")); } } } protected void mergeModel_Version(Model target, Model source, boolean sourceDominant, Map 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 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 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 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 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 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 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 context) { target.setLicenses(merge(target.getLicenses(), source.getLicenses(), sourceDominant, new LicenseKeyComputer())); } protected void mergeModel_MailingLists( Model target, Model source, boolean sourceDominant, Map context) { target.setMailingLists(merge( target.getMailingLists(), source.getMailingLists(), sourceDominant, new MailingListKeyComputer())); } protected void mergeModel_Developers( Model target, Model source, boolean sourceDominant, Map context) { target.setDevelopers( merge(target.getDevelopers(), source.getDevelopers(), sourceDominant, new DeveloperKeyComputer())); } protected void mergeModel_Contributors( Model target, Model source, boolean sourceDominant, Map context) { target.setContributors(merge( target.getContributors(), source.getContributors(), sourceDominant, new ContributorKeyComputer())); } protected void mergeModel_IssueManagement( Model target, Model source, boolean sourceDominant, Map 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 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 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 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 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 context) { target.setProfiles(merge(target.getProfiles(), source.getProfiles(), sourceDominant, new ProfileKeyComputer())); } protected void mergeModelBase( ModelBase target, ModelBase source, boolean sourceDominant, Map 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 context) { List src = source.getModules(); if (!src.isEmpty()) { List tgt = target.getModules(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setModules(merged); } } protected void mergeModelBase_Dependencies( ModelBase target, ModelBase source, boolean sourceDominant, Map context) { target.setDependencies( merge(target.getDependencies(), source.getDependencies(), sourceDominant, new DependencyKeyComputer())); } protected void mergeModelBase_Repositories( ModelBase target, ModelBase source, boolean sourceDominant, Map context) { target.setRepositories( merge(target.getRepositories(), source.getRepositories(), sourceDominant, new RepositoryKeyComputer())); } protected void mergeModelBase_PluginRepositories( ModelBase target, ModelBase source, boolean sourceDominant, Map context) { target.setPluginRepositories(merge( target.getPluginRepositories(), source.getPluginRepositories(), sourceDominant, new RepositoryKeyComputer())); } protected void mergeModelBase_DistributionManagement( ModelBase target, ModelBase source, boolean sourceDominant, Map 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 context) { mergeRepository(target, source, sourceDominant, context); mergeDeploymentRepository_UniqueVersion(target, source, sourceDominant, context); } protected void mergeDeploymentRepository_UniqueVersion( DeploymentRepository target, DeploymentRepository source, boolean sourceDominant, Map context) { if (sourceDominant) { target.setUniqueVersion(source.isUniqueVersion()); target.setLocation("uniqueVersion", source.getLocation("uniqueVersion")); } } protected void mergeSite(Site target, Site source, boolean sourceDominant, Map context) { mergeSite_ChildSiteUrlInheritAppendPath(target, source, sourceDominant, context); mergeSite_Id(target, source, sourceDominant, context); mergeSite_Name(target, source, sourceDominant, context); mergeSite_Url(target, source, sourceDominant, context); } protected void mergeSite_ChildSiteUrlInheritAppendPath( Site target, Site source, boolean sourceDominant, Map context) { String src = source.getChildSiteUrlInheritAppendPath(); if (src != null) { if (sourceDominant || target.getChildSiteUrlInheritAppendPath() == null) { target.setChildSiteUrlInheritAppendPath(src); target.setLocation( "child.site.url.inherit.append.path", source.getLocation("child.site.url.inherit.append.path")); } } } protected void mergeSite_Id(Site target, Site source, boolean sourceDominant, Map 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 context) { target.setExclusions( merge(target.getExclusions(), source.getExclusions(), sourceDominant, new ExclusionKeyComputer())); } protected void mergeExclusion( Exclusion target, Exclusion source, boolean sourceDominant, Map context) { mergeExclusion_GroupId(target, source, sourceDominant, context); mergeExclusion_ArtifactId(target, source, sourceDominant, context); } protected void mergeExclusion_GroupId( Exclusion target, Exclusion source, boolean sourceDominant, Map 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 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 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 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 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 context) { target.setPlugins( merge(target.getPlugins(), source.getPlugins(), sourceDominant, new ReportPluginKeyComputer())); } protected void mergeReportPlugin( ReportPlugin target, ReportPlugin source, boolean sourceDominant, Map 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 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 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 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 context) { target.setReportSets( merge(target.getReportSets(), source.getReportSets(), sourceDominant, new ReportSetKeyComputer())); } protected void mergeReportSet( ReportSet target, ReportSet source, boolean sourceDominant, Map 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 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 context) { List src = source.getReports(); if (!src.isEmpty()) { List tgt = target.getReports(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setReports(merged); InputLocation sourceLocation = source.getLocation("reports"); if (sourceLocation != null) { InputLocation targetLocation = target.getLocation("reports"); if (targetLocation == null) { target.setLocation("reports", sourceLocation); } else { for (int i = 0; i < src.size(); i++) { targetLocation.setLocation( Integer.valueOf(tgt.size() + i), sourceLocation.getLocation(Integer.valueOf(i))); } } } } } protected void mergeDependencyManagement( DependencyManagement target, DependencyManagement source, boolean sourceDominant, Map context) { mergeDependencyManagement_Dependencies(target, source, sourceDominant, context); } protected void mergeDependencyManagement_Dependencies( DependencyManagement target, DependencyManagement source, boolean sourceDominant, Map context) { target.setDependencies( merge(target.getDependencies(), source.getDependencies(), sourceDominant, new DependencyKeyComputer())); } protected void mergeParent(Parent target, Parent source, boolean sourceDominant, Map 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 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 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 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 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 context) { mergeOrganization_Name(target, source, sourceDominant, context); mergeOrganization_Url(target, source, sourceDominant, context); } protected void mergeOrganization_Name( Organization target, Organization source, boolean sourceDominant, Map 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 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 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 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 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 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 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 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 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 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 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 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 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 context) { List src = source.getOtherArchives(); if (!src.isEmpty()) { List tgt = target.getOtherArchives(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setOtherArchives(merged); } } protected void mergeDeveloper( Developer target, Developer source, boolean sourceDominant, Map context) { mergeContributor(target, source, sourceDominant, context); mergeDeveloper_Id(target, source, sourceDominant, context); } protected void mergeDeveloper_Id( Developer target, Developer source, boolean sourceDominant, Map 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 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 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 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 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 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 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 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 context) { List src = source.getRoles(); if (!src.isEmpty()) { List tgt = target.getRoles(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setRoles(merged); } } protected void mergeContributor_Properties( Contributor target, Contributor source, boolean sourceDominant, Map 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 context) { mergeIssueManagement_Url(target, source, sourceDominant, context); mergeIssueManagement_System(target, source, sourceDominant, context); } protected void mergeIssueManagement_System( IssueManagement target, IssueManagement source, boolean sourceDominant, Map 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 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 context) { mergeScm_ChildScmConnectionInheritAppendPath(target, source, sourceDominant, context); mergeScm_ChildScmDeveloperConnectionInheritAppendPath(target, source, sourceDominant, context); mergeScm_ChildScmUrlInheritAppendPath(target, source, sourceDominant, 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_ChildScmConnectionInheritAppendPath( Scm target, Scm source, boolean sourceDominant, Map context) { String src = source.getChildScmConnectionInheritAppendPath(); if (src != null) { if (sourceDominant || target.getChildScmConnectionInheritAppendPath() == null) { target.setChildScmConnectionInheritAppendPath(src); target.setLocation( "child.scm.connection.inherit.append.path", source.getLocation("child.scm.connection.inherit.append.path")); } } } protected void mergeScm_ChildScmDeveloperConnectionInheritAppendPath( Scm target, Scm source, boolean sourceDominant, Map context) { String src = source.getChildScmDeveloperConnectionInheritAppendPath(); if (src != null) { if (sourceDominant || target.getChildScmDeveloperConnectionInheritAppendPath() == null) { target.setChildScmDeveloperConnectionInheritAppendPath(src); target.setLocation( "child.scm.developerConnection.inherit.append.path", source.getLocation("child.scm.developerConnection.inherit.append.path")); } } } protected void mergeScm_ChildScmUrlInheritAppendPath( Scm target, Scm source, boolean sourceDominant, Map context) { String src = source.getChildScmUrlInheritAppendPath(); if (src != null) { if (sourceDominant || target.getChildScmUrlInheritAppendPath() == null) { target.setChildScmUrlInheritAppendPath(src); target.setLocation( "child.scm.url.inherit.append.path", source.getLocation("child.scm.url.inherit.append.path")); } } } protected void mergeScm_Url(Scm target, Scm source, boolean sourceDominant, Map 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 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 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 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 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 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 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 context) { target.setNotifiers( merge(target.getNotifiers(), source.getNotifiers(), sourceDominant, new NotifierKeyComputer())); } protected void mergeNotifier( Notifier target, Notifier source, boolean sourceDominant, Map 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 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 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 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 context) { if (sourceDominant) { target.setSendOnError(source.isSendOnError()); } } protected void mergeNotifier_SendOnFailure( Notifier target, Notifier source, boolean sourceDominant, Map context) { if (sourceDominant) { target.setSendOnFailure(source.isSendOnFailure()); } } protected void mergeNotifier_SendOnSuccess( Notifier target, Notifier source, boolean sourceDominant, Map context) { if (sourceDominant) { target.setSendOnSuccess(source.isSendOnSuccess()); } } protected void mergeNotifier_SendOnWarning( Notifier target, Notifier source, boolean sourceDominant, Map context) { if (sourceDominant) { target.setSendOnWarning(source.isSendOnWarning()); } } protected void mergePrerequisites( Prerequisites target, Prerequisites source, boolean sourceDominant, Map context) { mergePrerequisites_Maven(target, source, sourceDominant, context); } protected void mergePrerequisites_Maven( Prerequisites target, Prerequisites source, boolean sourceDominant, Map 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 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 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 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 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 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 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 context) { target.setExtensions( merge(target.getExtensions(), source.getExtensions(), sourceDominant, new ExtensionKeyComputer())); } protected void mergeExtension( Extension target, Extension source, boolean sourceDominant, Map 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 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 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 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 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 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 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 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 context) { List src = source.getFilters(); if (!src.isEmpty()) { List tgt = target.getFilters(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setFilters(merged); } } protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant, Map context) { target.setResources( merge(target.getResources(), source.getResources(), sourceDominant, new ResourceKeyComputer())); } protected void mergeBuildBase_TestResources( BuildBase target, BuildBase source, boolean sourceDominant, Map context) { target.setTestResources( merge(target.getTestResources(), source.getTestResources(), sourceDominant, new ResourceKeyComputer())); } protected void mergePluginConfiguration( PluginConfiguration target, PluginConfiguration source, boolean sourceDominant, Map context) { mergePluginContainer(target, source, sourceDominant, context); mergePluginConfiguration_PluginManagement(target, source, sourceDominant, context); } protected void mergePluginConfiguration_PluginManagement( PluginConfiguration target, PluginConfiguration source, boolean sourceDominant, Map 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 context) { mergePluginContainer_Plugins(target, source, sourceDominant, context); } protected void mergePluginContainer_Plugins( PluginContainer target, PluginContainer source, boolean sourceDominant, Map context) { target.setPlugins(merge(target.getPlugins(), source.getPlugins(), sourceDominant, new PluginKeyComputer())); } protected void mergePluginManagement( PluginManagement target, PluginManagement source, boolean sourceDominant, Map context) { mergePluginContainer(target, source, sourceDominant, context); } protected void mergePlugin(Plugin target, Plugin source, boolean sourceDominant, Map 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 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 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 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 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 context) { target.setDependencies( merge(target.getDependencies(), source.getDependencies(), sourceDominant, new DependencyKeyComputer())); } protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant, Map context) { target.setExecutions( merge(target.getExecutions(), source.getExecutions(), sourceDominant, new ExecutionKeyComputer())); } protected void mergeConfigurationContainer( ConfigurationContainer target, ConfigurationContainer source, boolean sourceDominant, Map context) { mergeConfigurationContainer_Inherited(target, source, sourceDominant, context); mergeConfigurationContainer_Configuration(target, source, sourceDominant, context); } protected void mergeConfigurationContainer_Inherited( ConfigurationContainer target, ConfigurationContainer source, boolean sourceDominant, Map 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 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 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 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 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 context) { List src = source.getGoals(); if (!src.isEmpty()) { List tgt = target.getGoals(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setGoals(merged); } } protected void mergeResource( Resource target, Resource source, boolean sourceDominant, Map 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 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 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 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 context) { mergePatternSet(target, source, sourceDominant, context); mergeFileSet_Directory(target, source, sourceDominant, context); } protected void mergeFileSet_Directory( FileSet target, FileSet source, boolean sourceDominant, Map 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 context) { mergePatternSet_Includes(target, source, sourceDominant, context); mergePatternSet_Excludes(target, source, sourceDominant, context); } protected void mergePatternSet_Includes( PatternSet target, PatternSet source, boolean sourceDominant, Map context) { List src = source.getIncludes(); if (!src.isEmpty()) { List tgt = target.getIncludes(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setIncludes(merged); } } protected void mergePatternSet_Excludes( PatternSet target, PatternSet source, boolean sourceDominant, Map context) { List src = source.getExcludes(); if (!src.isEmpty()) { List tgt = target.getExcludes(); List merged = new ArrayList<>(tgt.size() + src.size()); merged.addAll(tgt); merged.addAll(src); target.setExcludes(merged); } } protected void mergeProfile(Profile target, Profile source, boolean sourceDominant, Map context) { mergeModelBase(target, source, sourceDominant, context); // TODO } protected void mergeActivation( Activation target, Activation source, boolean sourceDominant, Map 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; } /** * Use to compute keys for data structures * @param */ private interface KeyComputer { Object key(T t); } /** * Remapping function * @param */ private interface Remapping { T merge(T u, T v); } /** * KeyComputer for Dependency */ private final class DependencyKeyComputer implements KeyComputer { @Override public Object key(Dependency dependency) { return getDependencyKey(dependency); } } /** * KeyComputer for License */ private class LicenseKeyComputer implements KeyComputer { @Override public Object key(License license) { return getLicenseKey(license); } } /** * KeyComputer for MailingList */ private class MailingListKeyComputer implements KeyComputer { @Override public Object key(MailingList mailingList) { return getMailingListKey(mailingList); } } /** * KeyComputer for Developer */ private class DeveloperKeyComputer implements KeyComputer { @Override public Object key(Developer developer) { return getDeveloperKey(developer); } } /** * KeyComputer for Contributor */ private class ContributorKeyComputer implements KeyComputer { @Override public Object key(Contributor contributor) { return getContributorKey(contributor); } } /** * KeyComputer for Profile */ private class ProfileKeyComputer implements KeyComputer { @Override public Object key(Profile profile) { return getProfileKey(profile); } } /** * KeyComputer for Repository */ private class RepositoryKeyComputer implements KeyComputer { @Override public Object key(Repository repository) { return getRepositoryKey(repository); } } /** * KeyComputer for ReportPlugin */ private class ReportPluginKeyComputer implements KeyComputer { @Override public Object key(ReportPlugin plugin) { return getReportPluginKey(plugin); } } /** * KeyComputer for Plugin */ private class PluginKeyComputer implements KeyComputer { @Override public Object key(Plugin plugin) { return getPluginKey(plugin); } } /** * KeyComputer for ReportSet */ private class ReportSetKeyComputer implements KeyComputer { @Override public Object key(ReportSet reportSet) { return getReportSetKey(reportSet); } } /** * KeyComputer for Notifier */ private class NotifierKeyComputer implements KeyComputer { @Override public Object key(Notifier notifier) { return getNotifierKey(notifier); } } /** * KeyComputer for Extension */ private class ExtensionKeyComputer implements KeyComputer { @Override public Object key(Extension extension) { return getExtensionKey(extension); } } /** * KeyComputer for Resource */ private class ResourceKeyComputer implements KeyComputer { @Override public Object key(Resource resource) { return getResourceKey(resource); } } /** * KeyComputer for PluginExecution */ private class ExecutionKeyComputer implements KeyComputer { @Override public Object key(PluginExecution pluginExecution) { return getPluginExecutionKey(pluginExecution); } } /** * KeyComputer for Exclusion */ private class ExclusionKeyComputer implements KeyComputer { @Override public Object key(Exclusion exclusion) { return getExclusionKey(exclusion); } } /** * Return the second value if sourceDominant is true, the first one otherwise. * @param */ private static class SourceDominant implements Remapping { private final boolean sourceDominant; SourceDominant(boolean sourceDominant) { this.sourceDominant = sourceDominant; } @Override public T merge(T u, T v) { return sourceDominant ? v : u; } } /** * Merge two lists */ private static List merge(List tgt, List src, boolean sourceDominant, KeyComputer computer) { return merge(tgt, src, computer, new SourceDominant(sourceDominant)); } private static List merge(List tgt, List src, KeyComputer computer, Remapping remapping) { if (src.isEmpty()) { return tgt; } MergingList list; if (tgt instanceof MergingList) { list = (MergingList) tgt; } else { list = new MergingList<>(computer, src.size() + tgt.size()); list.mergeAll(tgt, new SourceDominant(true)); } list.mergeAll(src, remapping); return list; } /** * Merging list * @param */ private static class MergingList extends AbstractList implements java.io.Serializable { private final KeyComputer keyComputer; private Map map; private List list; MergingList(KeyComputer keyComputer, int initialCapacity) { this.map = new LinkedHashMap<>(initialCapacity); this.keyComputer = keyComputer; } Object writeReplace() throws ObjectStreamException { return new ArrayList<>(this); } @Override public Iterator iterator() { if (map != null) { return map.values().iterator(); } else { return list.iterator(); } } void mergeAll(Collection vs, Remapping remapping) { if (map == null) { map = new LinkedHashMap<>(list.size() + vs.size()); for (V v : list) { map.put(keyComputer.key(v), v); } list = null; } if (vs instanceof MergingList && ((MergingList) vs).map != null) { for (Map.Entry e : ((MergingList) vs).map.entrySet()) { Object key = e.getKey(); V oldValue = map.get(key); // JDK8: this should be a call to map.merge( key, v, remapping ) V newValue = (oldValue == null) ? e.getValue() : remapping.merge(oldValue, e.getValue()); if (newValue == null) { remove(key); } else if (newValue != oldValue) { map.put(key, newValue); } } } else { for (V v : vs) { Object key = keyComputer.key(v); // JDK8: this should be a call to map.merge( key, v, remapping ) V oldValue = map.get(key); V newValue = (oldValue == null) ? v : remapping.merge(oldValue, v); if (newValue == null) { remove(key); } else { map.put(key, newValue); } } } } @Override public boolean contains(Object o) { if (map != null) { return map.containsValue(o); } else { return list.contains(o); } } private List asList() { if (list == null) { list = new ArrayList<>(map.values()); map = null; } return list; } @Override public void add(int index, V element) { asList().add(index, element); } @Override public V remove(int index) { return asList().remove(index); } @Override public V get(int index) { return asList().get(index); } @Override public int size() { if (map != null) { return map.size(); } else { return list.size(); } } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy