You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2009/05/20 18:32:40 UTC

svn commit: r776758 - in /maven/components/branches/maven-2.2.0-RC/maven-project/src: main/java/org/apache/maven/project/ main/java/org/apache/maven/project/artifact/ main/java/org/apache/maven/project/interpolation/ main/resources/META-INF/plexus/ tes...

Author: jdcasey
Date: Wed May 20 16:32:39 2009
New Revision: 776758

URL: http://svn.apache.org/viewvc?rev=776758&view=rev
Log:
[MNG-4167] Move version-expression transformation code out of ArtifactTransformation shell, into its own component that is used directly from the MavenProjectBuilder.

When a POM is loaded from a project directory (not from a repository), the last step before returning the project to the caller is to transform the artifact coordinate expressions and write the result to a temporary file set to delete on exit. The project isntance's file variable is then pointed to the temp file, to ensure that any plugins referencing the POM from the filesystem will get the transformed version.

Added:
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/CoordinateInterpolator.java   (with props)
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java   (contents, props changed)
      - copied, changed from r776376, maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java   (contents, props changed)
      - copied, changed from r776376, maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolatorTest.java   (with props)
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/   (props changed)
      - copied from r776376, maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/version-expressions/
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/pom-with-build-dir-expression.xml   (with props)
Removed:
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/ArtifactWithProject.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/version-expressions/
Modified:
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactFactory.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/main/resources/META-INF/plexus/components.xml
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/MavenProjectDynamismTest.java
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
    maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml

Modified: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=776758&r1=776757&r2=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java Wed May 20 16:32:39 2009
@@ -82,6 +82,7 @@
 import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
 import org.apache.maven.project.injection.ModelDefaultsInjector;
 import org.apache.maven.project.injection.ProfileInjector;
+import org.apache.maven.project.interpolation.CoordinateInterpolator;
 import org.apache.maven.project.interpolation.ModelInterpolationException;
 import org.apache.maven.project.interpolation.ModelInterpolator;
 import org.apache.maven.project.path.PathTranslator;
@@ -171,6 +172,8 @@
     private ModelDefaultsInjector modelDefaultsInjector;
 
     private ModelInterpolator modelInterpolator;
+    
+    private CoordinateInterpolator coordinateInterpolator;
 
     private ArtifactRepositoryFactory artifactRepositoryFactory;
 
@@ -905,17 +908,21 @@
 
             // Only track the file of a POM in the source tree
             project.setFile( projectDescriptor );
-        }
-
-//        try
-//        {
-//            calculateConcreteState( project, config );
-//        }
-//        catch ( ModelInterpolationException e )
-//        {
-//            throw new InvalidProjectModelException( projectId, pomLocation, e.getMessage(), e );
-//        }
 
+            try
+            {
+                coordinateInterpolator.interpolateArtifactCoordinates( project );
+            }
+            catch ( IOException e )
+            {
+                throw new ProjectBuildingException( project.getId(), "Failed to write POM with interpolated coordinate expressions.", e );
+            }
+            catch ( ModelInterpolationException e )
+            {
+                throw new InvalidProjectModelException( projectId, pomLocation, e.getMessage(), e );
+            }
+        }
+        
         project.setManagedVersionMap( createManagedVersionMap( projectId,
                                                                project.getDependencyManagement(),
                                                                project.getParent() ) );

Modified: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactFactory.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactFactory.java?rev=776758&r1=776757&r2=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactFactory.java (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/ProjectArtifactFactory.java Wed May 20 16:32:39 2009
@@ -19,26 +19,33 @@
  * under the License.
  */
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.factory.DefaultArtifactFactory;
 import org.apache.maven.artifact.handler.ArtifactHandler;
+import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.project.MavenProject;
 
 public class ProjectArtifactFactory
     extends DefaultArtifactFactory
 {
     
-    public ArtifactWithProject create( MavenProject project )
+    public Artifact create( MavenProject project )
     {
         ArtifactHandler handler = getArtifactHandlerManager().getArtifactHandler( project.getPackaging() );
 
-        return new ArtifactWithProject( project, project.getPackaging(), null, handler, false );
+        return new DefaultArtifact( project.getGroupId(), project.getArtifactId(),
+                                    VersionRange.createFromVersion( project.getVersion() ), null,
+                                    project.getPackaging(), null, handler, false );
     }
 
-    public ArtifactWithProject create( MavenProject project, String type, String classifier, boolean optional )
+    public Artifact create( MavenProject project, String type, String classifier, boolean optional )
     {
         ArtifactHandler handler = getArtifactHandlerManager().getArtifactHandler( type );
 
-        return new ArtifactWithProject( project, type, classifier, handler, optional );
+        return new DefaultArtifact( project.getGroupId(), project.getArtifactId(),
+                                    VersionRange.createFromVersion( project.getVersion() ), null,
+                                    project.getPackaging(), null, handler, optional );
     }
 
 }

Added: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/CoordinateInterpolator.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/CoordinateInterpolator.java?rev=776758&view=auto
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/CoordinateInterpolator.java (added)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/CoordinateInterpolator.java Wed May 20 16:32:39 2009
@@ -0,0 +1,17 @@
+package org.apache.maven.project.interpolation;
+
+import org.apache.maven.project.MavenProject;
+
+import java.io.IOException;
+
+public interface CoordinateInterpolator
+{
+    
+    String ROLE = CoordinateInterpolator.class.getName();
+    
+    String COORDINATE_INTERPOLATED_POMFILE = ".pom-transformed.xml";
+
+    void interpolateArtifactCoordinates( MavenProject project )
+    throws IOException, ModelInterpolationException;
+
+}

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/CoordinateInterpolator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Copied: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java (from r776376, maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java)
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java?p2=maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java&p1=maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java&r1=776376&r2=776758&rev=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java Wed May 20 16:32:39 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.project.artifact;
+package org.apache.maven.project.interpolation;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,20 +19,9 @@
  * under the License.
  */
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
-import org.apache.maven.artifact.installer.ArtifactInstallationException;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-import org.apache.maven.project.DefaultProjectBuilderConfiguration;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.ProjectBuilderConfiguration;
-import org.apache.maven.project.interpolation.ModelInterpolationException;
-import org.apache.maven.project.interpolation.StringSearchModelInterpolator;
 import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
 import org.codehaus.plexus.interpolation.Interpolator;
@@ -40,13 +29,11 @@
 import org.codehaus.plexus.interpolation.SimpleRecursionInterceptor;
 import org.codehaus.plexus.interpolation.ValueSource;
 import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.ReaderFactory;
 import org.codehaus.plexus.util.WriterFactory;
 import org.codehaus.plexus.util.xml.XmlStreamReader;
 import org.codehaus.plexus.util.xml.XmlStreamWriter;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -56,7 +43,6 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
-import java.io.Reader;
 import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
@@ -82,9 +68,9 @@
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
 
-public class VersionExpressionTransformation
+public class DefaultCoordinateInterpolator
     extends StringSearchModelInterpolator
-    implements Initializable, ArtifactTransformation
+    implements CoordinateInterpolator
 {
 
     private static final List<String> VERSION_INTERPOLATION_TARGET_XPATHS;
@@ -121,201 +107,53 @@
         VERSION_INTERPOLATION_TARGET_XPATHS = targets;
     }
 
-    public void transformForDeployment( Artifact artifact, ArtifactRepository remoteRepository,
-                                        ArtifactRepository localRepository )
-        throws ArtifactDeploymentException
+    public synchronized void interpolateArtifactCoordinates( MavenProject project )
+        throws IOException, ModelInterpolationException
     {
-        ProjectArtifactMetadata metadata = ArtifactWithProject.getProjectArtifactMetadata( artifact );
-        File pomFile;
-        boolean pomArtifact = false;
-        if ( "pom".equals( artifact.getType() ) )
-        {
-            if ( getLogger().isDebugEnabled() )
-            {
-                getLogger().debug( "On Deploy: Using artifact file for POM: " + artifact );
-            }
-            pomFile = artifact.getFile();
-            pomArtifact = true;
-        }
-        // FIXME: We can't be this smart (yet) since the deployment step transforms from the
-        // original POM once again and re-installs over the top of the install step.
-        // else if ( metadata == null || metadata.isVersionExpressionsResolved() )
-        // {
-        // return;
-        // }
-        else if ( metadata != null )
-        {
-            pomFile = metadata.getFile();
-        }
-        else
-        {
-            return;
-        }
-
-        try
-        {
-            File outFile = transformVersions( pomFile, artifact, localRepository );
+        ProjectBuilderConfiguration config = project.getProjectBuilderConfiguration();
+        Model model = project.getOriginalModel();
+        File projectDir = project.getBasedir();
+        File pomFile = project.getFile();
+        
+        File outputFile = new File( projectDir, COORDINATE_INTERPOLATED_POMFILE );
+        outputFile.deleteOnExit();
+        
+        getLogger().debug( "POM artifact coordinates are being interpolated. New POM will be stored at: " + outputFile );
 
-            if ( pomArtifact )
-            {
-                // FIXME: We need a way to mark a POM artifact as resolved WRT version expressions, so we don't
-                // reprocess...
-                artifact.setFile( outFile );
-            }
-            else
-            {
-                metadata.setFile( outFile );
-                metadata.setVersionExpressionsResolved( true );
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new ArtifactDeploymentException( "Failed to read or write POM for version transformation.", e );
-        }
-        catch ( ModelInterpolationException e )
-        {
-            throw new ArtifactDeploymentException( "Failed to interpolate POM versions.", e );
-        }
-    }
+        List<ValueSource> valueSources = createValueSources( model, projectDir, config );
+        List<InterpolationPostProcessor> postProcessors = createPostProcessors( model, projectDir, config );
 
-    public void transformForInstall( Artifact artifact, ArtifactRepository localRepository )
-        throws ArtifactInstallationException
-    {
-        ProjectArtifactMetadata metadata =
-            (ProjectArtifactMetadata) artifact.getMetadata( ProjectArtifactMetadata.class );
-        File pomFile;
-        boolean pomArtifact = false;
-        if ( "pom".equals( artifact.getType() ) )
-        {
-            if ( getLogger().isDebugEnabled() )
-            {
-                getLogger().debug( "On Install: Using artifact file for POM: " + artifact );
-            }
-            pomFile = artifact.getFile();
-            pomArtifact = true;
-        }
-        // FIXME: We can't be this smart (yet) since the deployment step transforms from the
-        // original POM once again and re-installs over the top of the install step.
-        // else if ( metadata == null || metadata.isVersionExpressionsResolved() )
-        // {
-        // return;
-        // }
-        else if ( metadata != null )
-        {
-            pomFile = metadata.getFile();
-        }
-        else
-        {
-            return;
-        }
+        String pomContents = doInterpolation( pomFile, valueSources, postProcessors );
 
+        Writer writer = null;
         try
         {
-            File outFile = transformVersions( pomFile, artifact, localRepository );
-
-            if ( pomArtifact )
-            {
-                // FIXME: We need a way to mark a POM artifact as resolved WRT version expressions, so we don't
-                // reprocess...
-                artifact.setFile( outFile );
-            }
-            else
+            if ( outputFile.getParentFile() != null )
             {
-                metadata.setFile( outFile );
-                metadata.setVersionExpressionsResolved( true );
-            }
-        }
-        catch ( IOException e )
-        {
-            throw new ArtifactInstallationException( "Failed to read or write POM for version transformation.", e );
-        }
-        catch ( ModelInterpolationException e )
-        {
-            throw new ArtifactInstallationException( "Failed to interpolate POM versions.", e );
-        }
-    }
-
-    public void transformForResolve( Artifact artifact, List<ArtifactRepository> remoteRepositories,
-                                     ArtifactRepository localRepository )
-        throws ArtifactResolutionException, ArtifactNotFoundException
-    {
-        return;
-    }
-
-    protected File transformVersions( File pomFile, Artifact artifact, ArtifactRepository localRepository )
-        throws IOException, ModelInterpolationException
-    {
-        ProjectBuilderConfiguration pbConfig;
-        File projectDir;
-        File outputFile;
-        if ( artifact instanceof ArtifactWithProject )
-        {
-            MavenProject project = ( (ArtifactWithProject) artifact ).getProject();
-
-            projectDir = project.getBasedir();
-            pbConfig = project.getProjectBuilderConfiguration();
-            outputFile = new File( project.getBuild().getDirectory(), "pom-transformed.xml" );
-        }
-        else
-        {
-            if ( getLogger().isDebugEnabled() )
-            {
-                getLogger().debug(
-                                   "WARNING: Artifact: "
-                                       + artifact
-                                       + " does not have project-builder metadata (ProjectBuilderConfiguration) associated with it.\n"
-                                       + "Cannot access CLI properties for version transformation." );
+                outputFile.getParentFile().mkdirs();
             }
 
-            pbConfig = new DefaultProjectBuilderConfiguration().setLocalRepository( localRepository );
-            projectDir = pomFile.getAbsoluteFile().getParentFile();
-            outputFile = new File( projectDir, "target/pom-transformed.xml" );
-        }
-
-        Reader reader = null;
-        Model model;
-        try
-        {
-            reader = ReaderFactory.newXmlReader( pomFile );
-            model = new MavenXpp3Reader().read( reader );
+            writer = WriterFactory.newXmlWriter( outputFile );
 
-            interpolateVersions( pomFile, outputFile, model, projectDir, pbConfig );
+            IOUtil.copy( pomContents, writer );
         }
-        catch ( XmlPullParserException e )
+        catch ( IOException e )
         {
-            String message =
-                "Failed to parse POM for version transformation. Proceeding with original (non-interpolated) POM file.";
-
-            String detail =
-                "\n\nNOTE: Error was in file: " + pomFile + ", at line: " + e.getLineNumber() + ", column: "
-                    + e.getColumnNumber();
-
-            if ( getLogger().isDebugEnabled() )
-            {
-                getLogger().debug( message + detail, e );
-            }
-            else
-            {
-                getLogger().warn( message + " See debug output for details." );
-            }
-
-            outputFile = pomFile;
+            throw new ModelInterpolationException( "Failed to write transformed POM: "
+                + outputFile.getAbsolutePath(), e );
         }
         finally
         {
-            IOUtil.close( reader );
+            IOUtil.close( writer );
         }
-
-        return outputFile;
+        
+        project.setFile( outputFile );
     }
 
-    @SuppressWarnings("unchecked")
-    protected void interpolateVersions( File pomFile, File outputFile, Model model, File projectDir,
-                                        ProjectBuilderConfiguration config )
+    private String doInterpolation( File pomFile, List<ValueSource> valueSources,
+                                    List<InterpolationPostProcessor> postProcessors )
         throws ModelInterpolationException
     {
-        boolean debugEnabled = getLogger().isDebugEnabled();
-
         // NOTE: We want to interpolate version expressions ONLY, and want to do so without requiring the
         // use of the XPP3 Model reader/writers, which have a tendency to lose XML comments and such.
         // SOOO, we're using a two-stage string interpolation here. The first stage selects all XML 'version'
@@ -333,130 +171,110 @@
         // once we've isolated the version elements from the input XML.
         interpolator.addValueSource( new SecondaryInterpolationValueSource( secondaryInterpolator, recursionInterceptor ) );
 
-        List<ValueSource> valueSources = createValueSources( model, projectDir, config );
-        List<InterpolationPostProcessor> postProcessors = createPostProcessors( model, projectDir, config );
+        for ( ValueSource vs : valueSources )
+        {
+            secondaryInterpolator.addValueSource( vs );
+        }
 
-        synchronized ( this )
+        for ( InterpolationPostProcessor postProcessor : postProcessors )
         {
-            for ( ValueSource vs : valueSources )
+            secondaryInterpolator.addPostProcessor( postProcessor );
+        }
+        
+        String pomContents;
+        try
+        {
+            XmlStreamReader reader = null;
+            try
             {
-                secondaryInterpolator.addValueSource( vs );
+                reader = ReaderFactory.newXmlReader( pomFile );
+                pomContents = IOUtil.toString( reader );
+                interpolator.setEncoding( reader.getEncoding() );
             }
-
-            for ( InterpolationPostProcessor postProcessor : postProcessors )
+            catch ( IOException e )
+            {
+                throw new ModelInterpolationException( "Error reading POM for version-expression interpolation: "
+                    + e.getMessage(), e );
+            }
+            finally
             {
-                secondaryInterpolator.addPostProcessor( postProcessor );
+                IOUtil.close( reader );
             }
 
-            String pomContents;
             try
             {
-                XmlStreamReader reader = null;
-                try
-                {
-                    reader = ReaderFactory.newXmlReader( pomFile );
-                    pomContents = IOUtil.toString( reader );
-                    interpolator.setEncoding( reader.getEncoding() );
-                }
-                catch ( IOException e )
-                {
-                    throw new ModelInterpolationException( "Error reading POM for version-expression interpolation: "
-                        + e.getMessage(), e );
-                }
-                finally
-                {
-                    IOUtil.close( reader );
-                }
+                pomContents = interpolator.interpolate( pomContents );
+            }
+            catch ( InterpolationException e )
+            {
+                throw new ModelInterpolationException( e.getMessage(), e );
+            }
 
-                try
-                {
-                    pomContents = interpolator.interpolate( pomContents );
-                }
-                catch ( InterpolationException e )
-                {
-                    throw new ModelInterpolationException( e.getMessage(), e );
-                }
+            giveFeedback( interpolator );
 
-                if ( debugEnabled )
-                {
-                    List<Object> feedback = (List<Object>) interpolator.getFeedback();
-                    if ( feedback != null && !feedback.isEmpty() )
-                    {
-                        getLogger().debug( "Maven encountered the following problems while transforming POM versions:" );
+            interpolator.clearFeedback();
+        }
+        finally
+        {
+            for ( ValueSource vs : valueSources )
+            {
+                secondaryInterpolator.removeValuesSource( vs );
+            }
 
-                        Object last = null;
-                        for ( Object next : feedback )
-                        {
-                            if ( next instanceof Throwable )
-                            {
-                                if ( last == null )
-                                {
-                                    getLogger().debug( "", ( (Throwable) next ) );
-                                }
-                                else
-                                {
-                                    getLogger().debug( String.valueOf( last ), ( (Throwable) next ) );
-                                }
-                            }
-                            else
-                            {
-                                if ( last != null )
-                                {
-                                    getLogger().debug( String.valueOf( last ) );
-                                }
+            for ( InterpolationPostProcessor postProcessor : postProcessors )
+            {
+                secondaryInterpolator.removePostProcessor( postProcessor );
+            }
 
-                                last = next;
-                            }
-                        }
+            getInterpolator().clearAnswers();
+        }
+        
+        return pomContents;
+    }
 
-                        if ( last != null )
-                        {
-                            getLogger().debug( String.valueOf( last ) );
-                        }
-                    }
-                }
+    @SuppressWarnings("unchecked")
+    private void giveFeedback( Interpolator interpolator )
+    {
+        if ( getLogger() == null || !getLogger().isDebugEnabled() )
+        {
+            return;
+        }
+        
+        List<Object> feedback = interpolator.getFeedback();
+        if ( feedback != null && !feedback.isEmpty() )
+        {
+            getLogger().debug( "Maven encountered the following problems while transforming POM versions:" );
 
-                interpolator.clearFeedback();
-            }
-            finally
+            Object last = null;
+            for ( Object next : feedback )
             {
-                for ( ValueSource vs : valueSources )
+                if ( next instanceof Throwable )
                 {
-                    secondaryInterpolator.removeValuesSource( vs );
+                    if ( last == null )
+                    {
+                        getLogger().debug( "", ( (Throwable) next ) );
+                    }
+                    else
+                    {
+                        getLogger().debug( String.valueOf( last ), ( (Throwable) next ) );
+                    }
                 }
-
-                for ( InterpolationPostProcessor postProcessor : postProcessors )
+                else
                 {
-                    secondaryInterpolator.removePostProcessor( postProcessor );
-                }
+                    if ( last != null )
+                    {
+                        getLogger().debug( String.valueOf( last ) );
+                    }
 
-                getInterpolator().clearAnswers();
+                    last = next;
+                }
             }
 
-            Writer writer = null;
-            try
-            {
-                outputFile.getParentFile().mkdirs();
-
-                writer = WriterFactory.newXmlWriter( outputFile );
-
-                IOUtil.copy( pomContents, writer );
-            }
-            catch ( IOException e )
+            if ( last != null )
             {
-                throw new ModelInterpolationException( "Failed to write transformed POM: "
-                    + outputFile.getAbsolutePath(), e );
-            }
-            finally
-            {
-                IOUtil.close( writer );
+                getLogger().debug( String.valueOf( last ) );
             }
         }
-
-        // if ( error != null )
-        // {
-        // throw error;
-        // }
     }
 
     private static final class SecondaryInterpolationValueSource
@@ -595,12 +413,12 @@
             {
                 if ( encoding != null )
                 {
-                    logger.info( "Writing transformed POM using encoding: " + encoding );
+                    logger.debug( "Writing transformed POM using encoding: " + encoding );
                     transformer.setOutputProperty( OutputKeys.ENCODING, encoding );
                 }
                 else
                 {
-                    logger.info( "Writing transformed POM using default encoding" );
+                    logger.debug( "Writing transformed POM using default encoding" );
                 }
                 
                 transformer.transform( s, r );

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolator.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed May 20 16:32:39 2009
@@ -0,0 +1,7 @@
+/maven/components/branches/maven-2.0.10-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:679193-679867,680477-688882,708790-728809,728834
+/maven/components/branches/maven-2.0.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:679552-679867,693956-728820,728836,728940,729060,729738,729785,730461,730631,734502,734803,736543,746381
+/maven/components/branches/maven-2.1.0-M1-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:690315,691793-694304
+/maven/components/branches/maven-2.1.0-RC/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:688883,689695,689976,689990,752168,752428,752622,752653,753089-753090,753320,755086,755199,755215
+/maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:751686,767628,767631,768817,768995,769010-769011
+/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:572229,720001,721902,726845,729292
+/maven/sandbox/branches/maven/MNG-3379/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java:678167

Modified: maven/components/branches/maven-2.2.0-RC/maven-project/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/main/resources/META-INF/plexus/components.xml?rev=776758&r1=776757&r2=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/main/resources/META-INF/plexus/components.xml Wed May 20 16:32:39 2009
@@ -49,9 +49,9 @@
      |
      -->
     <component>
-      <role>org.apache.maven.artifact.transform.ArtifactTransformation</role>
-      <role-hint>version-expression</role-hint>
-      <implementation>org.apache.maven.project.artifact.VersionExpressionTransformation</implementation>
+      <role>org.apache.maven.project.interpolation.CoordinateInterpolator</role>
+      <role-hint>default</role-hint>
+      <implementation>org.apache.maven.project.interpolation.DefaultCoordinateInterpolator</implementation>
       <requirements>
         <requirement>
           <role>org.apache.maven.project.path.PathTranslator</role>
@@ -112,6 +112,9 @@
           <role>org.apache.maven.project.interpolation.ModelInterpolator</role>
         </requirement>
         <requirement>
+          <role>org.apache.maven.project.interpolation.CoordinateInterpolator</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.project.inheritance.ModelInheritanceAssembler</role>
         </requirement>
         <requirement>

Modified: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/MavenProjectDynamismTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/MavenProjectDynamismTest.java?rev=776758&r1=776757&r2=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/MavenProjectDynamismTest.java (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/MavenProjectDynamismTest.java Wed May 20 16:32:39 2009
@@ -32,6 +32,7 @@
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.Resource;
+import org.apache.maven.project.interpolation.CoordinateInterpolator;
 import org.apache.maven.project.interpolation.ModelInterpolationException;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.StringUtils;
@@ -684,8 +685,6 @@
 
         MavenProject project = projectBuilder.build( pomFile, new DefaultProjectBuilderConfiguration() );
 
-        assertEquals( pomFile, project.getFile() );
-
         return project;
     }
 

Copied: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java (from r776376, maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java)
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java?p2=maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java&p1=maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java&r1=776376&r2=776758&rev=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java Wed May 20 16:32:39 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.project.artifact;
+package org.apache.maven.project.interpolation;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,18 +19,9 @@
  * under the License.
  */
 
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.DefaultArtifact;
-import org.apache.maven.artifact.deployer.ArtifactDeploymentException;
-import org.apache.maven.artifact.handler.DefaultArtifactHandler;
-import org.apache.maven.artifact.installer.ArtifactInstallationException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
 import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
-import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
-import org.apache.maven.artifact.resolver.ArtifactResolutionException;
-import org.apache.maven.artifact.transform.ArtifactTransformation;
-import org.apache.maven.artifact.versioning.VersionRange;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
@@ -45,8 +36,9 @@
 import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
 import org.apache.maven.project.DefaultProjectBuilderConfiguration;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectBuilder;
 import org.apache.maven.project.ProjectBuilderConfiguration;
-import org.apache.maven.project.interpolation.ModelInterpolationException;
+import org.apache.maven.project.ProjectBuildingException;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
@@ -62,21 +54,24 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Properties;
 import java.util.Set;
 
-public class VersionExpressionTransformationTest
+public abstract class AbstractCoordinateInterpolationTest
     extends PlexusTestCase
 {
 
     private static final String VERSION = "blah";
 
-    private VersionExpressionTransformation transformation;
+    private CoordinateInterpolator interpolator;
+    
+    private MavenProjectBuilder projectBuilder;
 
     private Set<File> toDelete = new HashSet<File>();
 
+    protected abstract String getRoleHint();
+
     public void setUp()
         throws Exception
     {
@@ -84,8 +79,8 @@
 
         // getContainer().getLoggerManager().setThreshold( Logger.LEVEL_DEBUG );
 
-        transformation =
-            (VersionExpressionTransformation) lookup( ArtifactTransformation.class.getName(), "version-expression" );
+        interpolator = (DefaultCoordinateInterpolator) lookup( CoordinateInterpolator.class.getName(), getRoleHint() );
+        projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.class.getName() );
     }
 
     public void tearDown()
@@ -110,56 +105,25 @@
         }
     }
 
-    public void testTransformForInstall_AbortOnInvalidPOM()
-        throws URISyntaxException, IOException, XmlPullParserException, ModelInterpolationException
+    private Model readModel( File pomFile )
+        throws IOException, XmlPullParserException
     {
-        String pomResource = "version-expressions/invalid-pom.xml";
-        File pomFile = getPom( pomResource );
-
-        File projectDir;
-        if ( pomFile != null )
+        FileReader reader = null;
+        try
         {
-            projectDir = pomFile.getParentFile();
+            reader = new FileReader( pomFile );
+            return new MavenXpp3Reader().read( reader );
         }
-        else
+        finally
         {
-            projectDir = File.createTempFile( "VersionExpressionTransformationTest.project.", ".tmp.dir" );
-            projectDir.delete();
-            projectDir.mkdirs();
-
-            toDelete.add( projectDir );
-
-            File newPomFile = new File( projectDir, "pom.xml" );
-            FileUtils.copyFile( pomFile, newPomFile );
-
-            pomFile = newPomFile;
+            IOUtil.close( reader );
         }
-
-        File repoDir = File.createTempFile( "VersionExpressionTransformationTest.repo.", ".tmp.dir" );
-        repoDir.delete();
-        repoDir.mkdirs();
-
-        toDelete.add( repoDir );
-
-        Artifact a =
-            new DefaultArtifact( "groupId", "artifactId", VersionRange.createFromVersion( "1" ), null, "jar", null,
-                                 new DefaultArtifactHandler( "jar" ) );
-
-        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
-        a.addMetadata( pam );
-
-        ArtifactRepository localRepository =
-            new DefaultArtifactRepository( "local", repoDir.getAbsolutePath(), new DefaultRepositoryLayout() );
-
-        transformation.transformVersions( pomFile, a, localRepository );
-
-        assertEquals( pomFile, pam.getFile() );
     }
 
     public void testTransform_MaintainEncoding()
         throws URISyntaxException, IOException, XmlPullParserException, ModelInterpolationException
     {
-        String pomResource = "version-expressions/alternative-encoding-pom.xml";
+        String pomResource = "coord-expressions/alternative-encoding-pom.xml";
         File pomFile = getPom( pomResource );
 
         File projectDir;
@@ -169,7 +133,7 @@
         }
         else
         {
-            projectDir = File.createTempFile( "VersionExpressionTransformationTest.project.", ".tmp.dir" );
+            projectDir = File.createTempFile( "CoordinateInterpolationTest.project.", ".tmp.dir" );
             projectDir.delete();
             projectDir.mkdirs();
 
@@ -181,35 +145,36 @@
             pomFile = newPomFile;
         }
 
-        File repoDir = File.createTempFile( "VersionExpressionTransformationTest.repo.", ".tmp.dir" );
+        File repoDir = File.createTempFile( "CoordinateInterpolationTest.repo.", ".tmp.dir" );
         repoDir.delete();
         repoDir.mkdirs();
 
         toDelete.add( repoDir );
 
-        Artifact a =
-            new DefaultArtifact( "groupId", "artifactId", VersionRange.createFromVersion( "1" ), null, "jar", null,
-                                 new DefaultArtifactHandler( "jar" ) );
-
-        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
-        a.addMetadata( pam );
-
         ArtifactRepository localRepository =
             new DefaultArtifactRepository( "local", repoDir.getAbsolutePath(), new DefaultRepositoryLayout() );
 
-        File result = transformation.transformVersions( pomFile, a, localRepository );
-        
-        String xml = FileUtils.fileRead( result );
-        
-        System.out.println( xml );
-        
+        MavenProject project = new MavenProject( readModel( pomFile ) );
+        project.setOriginalModel( project.getModel() );
+        project.setFile( pomFile );
+
+        ProjectBuilderConfiguration pbc = new DefaultProjectBuilderConfiguration();
+        pbc.setLocalRepository( localRepository );
+
+        project.setProjectBuilderConfiguration( pbc );
+
+        interpolator.interpolateArtifactCoordinates( project );
+
+        assertNotSame( pomFile, project.getFile() );
+        String xml = FileUtils.fileRead( project.getFile() );
+
         assertTrue( xml.indexOf( "encoding=\"ISO-8859-1\"" ) > -1 );
     }
 
     public void testTransformForInstall_PreserveComments()
         throws URISyntaxException, IOException, XmlPullParserException, ModelInterpolationException
     {
-        String pomResource = "version-expressions/pom-with-comments.xml";
+        String pomResource = "coord-expressions/pom-with-comments.xml";
         File pomFile = getPom( pomResource );
 
         Model model;
@@ -278,7 +243,7 @@
             fail( "POM classpath resource not found: '" + pom + "'." );
         }
 
-        File tempDir = File.createTempFile( "VersionExpressionTransformationTest.", ".dir.tmp" );
+        File tempDir = File.createTempFile( "CoordinateInterpolationTest.", ".dir.tmp" );
         tempDir.delete();
         tempDir.mkdirs();
 
@@ -290,69 +255,17 @@
         return pomFile;
     }
 
-    public void testTransformForResolve_DoNothing()
-        throws IOException, XmlPullParserException, ArtifactResolutionException, ArtifactNotFoundException
-    {
-        Model model = buildTestModel();
-
-        File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
-        pomDir.delete();
-        pomDir.mkdirs();
-
-        toDelete.add( pomDir );
-
-        File pomFile = new File( pomDir, "pom.xml" );
-
-        FileWriter writer = null;
-        try
-        {
-            writer = new FileWriter( pomFile );
-            new MavenXpp3Writer().write( writer, model );
-        }
-        finally
-        {
-            IOUtil.close( writer );
-        }
-
-        Artifact a =
-            new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar", null,
-                                 new DefaultArtifactHandler( "jar" ), false );
-        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
-
-        a.addMetadata( pam );
-
-        transformation.transformForResolve( a, Collections.EMPTY_LIST, null );
-
-        assertFalse( pam.isVersionExpressionsResolved() );
-        assertEquals( pomFile, pam.getFile() );
-
-        assertFalse( new File( pomDir, "target/pom-transformed.xml" ).exists() );
-
-        FileReader reader = null;
-        try
-        {
-            reader = new FileReader( pomFile );
-            model = new MavenXpp3Reader().read( reader );
-        }
-        finally
-        {
-            IOUtil.close( reader );
-        }
-
-        assertEquals( "${testVersion}", model.getVersion() );
-    }
-
     public void testTransformForInstall_TransformBasedOnModelProperties()
-        throws IOException, ArtifactInstallationException, XmlPullParserException
+        throws IOException, ModelInterpolationException, XmlPullParserException
     {
-        Model model = buildTestModel();
-
-        File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
         pomDir.delete();
         pomDir.mkdirs();
 
         toDelete.add( pomDir );
 
+        Model model = buildTestModel( pomDir );
+
         File pomFile = new File( pomDir, "pom.xml" );
 
         FileWriter writer = null;
@@ -366,25 +279,27 @@
             IOUtil.close( writer );
         }
 
-        Artifact a =
-            new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar", null,
-                                 new DefaultArtifactHandler( "jar" ), false );
+        MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
+        project.setFile( pomFile );
+
+        ProjectBuilderConfiguration pbc = new DefaultProjectBuilderConfiguration();
 
-        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
+        project.setProjectBuilderConfiguration( pbc );
 
-        a.addMetadata( pam );
+        interpolator.interpolateArtifactCoordinates( project );
 
-        transformation.transformForInstall( a, null );
+        assertNotSame( pomFile, project.getFile() );
 
-        File transformedFile = new File( pomDir, "target/pom-transformed.xml" );
+        File transformedFile = new File( pomDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
 
         assertTrue( transformedFile.exists() );
-        assertEquals( transformedFile, pam.getFile() );
+        assertEquals( transformedFile, project.getFile() );
 
         FileReader reader = null;
         try
         {
-            reader = new FileReader( pam.getFile() );
+            reader = new FileReader( project.getFile() );
             StringWriter swriter = new StringWriter();
             IOUtil.copy( reader, swriter );
 
@@ -402,16 +317,16 @@
     }
 
     public void testTransformForDeploy_TransformBasedOnModelProperties()
-        throws IOException, XmlPullParserException, ArtifactDeploymentException
+        throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        Model model = buildTestModel();
-
-        File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
         pomDir.delete();
         pomDir.mkdirs();
 
         toDelete.add( pomDir );
 
+        Model model = buildTestModel( pomDir );
+
         File pomFile = new File( pomDir, "pom.xml" );
 
         FileWriter writer = null;
@@ -425,25 +340,27 @@
             IOUtil.close( writer );
         }
 
-        Artifact a =
-            new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar", null,
-                                 new DefaultArtifactHandler( "jar" ), false );
+        MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
+        project.setFile( pomFile );
+
+        ProjectBuilderConfiguration pbc = new DefaultProjectBuilderConfiguration();
 
-        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
+        project.setProjectBuilderConfiguration( pbc );
 
-        a.addMetadata( pam );
+        interpolator.interpolateArtifactCoordinates( project );
 
-        transformation.transformForDeployment( a, null, null );
+        assertNotSame( pomFile, project.getFile() );
 
-        File transformedFile = new File( pomDir, "target/pom-transformed.xml" );
+        File transformedFile = new File( pomDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
 
         assertTrue( transformedFile.exists() );
-        assertEquals( transformedFile, pam.getFile() );
+        assertEquals( transformedFile, project.getFile() );
 
         FileReader reader = null;
         try
         {
-            reader = new FileReader( pam.getFile() );
+            reader = new FileReader( project.getFile() );
             model = new MavenXpp3Reader().read( reader );
         }
         finally
@@ -454,130 +371,18 @@
         assertTransformedVersions( model );
     }
 
-    // FIXME: We can't be this smart (yet) since the deployment step transforms from the
-    // original POM once again and re-installs over the top of the install step.
-    // public void testTransformForInstall_SkipIfProjectArtifactMetadataResolvedFlagIsSet()
-    // throws IOException, ArtifactInstallationException, XmlPullParserException
-    // {
-    // Model model = buildTestModel();
-    //
-    // File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
-    // pomDir.delete();
-    // pomDir.mkdirs();
-    // try
-    // {
-    // File pomFile = new File( pomDir, "pom.xml" );
-    // pomFile.deleteOnExit();
-    //
-    // FileWriter writer = null;
-    // try
-    // {
-    // writer = new FileWriter( pomFile );
-    // new MavenXpp3Writer().write( writer, model );
-    // }
-    // finally
-    // {
-    // IOUtil.close( writer );
-    // }
-    //
-    // Artifact a =
-    // new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar", null,
-    // new DefaultArtifactHandler( "jar" ), false );
-    // ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
-    // pam.setVersionExpressionsResolved( true );
-    //
-    // a.addMetadata( pam );
-    //
-    // transformation.transformForInstall( a, null );
-    //
-    // assertEquals( pomFile, pam.getFile() );
-    //
-    // assertFalse( new File( pomDir, "target/pom-transformed.xml" ).exists() );
-    //
-    // FileReader reader = null;
-    // try
-    // {
-    // reader = new FileReader( pomFile );
-    // model = new MavenXpp3Reader().read( reader );
-    // }
-    // finally
-    // {
-    // IOUtil.close( reader );
-    // }
-    //
-    // assertEquals( "${testVersion}", model.getVersion() );
-    // }
-    // finally
-    // {
-    // FileUtils.forceDelete( pomDir );
-    // }
-    // }
-
-    // FIXME: We can't be this smart (yet) since the deployment step transforms from the
-    // original POM once again and re-installs over the top of the install step.
-    // public void testTransformForDeploy_SkipIfProjectArtifactMetadataResolvedFlagIsSet()
-    // throws IOException, XmlPullParserException, ArtifactDeploymentException
-    // {
-    // Model model = buildTestModel();
-    //
-    // File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
-    // pomDir.delete();
-    // pomDir.mkdirs();
-    // try
-    // {
-    // File pomFile = new File( pomDir, "pom.xml" );
-    // pomFile.deleteOnExit();
-    //
-    // FileWriter writer = null;
-    // try
-    // {
-    // writer = new FileWriter( pomFile );
-    // new MavenXpp3Writer().write( writer, model );
-    // }
-    // finally
-    // {
-    // IOUtil.close( writer );
-    // }
-    //
-    // Artifact a =
-    // new DefaultArtifact( "group", "artifact", VersionRange.createFromVersion( "1" ), null, "jar", null,
-    // new DefaultArtifactHandler( "jar" ), false );
-    // ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile );
-    // pam.setVersionExpressionsResolved( true );
-    //
-    // a.addMetadata( pam );
-    //
-    // transformation.transformForDeployment( a, null, null );
-    //
-    // assertEquals( pomFile, pam.getFile() );
-    //
-    // assertFalse( new File( pomDir, "target/pom-transformed.xml" ).exists() );
-    //
-    // FileReader reader = null;
-    // try
-    // {
-    // reader = new FileReader( pomFile );
-    // model = new MavenXpp3Reader().read( reader );
-    // }
-    // finally
-    // {
-    // IOUtil.close( reader );
-    // }
-    //
-    // assertEquals( "${testVersion}", model.getVersion() );
-    // }
-    // finally
-    // {
-    // FileUtils.forceDelete( pomDir );
-    // }
-    // }
-
     public void testTransformVersion_ShouldInterpolate_VanillaArtifact_ModelProperties()
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        Model model = buildTestModel();
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
+        pomDir.delete();
+        pomDir.mkdirs();
+
+        toDelete.add( pomDir );
+
+        Model model = buildTestModel( pomDir );
 
-        File newPom = runTransformVersion_VanillaArtifact( model, null );
+        File newPom = runTransformVersion_VanillaArtifact( model, new File( pomDir, "pom.xml" ) );
 
         FileReader reader = null;
         try
@@ -597,9 +402,17 @@
     public void testTransformVersion_ShouldInterpolate_ArtifactWithProject_ModelProperties()
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        Model model = buildTestModel();
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
+        pomDir.delete();
+        pomDir.mkdirs();
+
+        toDelete.add( pomDir );
+
+        Model model = buildTestModel( pomDir );
 
-        File newPom = runTransformVersion_ArtifactWithProject( model, new DefaultProjectBuilderConfiguration(), null );
+        File newPom =
+            runTransformVersion_ArtifactWithProject( model, new DefaultProjectBuilderConfiguration(),
+                                                     new File( pomDir, "pom.xml" ) );
 
         FileReader reader = null;
         try
@@ -619,7 +432,13 @@
     public void testTransformVersion_ShouldInterpolate_ArtifactWithProject_CLIProperties()
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        Model model = buildTestModel();
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
+        pomDir.delete();
+        pomDir.mkdirs();
+
+        toDelete.add( pomDir );
+
+        Model model = buildTestModel( pomDir );
 
         Properties props = model.getProperties();
         model.setProperties( new Properties() );
@@ -628,7 +447,7 @@
             runTransformVersion_ArtifactWithProject(
                                                      model,
                                                      new DefaultProjectBuilderConfiguration().setExecutionProperties( props ),
-                                                     null );
+                                                     new File( pomDir, "pom.xml" ) );
 
         FileReader reader = null;
         try
@@ -648,21 +467,11 @@
     private File runTransformVersion_VanillaArtifact( Model model, File pomFile )
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        File projectDir;
-        if ( pomFile != null )
-        {
-            projectDir = pomFile.getParentFile();
-        }
-        else
+        File projectDir = pomFile.getParentFile();
+
+        if ( !pomFile.exists() )
         {
-            projectDir = File.createTempFile( "VersionExpressionTransformationTest.project.", ".tmp.dir" );
-            projectDir.delete();
             projectDir.mkdirs();
-
-            toDelete.add( projectDir );
-
-            pomFile = new File( projectDir, "pom.xml" );
-
             FileWriter writer = null;
             try
             {
@@ -675,7 +484,7 @@
             }
         }
 
-        File repoDir = File.createTempFile( "VersionExpressionTransformationTest.repo.", ".tmp.dir" );
+        File repoDir = File.createTempFile( "CoordinateInterpolationTest.repo.", ".tmp.dir" );
         repoDir.delete();
         repoDir.mkdirs();
 
@@ -691,39 +500,34 @@
 
         model.getBuild().setDirectory( dir.getAbsolutePath() );
 
-        Artifact a =
-            new DefaultArtifact( model.getGroupId(), model.getArtifactId(), VersionRange.createFromVersion( "1" ),
-                                 null, "jar", null, new DefaultArtifactHandler( "jar" ) );
-
-        a.addMetadata( new ProjectArtifactMetadata( a, pomFile ) );
-
         ArtifactRepository localRepository =
             new DefaultArtifactRepository( "local", repoDir.getAbsolutePath(), new DefaultRepositoryLayout() );
 
-        transformation.transformVersions( pomFile, a, localRepository );
+        MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
+        project.setFile( pomFile );
+
+        ProjectBuilderConfiguration pbc = new DefaultProjectBuilderConfiguration();
+        pbc.setLocalRepository( localRepository );
 
-        return new File( projectDir, "target/pom-transformed.xml" );
+        project.setProjectBuilderConfiguration( pbc );
+
+        interpolator.interpolateArtifactCoordinates( project );
+
+        assertNotSame( pomFile, project.getFile() );
+
+        return new File( projectDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
     }
 
     private File runTransformVersion_ArtifactWithProject( Model model, ProjectBuilderConfiguration pbConfig,
                                                           File pomFile )
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        File projectDir;
-        if ( pomFile != null )
-        {
-            projectDir = pomFile.getParentFile();
-        }
-        else
+        File projectDir = pomFile.getParentFile();
+
+        if ( !pomFile.exists() )
         {
-            projectDir = File.createTempFile( "VersionExpressionTransformationTest.project.", ".tmp.dir" );
-            projectDir.delete();
             projectDir.mkdirs();
-
-            toDelete.add( projectDir );
-
-            pomFile = new File( projectDir, "pom.xml" );
-
             FileWriter writer = null;
             try
             {
@@ -736,7 +540,7 @@
             }
         }
 
-        File repoDir = File.createTempFile( "VersionExpressionTransformationTest.repo.", ".tmp.dir" );
+        File repoDir = File.createTempFile( "CoordinateInterpolationTest.repo.", ".tmp.dir" );
         repoDir.delete();
         repoDir.mkdirs();
 
@@ -753,38 +557,39 @@
         model.getBuild().setDirectory( dir.getAbsolutePath() );
 
         MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
         project.setFile( pomFile );
         project.setBasedir( projectDir );
         project.setProjectBuilderConfiguration( pbConfig );
 
-        ArtifactWithProject a =
-            new ArtifactWithProject( project, "jar", null, new DefaultArtifactHandler( "jar" ), false );
-
-        a.addMetadata( new ProjectArtifactMetadata( a, pomFile ) );
-
         ArtifactRepository localRepository =
             new DefaultArtifactRepository( "local", repoDir.getAbsolutePath(), new DefaultRepositoryLayout() );
 
-        transformation.transformVersions( pomFile, a, localRepository );
+        pbConfig.setLocalRepository( localRepository );
 
-        return new File( project.getBuild().getDirectory(), "pom-transformed.xml" );
+        interpolator.interpolateArtifactCoordinates( project );
+
+        assertNotSame( pomFile, project.getFile() );
+
+        return new File( projectDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
     }
 
     public void testInterpolate_ShouldNotInterpolateNonVersionFields()
         throws ModelInterpolationException, IOException, XmlPullParserException
     {
-        Model model = buildTestModel();
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
+        pomDir.delete();
+        pomDir.mkdirs();
+
+        toDelete.add( pomDir );
+
+        Model model = buildTestModel( pomDir );
 
         Scm scm = new Scm();
         scm.setUrl( "http://${testVersion}" );
 
         model.setScm( scm );
 
-        File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
-        pomDir.delete();
-        pomDir.mkdirs();
-
-        toDelete.add( pomDir );
         File pomFile = new File( pomDir, "pom.xml" );
 
         FileWriter writer = null;
@@ -798,20 +603,18 @@
             IOUtil.close( writer );
         }
 
-        File output = new File( pomDir, "output.xml" );
+        File output = new File( pomDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
 
-        transformation.interpolateVersions( pomFile, output, model, pomDir, new DefaultProjectBuilderConfiguration() );
+        MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
+        project.setFile( pomFile );
+        project.setProjectBuilderConfiguration( new DefaultProjectBuilderConfiguration() );
 
-        FileReader reader = null;
-        try
-        {
-            reader = new FileReader( output );
-            model = new MavenXpp3Reader().read( reader );
-        }
-        finally
-        {
-            IOUtil.close( reader );
-        }
+        interpolator.interpolateArtifactCoordinates( project );
+
+        assertTrue( output.exists() );
+
+        model = readModel( output );
 
         // /project/scm/url
         assertFalse( model.getScm().getUrl().indexOf( VERSION ) > -1 );
@@ -820,12 +623,14 @@
     public void testInterpolate_ShouldInterpolateAllVersionsUsingPOMProperties()
         throws ModelInterpolationException, IOException, XmlPullParserException
     {
-        Model model = buildTestModel();
-        File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
         pomDir.delete();
         pomDir.mkdirs();
 
         toDelete.add( pomDir );
+
+        Model model = buildTestModel( pomDir );
+
         File pomFile = new File( pomDir, "pom.xml" );
 
         FileWriter writer = null;
@@ -839,9 +644,16 @@
             IOUtil.close( writer );
         }
 
-        File output = new File( pomDir, "output.xml" );
+        File output = new File( pomDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
+
+        MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
+        project.setFile( pomFile );
+        project.setProjectBuilderConfiguration( new DefaultProjectBuilderConfiguration() );
+
+        interpolator.interpolateArtifactCoordinates( project );
 
-        transformation.interpolateVersions( pomFile, output, model, pomDir, new DefaultProjectBuilderConfiguration() );
+        assertTrue( output.exists() );
 
         FileReader reader = null;
         try
@@ -926,13 +738,14 @@
     public void testInterpolate_ShouldInterpolateAllVersionsUsingCLIProperties()
         throws ModelInterpolationException, IOException, XmlPullParserException
     {
-        Model model = buildTestModel();
-        File pomDir = File.createTempFile( "VersionExpressionTransformationTest.", ".tmp.dir" );
+        File pomDir = File.createTempFile( "CoordinateInterpolationTest.", ".tmp.dir" );
         pomDir.delete();
         pomDir.mkdirs();
 
         toDelete.add( pomDir );
 
+        Model model = buildTestModel( pomDir );
+
         File pomFile = new File( pomDir, "pom.xml" );
 
         FileWriter writer = null;
@@ -949,10 +762,16 @@
         Properties props = model.getProperties();
         model.setProperties( new Properties() );
 
-        File output = new File( pomDir, "output.xml" );
+        File output = new File( pomDir, CoordinateInterpolator.COORDINATE_INTERPOLATED_POMFILE );
 
-        transformation.interpolateVersions( pomFile, output, model, pomDir,
-                                            new DefaultProjectBuilderConfiguration().setExecutionProperties( props ) );
+        MavenProject project = new MavenProject( model );
+        project.setOriginalModel( model );
+        project.setFile( pomFile );
+        project.setProjectBuilderConfiguration( new DefaultProjectBuilderConfiguration().setExecutionProperties( props ) );
+
+        interpolator.interpolateArtifactCoordinates( project );
+
+        assertTrue( output.exists() );
 
         FileReader reader = null;
         try
@@ -968,7 +787,7 @@
         assertTransformedVersions( model );
     }
 
-    public Model buildTestModel()
+    public Model buildTestModel( File pomDir )
     {
         Model model = new Model();
 
@@ -1005,6 +824,11 @@
         Build build = new Build();
         model.setBuild( build );
 
+        File dir = new File( pomDir, "target" );
+        dir.mkdirs();
+
+        build.setDirectory( dir.getAbsolutePath() );
+
         Plugin plugin = new Plugin();
         plugin.setGroupId( "plugin.group" );
         plugin.setArtifactId( "plugin-artifact" );

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/AbstractCoordinateInterpolationTest.java
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed May 20 16:32:39 2009
@@ -0,0 +1,7 @@
+/maven/components/branches/maven-2.0.10-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:679193-679867,680477-688882,708790-728809,728834
+/maven/components/branches/maven-2.0.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:679552-679867,693956-728820,728836,728940,729060,729738,729785,730461,730631,734502,734803,736543,746381
+/maven/components/branches/maven-2.1.0-M1-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:690315,691793-694304
+/maven/components/branches/maven-2.1.0-RC/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:688883,689695,689976,689990,752168,752428,752622,752653,753089-753090,753320,755086,755199,755215
+/maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:751686,767628,767631,768817,768995,769010-769011
+/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:572229,720001,721902,726845,729292
+/maven/sandbox/branches/maven/MNG-3379/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java:678167

Added: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolatorTest.java
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolatorTest.java?rev=776758&view=auto
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolatorTest.java (added)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolatorTest.java Wed May 20 16:32:39 2009
@@ -0,0 +1,13 @@
+package org.apache.maven.project.interpolation;
+
+public class DefaultCoordinateInterpolatorTest
+    extends AbstractCoordinateInterpolationTest
+{
+
+    @Override
+    protected String getRoleHint()
+    {
+        return "default";
+    }
+
+}

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/java/org/apache/maven/project/interpolation/DefaultCoordinateInterpolatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Wed May 20 16:32:39 2009
@@ -0,0 +1,7 @@
+/maven/components/branches/maven-2.0.10-RC/maven-project/src/test/resources/version-expressions:679193-679867,680477-688882,708790-728809,728834
+/maven/components/branches/maven-2.0.x/maven-project/src/test/resources/version-expressions:679552-679867,693956-728820,728836,728940,729060,729738,729785,730461,730631,734502,734803,736543,746381
+/maven/components/branches/maven-2.1.0-M1-RC/maven-project/src/test/resources/version-expressions:690315,691793-694304
+/maven/components/branches/maven-2.1.0-RC/maven-project/src/test/resources/version-expressions:688883,689695,689976,689990,752168,752428,752622,752653,753089-753090,753320,755086,755199,755215
+/maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions:751686,767628,767631,768817,768995,769010-769011
+/maven/components/trunk/maven-project/src/test/resources/version-expressions:572229,720001,721902,726845,729292
+/maven/sandbox/branches/maven/MNG-3379/maven-project/src/test/resources/version-expressions:678167

Added: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/pom-with-build-dir-expression.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/pom-with-build-dir-expression.xml?rev=776758&view=auto
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/pom-with-build-dir-expression.xml (added)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/pom-with-build-dir-expression.xml Wed May 20 16:32:39 2009
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.test</groupId>
+  <artifactId>pom-with-comments</artifactId>
+  <version>${testVersion}</version>
+  <packaging>pom</packaging>
+  
+  <scm>
+    <connection>${testVersion}</connection>
+    <url>${testVersion}</url>
+  </scm>
+  
+  <properties>
+    <testVersion>1.0</testVersion>
+    <other.version>${testVersion}</other.version>
+  </properties>
+
+  <build>
+    <directory>${project.basedir}/target</directory>
+  </build>
+</project>

Propchange: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/coord-expressions/pom-with-build-dir-expression.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml?rev=776758&r1=776757&r2=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/ProjectClasspathTest.xml Wed May 20 16:32:39 2009
@@ -72,6 +72,9 @@
           <role-hint>test</role-hint>
         </requirement>
         <requirement>
+          <role>org.apache.maven.project.interpolation.CoordinateInterpolator</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.project.interpolation.ModelInterpolator</role>
         </requirement>
         <requirement>

Modified: maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml
URL: http://svn.apache.org/viewvc/maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml?rev=776758&r1=776757&r2=776758&view=diff
==============================================================================
--- maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml (original)
+++ maven/components/branches/maven-2.2.0-RC/maven-project/src/test/resources/org/apache/maven/project/canonical/CanonicalProjectBuilderTest.xml Wed May 20 16:32:39 2009
@@ -72,6 +72,9 @@
           <role-hint>test</role-hint>
         </requirement>
         <requirement>
+          <role>org.apache.maven.project.interpolation.CoordinateInterpolator</role>
+        </requirement>
+        <requirement>
           <role>org.apache.maven.project.interpolation.ModelInterpolator</role>
         </requirement>
         <requirement>