blob: 3ba48ecc501e7c5d1823f523b597753b40c9e60a [file] [log] [blame]
package org.apache.maven.model.interpolation;
/*
* 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.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Properties;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import org.apache.maven.model.Activation;
import org.apache.maven.model.ActivationFile;
import org.apache.maven.model.ActivationOS;
import org.apache.maven.model.ActivationProperty;
import org.apache.maven.model.Build;
import org.apache.maven.model.BuildBase;
import org.apache.maven.model.CiManagement;
import org.apache.maven.model.Contributor;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.DependencyManagement;
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.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.Plugin;
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.apache.maven.model.building.ModelBuildingRequest;
import org.apache.maven.model.building.ModelProblem.Severity;
import org.apache.maven.model.building.ModelProblem.Version;
import org.apache.maven.model.building.ModelProblemCollector;
import org.apache.maven.model.building.ModelProblemCollectorRequest;
import org.apache.maven.model.path.PathTranslator;
import org.apache.maven.model.path.UrlNormalizer;
import org.codehaus.plexus.interpolation.InterpolationException;
import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
import org.codehaus.plexus.interpolation.RecursionInterceptor;
import org.codehaus.plexus.interpolation.StringSearchInterpolator;
import org.codehaus.plexus.interpolation.ValueSource;
import org.codehaus.plexus.util.xml.Xpp3Dom;
/**
* StringVisitorModelInterpolator
*
* @since 3.6.2
*/
@Named
@Singleton
public class StringVisitorModelInterpolator
extends AbstractStringBasedModelInterpolator
{
@Inject
public StringVisitorModelInterpolator( PathTranslator pathTranslator, UrlNormalizer urlNormalizer,
ModelVersionProcessor processor )
{
super( pathTranslator, urlNormalizer, processor );
}
interface InnerInterpolator
{
String interpolate( String value );
}
@Override
public Model interpolateModel( Model model, File projectDir, ModelBuildingRequest config,
ModelProblemCollector problems )
{
List<? extends ValueSource> valueSources = createValueSources( model, projectDir, config );
List<? extends InterpolationPostProcessor> postProcessors =
createPostProcessors( model, projectDir, config );
InnerInterpolator innerInterpolator = createInterpolator( valueSources, postProcessors, problems );
new ModelVisitor( innerInterpolator ).visit( model );
return model;
}
private InnerInterpolator createInterpolator( List<? extends ValueSource> valueSources,
List<? extends InterpolationPostProcessor> postProcessors,
final ModelProblemCollector problems )
{
final Map<String, String> cache = new HashMap<>();
final StringSearchInterpolator interpolator = new StringSearchInterpolator();
interpolator.setCacheAnswers( true );
for ( ValueSource vs : valueSources )
{
interpolator.addValueSource( vs );
}
for ( InterpolationPostProcessor postProcessor : postProcessors )
{
interpolator.addPostProcessor( postProcessor );
}
final RecursionInterceptor recursionInterceptor = createRecursionInterceptor();
return value ->
{
if ( value != null && value.contains( "${" ) )
{
String c = cache.get( value );
if ( c == null )
{
try
{
c = interpolator.interpolate( value, recursionInterceptor );
}
catch ( InterpolationException e )
{
problems.add( new ModelProblemCollectorRequest( Severity.ERROR, Version.BASE )
.setMessage( e.getMessage() ).setException( e ) );
}
cache.put( value, c );
}
return c;
}
return value;
};
}
@SuppressWarnings( "StringEquality" )
private static final class ModelVisitor
{
private final InnerInterpolator interpolator;
ModelVisitor( InnerInterpolator interpolator )
{
this.interpolator = interpolator;
}
void visit( Model model )
{
if ( model != null )
{
visit( (ModelBase) model );
// ModelVersion
String orgModelVersion = model.getModelVersion();
String intModelVersion = interpolate( orgModelVersion );
if ( orgModelVersion != intModelVersion )
{
model.setModelVersion( intModelVersion );
}
visit( model.getParent() );
// GroupId
String orgGroupId = model.getGroupId();
String intGroupId = interpolate( orgGroupId );
if ( orgGroupId != intGroupId )
{
model.setGroupId( intGroupId );
}
// ArtifactId
String orgArtifactId = model.getArtifactId();
String intArtifactId = interpolate( orgArtifactId );
if ( orgArtifactId != intArtifactId )
{
model.setArtifactId( intArtifactId );
}
// Version
String orgVersion = model.getVersion();
String intVersion = interpolate( orgVersion );
if ( orgVersion != intVersion )
{
model.setVersion( intVersion );
}
// Packaging
String orgPackaging = model.getPackaging();
String intPackaging = interpolate( orgPackaging );
if ( orgPackaging != intPackaging )
{
model.setPackaging( intPackaging );
}
// Name
String orgName = model.getName();
String intName = interpolate( orgName );
if ( orgName != intName )
{
model.setName( intName );
}
// Description
String orgDescription = model.getDescription();
String intDescription = interpolate( orgDescription );
if ( orgDescription != intDescription )
{
model.setDescription( intDescription );
}
// Url
String orgUrl = model.getUrl();
String intUrl = interpolate( orgUrl );
if ( orgUrl != intUrl )
{
model.setUrl( intUrl );
}
// ChildProjectUrlInheritAppendPath
String orgChildProjectUrlInheritAppendPath = model.getChildProjectUrlInheritAppendPath();
String intChildProjectUrlInheritAppendPath = interpolate( orgChildProjectUrlInheritAppendPath );
if ( orgChildProjectUrlInheritAppendPath != intChildProjectUrlInheritAppendPath )
{
model.setChildProjectUrlInheritAppendPath( intChildProjectUrlInheritAppendPath );
}
// InceptionYear
String orgInceptionYear = model.getInceptionYear();
String intInceptionYear = interpolate( orgInceptionYear );
if ( orgInceptionYear != intInceptionYear )
{
model.setInceptionYear( intInceptionYear );
}
visit( model.getOrganization() );
for ( License license : model.getLicenses() )
{
visit( license );
}
for ( Developer developer : model.getDevelopers() )
{
visit( developer );
}
for ( Contributor contributor : model.getContributors() )
{
visit( contributor );
}
for ( MailingList mailingList : model.getMailingLists() )
{
visit( mailingList );
}
visit( model.getPrerequisites() );
visit( model.getScm() );
visit( model.getIssueManagement() );
visit( model.getCiManagement() );
visit( model.getBuild() );
for ( Profile profile : model.getProfiles() )
{
visit( profile );
}
}
}
private void visit( Parent parent )
{
if ( parent != null )
{
String org, val;
// GroupId
org = parent.getGroupId();
val = interpolate( org );
if ( org != val )
{
parent.setGroupId( val );
}
// ArtifactId
org = parent.getArtifactId();
val = interpolate( org );
if ( org != val )
{
parent.setArtifactId( val );
}
// Version
org = parent.getVersion();
val = interpolate( org );
if ( org != val )
{
parent.setVersion( val );
}
// RelativePath
org = parent.getRelativePath();
val = interpolate( org );
if ( org != val )
{
parent.setRelativePath( val );
}
}
}
private void visit( Organization organization )
{
if ( organization != null )
{
String org, val;
// Name
org = organization.getName();
val = interpolate( org );
if ( org != val )
{
organization.setName( val );
}
// Url
org = organization.getUrl();
val = interpolate( org );
if ( org != val )
{
organization.setUrl( val );
}
}
}
private void visit( License license )
{
if ( license != null )
{
String org, val;
// Name
org = license.getName();
val = interpolate( org );
if ( org != val )
{
license.setName( val );
}
// Url
org = license.getUrl();
val = interpolate( org );
if ( org != val )
{
license.setUrl( val );
}
// Distribution
org = license.getDistribution();
val = interpolate( org );
if ( org != val )
{
license.setDistribution( val );
}
// Comments
org = license.getComments();
val = interpolate( org );
if ( org != val )
{
license.setComments( val );
}
}
}
private void visit( Developer developer )
{
if ( developer != null )
{
String org, val;
// Contributor
visit( (Contributor) developer );
// Distribution
org = developer.getId();
val = interpolate( org );
if ( org != val )
{
developer.setId( val );
}
}
}
private void visit( Contributor contributor )
{
if ( contributor != null )
{
String org, val;
// Name
org = contributor.getName();
val = interpolate( org );
if ( org != val )
{
contributor.setName( val );
}
// Email
org = contributor.getEmail();
val = interpolate( org );
if ( org != val )
{
contributor.setEmail( val );
}
// Url
org = contributor.getUrl();
val = interpolate( org );
if ( org != val )
{
contributor.setUrl( val );
}
// Organization
org = contributor.getOrganization();
val = interpolate( org );
if ( org != val )
{
contributor.setOrganization( val );
}
// OrganizationUrl
org = contributor.getOrganizationUrl();
val = interpolate( org );
if ( org != val )
{
contributor.setOrganizationUrl( val );
}
// Roles
visit( contributor.getRoles() );
}
}
private void visit( MailingList mailingList )
{
if ( mailingList != null )
{
String org, val;
// Name
org = mailingList.getName();
val = interpolate( org );
if ( org != val )
{
mailingList.setName( val );
}
// Subscribe
org = mailingList.getSubscribe();
val = interpolate( org );
if ( org != val )
{
mailingList.setSubscribe( val );
}
// Unsubscribe
org = mailingList.getUnsubscribe();
val = interpolate( org );
if ( org != val )
{
mailingList.setUnsubscribe( val );
}
// Post
org = mailingList.getPost();
val = interpolate( org );
if ( org != val )
{
mailingList.setPost( val );
}
// Archive
org = mailingList.getArchive();
val = interpolate( org );
if ( org != val )
{
mailingList.setArchive( val );
}
}
}
private void visit( Prerequisites prerequisites )
{
if ( prerequisites != null )
{
String org, val;
// Maven
org = prerequisites.getMaven();
val = interpolate( org );
if ( org != val )
{
prerequisites.setMaven( val );
}
}
}
private void visit( Scm scm )
{
if ( scm != null )
{
String org, val;
// Connection
org = scm.getConnection();
val = interpolate( org );
if ( org != val )
{
scm.setConnection( val );
}
// DeveloperConnection
org = scm.getDeveloperConnection();
val = interpolate( org );
if ( org != val )
{
scm.setDeveloperConnection( val );
}
// Tag
org = scm.getTag();
val = interpolate( org );
if ( org != val )
{
scm.setTag( val );
}
// Url
org = scm.getUrl();
val = interpolate( org );
if ( org != val )
{
scm.setUrl( val );
}
// ChildScmConnectionInheritAppendPath
org = scm.getChildScmConnectionInheritAppendPath();
val = interpolate( org );
if ( org != val )
{
scm.setChildScmConnectionInheritAppendPath( val );
}
// ChildScmDeveloperConnectionInheritAppendPath
org = scm.getChildScmDeveloperConnectionInheritAppendPath();
val = interpolate( org );
if ( org != val )
{
scm.setChildScmDeveloperConnectionInheritAppendPath( val );
}
// ChildScmUrlInheritAppendPath
org = scm.getChildScmUrlInheritAppendPath();
val = interpolate( org );
if ( org != val )
{
scm.setChildScmUrlInheritAppendPath( val );
}
}
}
private void visit( IssueManagement issueManagement )
{
if ( issueManagement != null )
{
String org, val;
// System
org = issueManagement.getSystem();
val = interpolate( org );
if ( org != val )
{
issueManagement.setSystem( val );
}
// Url
org = issueManagement.getUrl();
val = interpolate( org );
if ( org != val )
{
issueManagement.setUrl( val );
}
}
}
private void visit( CiManagement ciManagement )
{
if ( ciManagement != null )
{
String org, val;
// System
org = ciManagement.getSystem();
val = interpolate( org );
if ( org != val )
{
ciManagement.setSystem( val );
}
// Url
org = ciManagement.getUrl();
val = interpolate( org );
if ( org != val )
{
ciManagement.setUrl( val );
}
// Notifiers
for ( Notifier notifier : ciManagement.getNotifiers() )
{
visit( notifier );
}
}
}
private void visit( Notifier notifier )
{
if ( notifier != null )
{
String org, val;
// Type
org = notifier.getType();
val = interpolate( org );
if ( org != val )
{
notifier.setType( val );
}
// Configuration
visit( notifier.getConfiguration() );
}
}
private void visit( BuildBase build )
{
if ( build != null )
{
String org, val;
// Plugins
for ( Plugin plugin : build.getPlugins() )
{
visit( plugin );
}
// PluginManagement
visit( build.getPluginManagement() );
// DefaultGoal
org = build.getDefaultGoal();
val = interpolate( org );
if ( org != val )
{
build.setDefaultGoal( val );
}
// Resources
for ( Resource resource : build.getResources() )
{
visit( resource );
}
// TestResources
for ( Resource resource : build.getTestResources() )
{
visit( resource );
}
// Directory
org = build.getDirectory();
val = interpolate( org );
if ( org != val )
{
build.setDirectory( val );
}
// FinalName
org = build.getFinalName();
val = interpolate( org );
if ( org != val )
{
build.setFinalName( val );
}
// Filters
visit( build.getFilters() );
}
}
private void visit( PluginManagement pluginManagement )
{
if ( pluginManagement != null )
{
for ( Plugin plugin : pluginManagement.getPlugins() )
{
visit( plugin );
}
}
}
private void visit( Build build )
{
if ( build != null )
{
String org, val;
// BuildBase
visit( (BuildBase) build );
// SourceDirectory
org = build.getSourceDirectory();
val = interpolate( org );
if ( org != val )
{
build.setSourceDirectory( val );
}
// ScriptSourceDirectory
org = build.getScriptSourceDirectory();
val = interpolate( org );
if ( org != val )
{
build.setScriptSourceDirectory( val );
}
// TestSourceDirectory
org = build.getTestSourceDirectory();
val = interpolate( org );
if ( org != val )
{
build.setTestSourceDirectory( val );
}
// OutputDirectory
org = build.getOutputDirectory();
val = interpolate( org );
if ( org != val )
{
build.setOutputDirectory( val );
}
// TestOutputDirectory
org = build.getTestOutputDirectory();
val = interpolate( org );
if ( org != val )
{
build.setTestOutputDirectory( val );
}
// Extensions
for ( Extension extension : build.getExtensions() )
{
visit( extension );
}
}
}
private void visit( Resource resource )
{
if ( resource != null )
{
String org, val;
// Includes
visit( resource.getIncludes() );
// Excludes
visit( resource.getExcludes() );
// Directory
org = resource.getDirectory();
val = interpolate( org );
if ( org != val )
{
resource.setDirectory( val );
}
// TargetPath
org = resource.getTargetPath();
val = interpolate( org );
if ( org != val )
{
resource.setTargetPath( val );
}
// Filtering
org = resource.getFiltering();
val = interpolate( org );
if ( org != val )
{
resource.setFiltering( val );
}
}
}
private void visit( Plugin plugin )
{
if ( plugin != null )
{
String org, val;
// Inherited
org = plugin.getInherited();
val = interpolate( org );
if ( org != val )
{
plugin.setInherited( val );
}
// Configuration
visit( (Xpp3Dom) plugin.getConfiguration() );
// GroupId
org = plugin.getGroupId();
val = interpolate( org );
if ( org != val )
{
plugin.setGroupId( val );
}
// ArtifactId
org = plugin.getArtifactId();
val = interpolate( org );
if ( org != val )
{
plugin.setArtifactId( val );
}
// Version
org = plugin.getVersion();
val = interpolate( org );
if ( org != val )
{
plugin.setVersion( val );
}
// Extensions
org = plugin.getExtensions();
val = interpolate( org );
if ( org != val )
{
plugin.setExtensions( val );
}
// Executions
for ( PluginExecution execution : plugin.getExecutions() )
{
visit( execution );
}
// Dependencies
for ( Dependency dependency : plugin.getDependencies() )
{
visit( dependency );
}
}
}
private void visit( PluginExecution execution )
{
if ( execution != null )
{
String org, val;
// Inherited
org = execution.getInherited();
val = interpolate( org );
if ( org != val )
{
execution.setInherited( val );
}
// Configuration
visit( (Xpp3Dom) execution.getConfiguration() );
// Id
org = execution.getId();
val = interpolate( org );
if ( org != val )
{
execution.setId( val );
}
// Phase
org = execution.getPhase();
val = interpolate( org );
if ( org != val )
{
execution.setPhase( val );
}
// Goals
visit( execution.getGoals() );
}
}
private void visit( Xpp3Dom dom )
{
if ( dom != null )
{
String org, val;
// Content
org = dom.getValue();
val = interpolate( org );
if ( org != val )
{
dom.setValue( val );
}
// Attributes
for ( String attr : dom.getAttributeNames() )
{
org = dom.getAttribute( attr );
val = interpolate( org );
if ( org != val )
{
dom.setAttribute( attr, val );
}
}
// Children
for ( int i = 0, l = dom.getChildCount(); i < l; i++ )
{
visit( dom.getChild( i ) );
}
}
}
private void visit( Extension extension )
{
if ( extension != null )
{
String org, val;
// GroupId
org = extension.getGroupId();
val = interpolate( org );
if ( org != val )
{
extension.setGroupId( val );
}
// ArtifactId
org = extension.getArtifactId();
val = interpolate( org );
if ( org != val )
{
extension.setArtifactId( val );
}
// Version
org = extension.getVersion();
val = interpolate( org );
if ( org != val )
{
extension.setVersion( val );
}
}
}
private void visit( Profile profile )
{
if ( profile != null )
{
String org, val;
// ModelBase
visit( (ModelBase) profile );
// Id
org = profile.getId();
val = interpolate( org );
if ( org != val )
{
profile.setId( val );
}
// Activation
visit( profile.getActivation() );
// Build
visit( profile.getBuild() );
}
}
private void visit( Activation activation )
{
if ( activation != null )
{
String org, val;
// Jdk
org = activation.getJdk();
val = interpolate( org );
if ( org != val )
{
activation.setJdk( val );
}
// OS
visit( activation.getOs() );
// Property
visit( activation.getProperty() );
// File
visit( activation.getFile() );
}
}
private void visit( ActivationOS activationOS )
{
if ( activationOS != null )
{
String org, val;
// Name
org = activationOS.getName();
val = interpolate( org );
if ( org != val )
{
activationOS.setName( val );
}
// Family
org = activationOS.getFamily();
val = interpolate( org );
if ( org != val )
{
activationOS.setFamily( val );
}
// Arch
org = activationOS.getArch();
val = interpolate( org );
if ( org != val )
{
activationOS.setArch( val );
}
// Version
org = activationOS.getVersion();
val = interpolate( org );
if ( org != val )
{
activationOS.setVersion( val );
}
}
}
private void visit( ActivationProperty activationProperty )
{
if ( activationProperty != null )
{
String org, val;
// Name
org = activationProperty.getName();
val = interpolate( org );
if ( org != val )
{
activationProperty.setName( val );
}
// Value
org = activationProperty.getValue();
val = interpolate( org );
if ( org != val )
{
activationProperty.setValue( val );
}
}
}
private void visit( ActivationFile activationFile )
{
if ( activationFile != null )
{
String org, val;
// Missing
org = activationFile.getMissing();
val = interpolate( org );
if ( org != val )
{
activationFile.setMissing( val );
}
// Exists
org = activationFile.getExists();
val = interpolate( org );
if ( org != val )
{
activationFile.setExists( val );
}
}
}
private void visit( ModelBase modelBase )
{
if ( modelBase != null )
{
visit( modelBase.getModules() );
visit( modelBase.getDistributionManagement() );
visit( modelBase.getProperties() );
visit( modelBase.getDependencyManagement() );
for ( Dependency dependency : modelBase.getDependencies() )
{
visit( dependency );
}
for ( Repository repository : modelBase.getRepositories() )
{
visit( repository );
}
for ( Repository repository : modelBase.getPluginRepositories() )
{
visit( repository );
}
visit( modelBase.getReporting() );
}
}
private void visit( DistributionManagement distributionManagement )
{
if ( distributionManagement != null )
{
String org, val;
// Repository
visit( distributionManagement.getRepository() );
// SnapshotRepository
visit( distributionManagement.getSnapshotRepository() );
// Site
visit( distributionManagement.getSite() );
// DownloadUrl
org = distributionManagement.getDownloadUrl();
val = interpolate( org );
if ( org != val )
{
distributionManagement.setDownloadUrl( val );
}
// Relocation
visit( distributionManagement.getRelocation() );
}
}
private void visit( Site site )
{
if ( site != null )
{
String org, val;
// Id
org = site.getId();
val = interpolate( org );
if ( org != val )
{
site.setId( val );
}
// Name
org = site.getName();
val = interpolate( org );
if ( org != val )
{
site.setName( val );
}
// Url
org = site.getUrl();
val = interpolate( org );
if ( org != val )
{
site.setUrl( val );
}
// ChildSiteUrlInheritAppendPath
org = site.getChildSiteUrlInheritAppendPath();
val = interpolate( org );
if ( org != val )
{
site.setChildSiteUrlInheritAppendPath( val );
}
}
}
private void visit( Relocation relocation )
{
if ( relocation != null )
{
String org, val;
// GroupId
org = relocation.getGroupId();
val = interpolate( org );
if ( org != val )
{
relocation.setGroupId( val );
}
// ArtifactId
org = relocation.getArtifactId();
val = interpolate( org );
if ( org != val )
{
relocation.setArtifactId( val );
}
// Version
org = relocation.getVersion();
val = interpolate( org );
if ( org != val )
{
relocation.setVersion( val );
}
// Message
org = relocation.getMessage();
val = interpolate( org );
if ( org != val )
{
relocation.setMessage( val );
}
}
}
private void visit( DependencyManagement dependencyManagement )
{
if ( dependencyManagement != null )
{
// Dependencies
for ( Dependency dependency : dependencyManagement.getDependencies() )
{
visit( dependency );
}
}
}
private void visit( Repository repository )
{
if ( repository != null )
{
visit( (RepositoryBase) repository );
visit( repository.getReleases() );
visit( repository.getSnapshots() );
}
}
private void visit( RepositoryBase repositoryBase )
{
if ( repositoryBase != null )
{
// Id
String orgId = repositoryBase.getId();
String intId = interpolate( orgId );
if ( orgId != intId )
{
repositoryBase.setId( intId );
}
// Name
String orgName = repositoryBase.getName();
String intName = interpolate( orgName );
if ( orgName != intName )
{
repositoryBase.setName( intName );
}
// Url
String orgUrl = repositoryBase.getUrl();
String intUrl = interpolate( orgUrl );
if ( orgUrl != intUrl )
{
repositoryBase.setUrl( intUrl );
}
// Layout
String orgLayout = repositoryBase.getLayout();
String intLayout = interpolate( orgLayout );
if ( orgLayout != intLayout )
{
repositoryBase.setLayout( intLayout );
}
}
}
private void visit( RepositoryPolicy repositoryPolicy )
{
if ( repositoryPolicy != null )
{
// Enabled
String orgEnabled = repositoryPolicy.getEnabled();
String intEnabled = interpolate( orgEnabled );
if ( orgEnabled != intEnabled )
{
repositoryPolicy.setEnabled( intEnabled );
}
// UpdatePolicy
String orgUpdatePolicy = repositoryPolicy.getUpdatePolicy();
String intUpdatePolicy = interpolate( orgUpdatePolicy );
if ( orgUpdatePolicy != intUpdatePolicy )
{
repositoryPolicy.setUpdatePolicy( intUpdatePolicy );
}
// ChecksumPolicy
String orgChecksumPolicy = repositoryPolicy.getChecksumPolicy();
String intChecksumPolicy = interpolate( orgChecksumPolicy );
if ( orgChecksumPolicy != intChecksumPolicy )
{
repositoryPolicy.setChecksumPolicy( intChecksumPolicy );
}
}
}
private void visit( Dependency dependency )
{
if ( dependency != null )
{
String org, val;
// GroupId
org = dependency.getGroupId();
val = interpolate( org );
if ( org != val )
{
dependency.setGroupId( val );
dependency.clearManagementKey();
}
// ArtifactId
org = dependency.getArtifactId();
val = interpolate( org );
if ( org != val )
{
dependency.setArtifactId( val );
dependency.clearManagementKey();
}
// Version
org = dependency.getVersion();
val = interpolate( org );
if ( org != val )
{
dependency.setVersion( val );
}
// Type
org = dependency.getType();
val = interpolate( org );
if ( org != val )
{
dependency.setType( val );
dependency.clearManagementKey();
}
// Classifier
org = dependency.getClassifier();
val = interpolate( org );
if ( org != val )
{
dependency.setClassifier( val );
dependency.clearManagementKey();
}
// Scope
org = dependency.getScope();
val = interpolate( org );
if ( org != val )
{
dependency.setScope( val );
}
// SystemPath
org = dependency.getSystemPath();
val = interpolate( org );
if ( org != val )
{
dependency.setSystemPath( val );
}
// Exclusions
for ( Exclusion exclusion : dependency.getExclusions() )
{
visit( exclusion );
}
// Optional
org = dependency.getOptional();
val = interpolate( org );
if ( org != val )
{
dependency.setOptional( val );
}
}
}
private void visit( Exclusion exclusion )
{
if ( exclusion != null )
{
String org, val;
// GroupId
org = exclusion.getGroupId();
val = interpolate( org );
if ( org != val )
{
exclusion.setGroupId( val );
}
// ArtifactId
org = exclusion.getArtifactId();
val = interpolate( org );
if ( org != val )
{
exclusion.setArtifactId( val );
}
}
}
private void visit( Reporting reporting )
{
if ( reporting != null )
{
String org, val;
// ExcludeDefaults
org = reporting.getExcludeDefaults();
val = interpolate( org );
if ( org != val )
{
reporting.setExcludeDefaults( val );
}
// OutputDirectory
org = reporting.getOutputDirectory();
val = interpolate( org );
if ( org != val )
{
reporting.setOutputDirectory( val );
}
// Plugins
for ( ReportPlugin plugin : reporting.getPlugins() )
{
visit( plugin );
}
}
}
private void visit( ReportPlugin plugin )
{
if ( plugin != null )
{
String org, val;
// Inherited
org = plugin.getInherited();
val = interpolate( org );
if ( org != val )
{
plugin.setInherited( val );
}
// Configuration
visit( (Xpp3Dom) plugin.getConfiguration() );
// GroupId
org = plugin.getGroupId();
val = interpolate( org );
if ( org != val )
{
plugin.setGroupId( val );
}
// ArtifactId
org = plugin.getArtifactId();
val = interpolate( org );
if ( org != val )
{
plugin.setArtifactId( val );
}
// Version
org = plugin.getVersion();
val = interpolate( org );
if ( org != val )
{
plugin.setVersion( val );
}
// ReportSets
for ( ReportSet reportSet : plugin.getReportSets() )
{
visit( reportSet );
}
}
}
private void visit( ReportSet reportSet )
{
if ( reportSet != null )
{
String org, val;
// Inherited
org = reportSet.getInherited();
val = interpolate( org );
if ( org != val )
{
reportSet.setInherited( val );
}
// Configuration
visit( (Xpp3Dom) reportSet.getConfiguration() );
// Id
org = reportSet.getId();
val = interpolate( org );
if ( org != val )
{
reportSet.setId( val );
}
// Reports
visit( reportSet.getReports() );
}
}
private void visit( Properties properties )
{
if ( properties != null )
{
for ( Map.Entry<Object, Object> entry : properties.entrySet() )
{
Object v = entry.getValue();
if ( v instanceof String )
{
String value = (String) v;
String inter = interpolate( value );
if ( value != inter && inter != null )
{
entry.setValue( inter );
}
}
}
}
}
private void visit( List<String> list )
{
if ( list != null )
{
ListIterator<String> it = list.listIterator();
while ( it.hasNext() )
{
String value = it.next();
String inter = interpolate( value );
if ( value != inter )
{
it.set( inter );
}
}
}
}
private String interpolate( String value )
{
return interpolator.interpolate( value );
}
}
}