if ( model.getProperties() != null )
{
props.putAll( model.getProperties() );
}
ArchivaProjectModel ret = ArchivaModelCloner.clone( model );
// TODO: should probably clone evaluator to prevent threading issues.
synchronized ( evaluator )
{
// TODO: create .resetSources() method in ExpressionEvaluator project on plexus side.
// Remove previous expression sources.
List<ExpressionSource> oldSources = new ArrayList<ExpressionSource>();
oldSources.addAll( evaluator.getExpressionSourceList() );
for ( ExpressionSource exprSrc : oldSources )
{
evaluator.removeExpressionSource( exprSrc );
}
// Setup new sources (based on current model)
PropertiesExpressionSource propsSource = new PropertiesExpressionSource();
propsSource.setProperties( props );
evaluator.addExpressionSource( propsSource );
// Add system properties to the mix.
evaluator.addExpressionSource( new SystemPropertyExpressionSource() );
try
{
// Setup some common properties.
props.setProperty( "pom.groupId", StringUtils.defaultString( evaluator.expand( model.getGroupId() ) ) );
props.setProperty( "pom.artifactId", StringUtils.defaultString( evaluator
.expand( model.getArtifactId() ) ) );
props.setProperty( "pom.version", StringUtils.defaultString( evaluator.expand( model.getVersion() ) ) );
props.setProperty( "pom.name", StringUtils.defaultString( evaluator.expand( model.getName() ) ) );
// Evaluate everything.
ret.setVersion( evaluator.expand( ret.getVersion() ) );
ret.setGroupId( evaluator.expand( ret.getGroupId() ) );
ret.setName( evaluator.expand( ret.getName() ) );
ret.setDescription( evaluator.expand( ret.getDescription() ) );
ret.setPackaging( evaluator.expand( ret.getPackaging() ) );
ret.setUrl( evaluator.expand( ret.getUrl() ) );
evaluateParentProject( evaluator, ret.getParentProject() );
evaluateBuildExtensions( evaluator, ret.getBuildExtensions() );
evaluateCiManagement( evaluator, ret.getCiManagement() );
evaluateDependencyList( evaluator, ret.getDependencies() );
evaluateDependencyList( evaluator, ret.getDependencyManagement() );
evaluateIndividuals( evaluator, ret.getIndividuals() );
evaluateIssueManagement( evaluator, ret.getIssueManagement() );
evaluateLicenses( evaluator, ret.getLicenses() );
evaluateMailingLists( evaluator, ret.getMailingLists() );
evaluateOrganization( evaluator, ret.getOrganization() );
evaluatePlugins( evaluator, ret.getPlugins() );
evaluateRelocation( evaluator, ret.getRelocation() );
evaluateReports( evaluator, ret.getReports() );
evaluateRepositories( evaluator, ret.getRepositories() );
evaluateScm( evaluator, ret.getScm() );
}
catch ( EvaluatorException e )
{
throw new ProjectModelException( "Unable to evaluate expression in model: " + e.getMessage(), e );
}