Author: jdcasey
Date: Tue Feb 24 17:06:19 2009
New Revision: 747440

URL: http://svn.apache.org/viewvc?rev=747440&view=rev
Log:
[MNG-3057] Switch from model-object interpolation to String-based selective 
interpolation of the POM XML contents, to avoid problems reading/writing XML 
that contains comments (due to XPP3 model reader/writer). New approach uses 
two-stage interpolation, where first isolates XML version elements and hands 
off to second stage, which interpolates the value. Finally, bumping wagon 
version to 1.0-beta-5 to reflect this release.

Added:
    
maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/
    
maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/pom-with-comments.xml
   (with props)
Modified:
    
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
    
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
    
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java
    
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java
    maven/components/branches/maven-2.1.x/pom.xml

Modified: 
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java?rev=747440&r1=747439&r2=747440&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
 (original)
+++ 
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/deployer/DefaultArtifactDeployer.java
 Tue Feb 24 17:06:19 2009
@@ -74,13 +74,10 @@
         // Here, we also set a flag indicating that the POM has been shunted 
through the Artifact,
         // and to expect the transformed version to be available in the 
Artifact afterwards...
         boolean useArtifactFile = false;
+        File oldArtifactFile = artifact.getFile();
         if ( "pom".equals( artifact.getType() ) )
         {
-            if ( artifact.getFile() == null )
-            {
-                artifact.setFile( source );
-            }
-            
+            artifact.setFile( source );
             useArtifactFile = true;
         }
         
@@ -94,6 +91,7 @@
             if ( useArtifactFile )
             {
                 source = artifact.getFile();
+                artifact.setFile( oldArtifactFile );
             }
 
             // FIXME: Why oh why are we re-installing the artifact in the 
local repository? Isn't this

Modified: 
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java?rev=747440&r1=747439&r2=747440&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
 (original)
+++ 
maven/components/branches/maven-2.1.x/maven-artifact-manager/src/main/java/org/apache/maven/artifact/installer/DefaultArtifactInstaller.java
 Tue Feb 24 17:06:19 2009
@@ -64,13 +64,10 @@
         // Here, we also set a flag indicating that the POM has been shunted 
through the Artifact,
         // and to expect the transformed version to be available in the 
Artifact afterwards...
         boolean useArtifactFile = false;
+        File oldArtifactFile = artifact.getFile();
         if ( "pom".equals( artifact.getType() ) )
         {
-            if ( artifact.getFile() == null )
-            {
-                artifact.setFile( source );
-            }
-            
+            artifact.setFile( source );
             useArtifactFile = true;
         }
         
@@ -84,6 +81,7 @@
             if ( useArtifactFile )
             {
                 source = artifact.getFile();
+                artifact.setFile( oldArtifactFile );
             }
 
             String localPath = localRepository.pathOf( artifact );

Modified: 
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java?rev=747440&r1=747439&r2=747440&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java
 (original)
+++ 
maven/components/branches/maven-2.1.x/maven-project/src/main/java/org/apache/maven/project/artifact/VersionExpressionTransformation.java
 Tue Feb 24 17:06:19 2009
@@ -26,12 +26,8 @@
 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.Dependency;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
-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.ProjectBuilderConfiguration;
@@ -40,10 +36,10 @@
 import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
 import org.codehaus.plexus.interpolation.Interpolator;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.StringSearchInterpolator;
 import org.codehaus.plexus.interpolation.ValueSource;
-import org.codehaus.plexus.interpolation.object.FieldBasedObjectInterpolator;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import 
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
 import org.codehaus.plexus.util.IOUtil;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
@@ -52,37 +48,18 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
 import java.io.Writer;
-import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Set;
 
 public class VersionExpressionTransformation
     extends StringSearchModelInterpolator
     implements Initializable, ArtifactTransformation
 {
 
-    private static Set BLACKLISTED_FIELD_NAMES;
-    
-    private static final Set WHITELISTED_FIELD_NAMES;
-    
-    static
-    {
-        Set whitelist = new HashSet();
-        
-        whitelist.add( "version" );
-        whitelist.add( "dependencies" );
-        whitelist.add( "build" );
-        whitelist.add( "plugins" );
-        whitelist.add( "reporting" );
-        whitelist.add( "parent" );
-        
-        WHITELISTED_FIELD_NAMES = whitelist;
-    }
-
     public void transformForDeployment( Artifact artifact, ArtifactRepository 
remoteRepository,
                                         ArtifactRepository localRepository )
         throws ArtifactDeploymentException
@@ -246,31 +223,37 @@
             IOUtil.close( reader );
         }
         
-        interpolateVersions( model, projectDir, pbConfig );
-        
-        Writer writer = null;
-        try
-        {
-            outputFile.getParentFile().mkdirs();
-            
-            writer = new FileWriter( outputFile );
-            
-            new MavenXpp3Writer().write( writer, model );
-        }
-        finally
-        {
-            IOUtil.close( writer );
-        }
+        interpolateVersions( pomFile, outputFile, model, projectDir, pbConfig 
);
         
         return outputFile;
     }
 
-    protected void interpolateVersions( Model model, File projectDir, 
ProjectBuilderConfiguration config )
+    protected void interpolateVersions( File pomFile, File outputFile, Model 
model, File projectDir, ProjectBuilderConfiguration config )
         throws ModelInterpolationException
     {
         boolean debugEnabled = getLogger().isDebugEnabled();
 
-        Interpolator interpolator = getInterpolator();
+        // 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'
+        // elements, and subjects their values to interpolation in the second 
stage.
+        Interpolator interpolator = new StringSearchInterpolator( "<version>", 
"</version>" );
+        
+        // The second-stage interpolator is the 'normal' one used in all Model 
interpolation throughout
+        // maven-project.
+        Interpolator secondaryInterpolator = getInterpolator();
+        
+        // We'll just reuse the recursion interceptor...not sure it makes any 
difference.
+        RecursionInterceptor recursionInterceptor = getRecursionInterceptor();
+        
+        // This is a ValueSource implementation that simply delegates to the 
second-stage "real" interpolator
+        // once we've isolated the version elements from the input XML.
+        interpolator.addValueSource( new SecondaryInterpolationValueSource( 
secondaryInterpolator, recursionInterceptor ) );
+        
+        // The primary interpolator is searching for version XML elements, and 
interpolating their values. Since
+        // '<version>' and '</version>' are the delimiters for this, the 
interpolator will remove these tokens
+        // from the result. So, we need to put them back before including the 
interpolated result.
+        interpolator.addPostProcessor( new VersionRestoringPostProcessor() );
 
         List valueSources = createValueSources( model, projectDir, config );
         List postProcessors = createPostProcessors( model, projectDir, config 
);
@@ -280,25 +263,40 @@
             for ( Iterator it = valueSources.iterator(); it.hasNext(); )
             {
                 ValueSource vs = (ValueSource) it.next();
-                interpolator.addValueSource( vs );
+                secondaryInterpolator.addValueSource( vs );
             }
 
             for ( Iterator it = postProcessors.iterator(); it.hasNext(); )
             {
                 InterpolationPostProcessor postProcessor = 
(InterpolationPostProcessor) it.next();
 
-                interpolator.addPostProcessor( postProcessor );
+                secondaryInterpolator.addPostProcessor( postProcessor );
             }
 
+            String pomContents;
             try
             {
-                FieldBasedObjectInterpolator objInterpolator =
-                    new FieldBasedObjectInterpolator( BLACKLISTED_FIELD_NAMES,
-                                                      
FieldBasedObjectInterpolator.DEFAULT_BLACKLISTED_PACKAGE_PREFIXES );
-
+                FileReader reader = null;
+                try
+                {
+                    reader = new FileReader( pomFile );
+                    StringWriter writer = new StringWriter();
+                    IOUtil.copy( reader, writer );
+                    
+                    pomContents = writer.toString();
+                }
+                catch ( IOException e )
+                {
+                    throw new ModelInterpolationException( "Error reading POM 
for version-expression interpolation: " + e.getMessage(), e );
+                }
+                finally
+                {
+                    IOUtil.close( reader );
+                }
+                
                 try
                 {
-                    objInterpolator.interpolate( model, getInterpolator(), 
getRecursionInterceptor() );
+                    pomContents = interpolator.interpolate( pomContents );
                 }
                 catch ( InterpolationException e )
                 {
@@ -307,18 +305,7 @@
 
                 if ( debugEnabled )
                 {
-                    List feedback = new ArrayList();
-                    if ( objInterpolator.hasWarnings() )
-                    {
-                        feedback.addAll( objInterpolator.getWarnings() );
-                    }
-
-                    List internalFeedback = interpolator.getFeedback();
-                    if ( internalFeedback != null && 
!internalFeedback.isEmpty() )
-                    {
-                        feedback.addAll( internalFeedback );
-                    }
-
+                    List feedback = interpolator.getFeedback();
                     if ( feedback != null && !feedback.isEmpty() )
                     {
                         getLogger().debug( "Maven encountered the following 
problems while transforming POM versions:" );
@@ -364,52 +351,100 @@
                 for ( Iterator iterator = valueSources.iterator(); 
iterator.hasNext(); )
                 {
                     ValueSource vs = (ValueSource) iterator.next();
-                    interpolator.removeValuesSource( vs );
+                    secondaryInterpolator.removeValuesSource( vs );
                 }
 
                 for ( Iterator iterator = postProcessors.iterator(); 
iterator.hasNext(); )
                 {
                     InterpolationPostProcessor postProcessor = 
(InterpolationPostProcessor) iterator.next();
-                    interpolator.removePostProcessor( postProcessor );
+                    secondaryInterpolator.removePostProcessor( postProcessor );
                 }
 
                 getInterpolator().clearAnswers();
             }
+            
+            Writer writer = null;
+            try
+            {
+                outputFile.getParentFile().mkdirs();
+                
+                writer = new FileWriter( outputFile );
+                
+                IOUtil.copy( new StringReader( pomContents ), writer );
+            }
+            catch ( IOException e )
+            {
+                throw new ModelInterpolationException( "Failed to write 
transformed POM: " + outputFile.getAbsolutePath(), e );
+            }
+            finally
+            {
+                IOUtil.close( writer );
+            }
         }
-
+        
         // if ( error != null )
         // {
         // throw error;
         // }
     }
 
-    public void initialize()
-        throws InitializationException
+    private static final class SecondaryInterpolationValueSource
+        implements ValueSource
     {
-        super.initialize();
         
-        synchronized ( VersionExpressionTransformation.class )
+        private Interpolator secondary;
+        private final RecursionInterceptor recursionInterceptor;
+        private List localFeedback = new ArrayList();
+        
+        public SecondaryInterpolationValueSource( Interpolator secondary, 
RecursionInterceptor recursionInterceptor )
         {
-            if ( BLACKLISTED_FIELD_NAMES == null )
-            {
-                Set fieldNames = new HashSet();
+            this.secondary = secondary;
+            this.recursionInterceptor = recursionInterceptor;
+        }
 
-                Class[] classes = { Model.class, Dependency.class, 
Plugin.class, ReportPlugin.class };
-                for ( int i = 0; i < classes.length; i++ )
-                {
-                    Field[] fields = classes[i].getDeclaredFields();
-                    for ( int j = 0; j < fields.length; j++ )
-                    {
-                        if ( !WHITELISTED_FIELD_NAMES.contains( 
fields[j].getName() ) )
-                        {
-                            fieldNames.add( fields[j].getName() );
-                        }
-                    }
-                }
+        public void clearFeedback()
+        {
+            secondary.clearFeedback();
+        }
+
+        public List getFeedback()
+        {
+            List result = secondary.getFeedback();
+            if ( result != null )
+            {
+                result = new ArrayList( result );
+            }
+            
+            result.addAll( localFeedback );
+            
+            return result;
+        }
 
-                BLACKLISTED_FIELD_NAMES = fieldNames;
+        public Object getValue( String expression )
+        {
+            try
+            {
+                return secondary.interpolate( expression, recursionInterceptor 
);
             }
+            catch ( InterpolationException e )
+            {
+                localFeedback.add( "Error during version expression 
interpolation." );
+                localFeedback.add( e );
+            }
+            
+            return null;
         }
     }
+    
+    private static final class VersionRestoringPostProcessor
+        implements InterpolationPostProcessor
+    {
+
+        public Object execute( String expression, Object value )
+        {
+            return "<version>" + value + "</version>";
+        }
+        
+    }
 
 }

Modified: 
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java?rev=747440&r1=747439&r2=747440&view=diff
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java
 (original)
+++ 
maven/components/branches/maven-2.1.x/maven-project/src/test/java/org/apache/maven/project/artifact/VersionExpressionTransformationTest.java
 Tue Feb 24 17:06:19 2009
@@ -55,8 +55,17 @@
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Properties;
+import java.util.Set;
 
 public class VersionExpressionTransformationTest
     extends PlexusTestCase
@@ -65,6 +74,8 @@
     private static final String VERSION = "blah";
 
     private VersionExpressionTransformation transformation;
+    
+    private Set toDelete = new HashSet();
 
     public void setUp()
         throws Exception
@@ -74,6 +85,114 @@
         transformation =
             (VersionExpressionTransformation) lookup( 
ArtifactTransformation.class.getName(), "version-expression" );
     }
+    
+    public void tearDown()
+        throws Exception
+        {
+        super.tearDown();
+        
+        if ( toDelete != null && !toDelete.isEmpty() )
+        {
+            for ( Iterator it = toDelete.iterator(); it.hasNext(); )
+            {
+                File f = (File) it.next();
+                
+                try
+                {
+                    FileUtils.forceDelete( f );
+                }
+                catch ( IOException e )
+                {
+                    System.out.println( "Failed to delete temp file: '" + 
f.getAbsolutePath() + "'." );
+                    e.printStackTrace();
+                }
+            }
+        }
+        }
+    
+    public void testTransformForInstall_PreserveComments()
+        throws URISyntaxException, IOException, XmlPullParserException, 
ModelInterpolationException
+    {
+        String pomResource = "version-expressions/pom-with-comments.xml";
+        File pomFile = getPom( pomResource );
+        
+        Model model;
+        Reader reader = null;
+        try
+        {
+            reader = new FileReader( pomFile );
+
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+        
+        File newPom = runTransformVersion_VanillaArtifact( model, pomFile );
+        
+        StringWriter writer = new StringWriter();
+        reader = null;
+        try
+        {
+            reader = new FileReader( newPom );
+            IOUtil.copy( reader, writer );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+        
+        assertTrue( "XML comment not found.", writer.toString().indexOf( "This 
is a comment." ) > -1 );
+        
+        reader = new StringReader( writer.toString() );
+        try
+        {
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
+
+        assertEquals( "1.0", model.getVersion() );
+        
+        assertNotNull( model.getProperties() );
+        
+        assertNotNull( model.getProperties().getProperty( "other.version" ) );
+        assertEquals( "${testVersion}", model.getProperties().getProperty( 
"other.version" ) );
+        
+        assertNotNull( model.getScm() );
+        
+        assertNotNull( model.getScm().getConnection() );
+        assertEquals( "${testVersion}", model.getScm().getConnection() );
+        
+        assertNotNull( model.getScm().getUrl() );
+        assertEquals( "${testVersion}", model.getScm().getUrl() );
+    }
+
+    private File getPom( String pom )
+        throws URISyntaxException, IOException
+    {
+        ClassLoader cloader = Thread.currentThread().getContextClassLoader();
+        URL resource = cloader.getResource( pom );
+        
+        if ( resource == null )
+        {
+            fail( "POM classpath resource not found: '" + pom + "'." );
+        }
+        
+        File tempDir = File.createTempFile( 
"VersionExpressionTransformationTest.", ".dir.tmp" );
+        tempDir.delete();
+        tempDir.mkdirs();
+        
+        toDelete.add( tempDir );
+        
+        File pomFile = new File( tempDir, "pom.xml" );
+        FileUtils.copyFile( new File( new URI( resource.toExternalForm() 
).normalize() ), pomFile );
+        
+        return pomFile;
+    }
 
     public void testTransformForResolve_DoNothing()
         throws IOException, XmlPullParserException, 
ArtifactResolutionException, ArtifactNotFoundException
@@ -83,53 +202,48 @@
         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
         {
-            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 );
+            writer = new FileWriter( pomFile );
+            new MavenXpp3Writer().write( writer, model );
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
 
-            a.addMetadata( pam );
+        Artifact a =
+            new DefaultArtifact( "group", "artifact", 
VersionRange.createFromVersion( "1" ), null, "jar", null,
+                                 new DefaultArtifactHandler( "jar" ), false );
+        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile 
);
 
-            transformation.transformForResolve( a, Collections.EMPTY_LIST, 
null );
+        a.addMetadata( pam );
 
-            assertFalse( pam.isVersionExpressionsResolved() );
-            assertEquals( pomFile, pam.getFile() );
+        transformation.transformForResolve( a, Collections.EMPTY_LIST, null );
 
-            assertFalse( new File( pomDir, "target/pom-transformed.xml" 
).exists() );
+        assertFalse( pam.isVersionExpressionsResolved() );
+        assertEquals( pomFile, pam.getFile() );
 
-            FileReader reader = null;
-            try
-            {
-                reader = new FileReader( pomFile );
-                model = new MavenXpp3Reader().read( reader );
-            }
-            finally
-            {
-                IOUtil.close( reader );
-            }
+        assertFalse( new File( pomDir, "target/pom-transformed.xml" ).exists() 
);
 
-            assertEquals( "${testVersion}", model.getVersion() );
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( pomFile );
+            model = new MavenXpp3Reader().read( reader );
         }
         finally
         {
-            FileUtils.forceDelete( pomDir );
+            IOUtil.close( reader );
         }
+
+        assertEquals( "${testVersion}", model.getVersion() );
     }
 
     public void testTransformForInstall_TransformBasedOnModelProperties()
@@ -140,54 +254,55 @@
         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
         {
-            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 );
+            writer = new FileWriter( pomFile );
+            new MavenXpp3Writer().write( writer, model );
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
 
-            ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, 
pomFile );
+        Artifact a =
+            new DefaultArtifact( "group", "artifact", 
VersionRange.createFromVersion( "1" ), null, "jar", null,
+                                 new DefaultArtifactHandler( "jar" ), false );
 
-            a.addMetadata( pam );
+        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile 
);
 
-            transformation.transformForInstall( a, null );
+        a.addMetadata( pam );
 
-            File transformedFile = new File( pomDir, 
"target/pom-transformed.xml" );
+        transformation.transformForInstall( a, null );
 
-            assertTrue( transformedFile.exists() );
-            assertEquals( transformedFile, pam.getFile() );
+        File transformedFile = new File( pomDir, "target/pom-transformed.xml" 
);
 
-            FileReader reader = null;
-            try
-            {
-                reader = new FileReader( pam.getFile() );
-                model = new MavenXpp3Reader().read( reader );
-            }
-            finally
-            {
-                IOUtil.close( reader );
-            }
+        assertTrue( transformedFile.exists() );
+        assertEquals( transformedFile, pam.getFile() );
 
-            assertTransformedVersions( model );
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( pam.getFile() );
+            StringWriter swriter = new StringWriter();
+            IOUtil.copy( reader, swriter );
+            
+            System.out.println( "Transformed POM:\n\n\n" + swriter.toString() 
);
+            System.out.flush();
+            
+            model = new MavenXpp3Reader().read( new StringReader( 
swriter.toString() ) );
         }
         finally
         {
-            FileUtils.forceDelete( pomDir );
+            IOUtil.close( reader );
         }
+
+        assertTransformedVersions( model );
     }
 
     public void testTransformForDeploy_TransformBasedOnModelProperties()
@@ -198,54 +313,49 @@
         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
         {
-            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 );
+            writer = new FileWriter( pomFile );
+            new MavenXpp3Writer().write( writer, model );
+        }
+        finally
+        {
+            IOUtil.close( writer );
+        }
 
-            ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, 
pomFile );
+        Artifact a =
+            new DefaultArtifact( "group", "artifact", 
VersionRange.createFromVersion( "1" ), null, "jar", null,
+                                 new DefaultArtifactHandler( "jar" ), false );
 
-            a.addMetadata( pam );
+        ProjectArtifactMetadata pam = new ProjectArtifactMetadata( a, pomFile 
);
 
-            transformation.transformForDeployment( a, null, null );
+        a.addMetadata( pam );
 
-            File transformedFile = new File( pomDir, 
"target/pom-transformed.xml" );
+        transformation.transformForDeployment( a, null, null );
 
-            assertTrue( transformedFile.exists() );
-            assertEquals( transformedFile, pam.getFile() );
+        File transformedFile = new File( pomDir, "target/pom-transformed.xml" 
);
 
-            FileReader reader = null;
-            try
-            {
-                reader = new FileReader( pam.getFile() );
-                model = new MavenXpp3Reader().read( reader );
-            }
-            finally
-            {
-                IOUtil.close( reader );
-            }
+        assertTrue( transformedFile.exists() );
+        assertEquals( transformedFile, pam.getFile() );
 
-            assertTransformedVersions( model );
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( pam.getFile() );
+            model = new MavenXpp3Reader().read( reader );
         }
         finally
         {
-            FileUtils.forceDelete( pomDir );
+            IOUtil.close( reader );
         }
+
+        assertTransformedVersions( model );
     }
 
     // FIXME: We can't be this smart (yet) since the deployment step 
transforms from the 
@@ -371,7 +481,19 @@
     {
         Model model = buildTestModel();
 
-        model = runTransformVersion_VanillaArtifact( model );
+        File newPom = runTransformVersion_VanillaArtifact( model, null );
+        
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( newPom );
+
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
 
         assertTransformedVersions( model );
     }
@@ -381,7 +503,19 @@
     {
         Model model = buildTestModel();
 
-        model = runTransformVersion_ArtifactWithProject( model, new 
DefaultProjectBuilderConfiguration() );
+        File newPom = runTransformVersion_ArtifactWithProject( model, new 
DefaultProjectBuilderConfiguration(), null );
+        
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( newPom );
+
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
 
         assertTransformedVersions( model );
     }
@@ -394,28 +528,43 @@
         Properties props = model.getProperties();
         model.setProperties( new Properties() );
 
-        model =
-            runTransformVersion_ArtifactWithProject(
+        File newPom = runTransformVersion_ArtifactWithProject(
                                                      model,
-                                                     new 
DefaultProjectBuilderConfiguration().setExecutionProperties( props ) );
+                                                     new 
DefaultProjectBuilderConfiguration().setExecutionProperties( props ), null );
+        
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( newPom );
+
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
 
         assertTransformedVersions( model );
     }
 
-    private Model runTransformVersion_VanillaArtifact( Model model )
+    private File runTransformVersion_VanillaArtifact( Model model, File 
pomFile )
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        File projectDir = File.createTempFile( 
"VersionExpressionTransformationTest.project.", ".tmp.dir" );
-        projectDir.delete();
-        projectDir.mkdirs();
-
-        File repoDir = File.createTempFile( 
"VersionExpressionTransformationTest.repo.", ".tmp.dir" );
-        repoDir.delete();
-        repoDir.mkdirs();
-
-        try
+        File projectDir;
+        if ( pomFile != null )
+        {
+            projectDir = pomFile.getParentFile();
+        }
+        else
         {
-            File pomFile = new File( projectDir, "pom.xml" );
+            projectDir = File.createTempFile( 
"VersionExpressionTransformationTest.project.", ".tmp.dir" );
+            projectDir.delete();
+            projectDir.mkdirs();
+            
+            toDelete.add( projectDir );
+            
+            pomFile = new File( projectDir, "pom.xml" );
+            
             FileWriter writer = null;
             try
             {
@@ -426,53 +575,56 @@
             {
                 IOUtil.close( writer );
             }
+        }
 
-            model.getBuild().setOutputDirectory( new File( projectDir, 
"target" ).getAbsolutePath() );
-
-            Artifact a =
-                new DefaultArtifact( model.getGroupId(), 
model.getArtifactId(), VersionRange.createFromVersion( "1" ),
-                                     null, "jar", null, new 
DefaultArtifactHandler( "jar" ) );
+        File repoDir = File.createTempFile( 
"VersionExpressionTransformationTest.repo.", ".tmp.dir" );
+        repoDir.delete();
+        repoDir.mkdirs();
+        
+        toDelete.add( repoDir );
 
-            ArtifactRepository localRepository =
-                new DefaultArtifactRepository( "local", 
repoDir.getAbsolutePath(), new DefaultRepositoryLayout() );
+        File dir = new File( projectDir, "target" );
+        dir.mkdirs();
+        
+        if ( model.getBuild() == null )
+        {
+            model.setBuild( new Build() );
+        }
+        
+        model.getBuild().setDirectory( dir.getAbsolutePath() );
 
-            transformation.transformVersions( pomFile, a, localRepository );
+        Artifact a =
+            new DefaultArtifact( model.getGroupId(), model.getArtifactId(), 
VersionRange.createFromVersion( "1" ),
+                                 null, "jar", null, new 
DefaultArtifactHandler( "jar" ) );
+        
+        a.addMetadata( new ProjectArtifactMetadata( a, pomFile ) );
 
-            FileReader reader = null;
-            try
-            {
-                reader = new FileReader( new File( projectDir, 
"target/pom-transformed.xml" ) );
+        ArtifactRepository localRepository =
+            new DefaultArtifactRepository( "local", repoDir.getAbsolutePath(), 
new DefaultRepositoryLayout() );
 
-                model = new MavenXpp3Reader().read( reader );
-            }
-            finally
-            {
-                IOUtil.close( reader );
-            }
-        }
-        finally
-        {
-            FileUtils.forceDelete( projectDir );
-            FileUtils.forceDelete( repoDir );
-        }
+        transformation.transformVersions( pomFile, a, localRepository );
 
-        return model;
+        return new File( projectDir, "target/pom-transformed.xml" );
     }
 
-    private Model runTransformVersion_ArtifactWithProject( Model model, 
ProjectBuilderConfiguration pbConfig )
+    private File runTransformVersion_ArtifactWithProject( Model model, 
ProjectBuilderConfiguration pbConfig, File pomFile )
         throws IOException, XmlPullParserException, ModelInterpolationException
     {
-        File projectDir = File.createTempFile( 
"VersionExpressionTransformationTest.project.", ".tmp.dir" );
-        projectDir.delete();
-        projectDir.mkdirs();
-
-        File repoDir = File.createTempFile( 
"VersionExpressionTransformationTest.repo.", ".tmp.dir" );
-        repoDir.delete();
-        repoDir.mkdirs();
-
-        try
+        File projectDir;
+        if ( pomFile != null )
+        {
+            projectDir = pomFile.getParentFile();
+        }
+        else
         {
-            File pomFile = new File( projectDir, "pom.xml" );
+            projectDir = File.createTempFile( 
"VersionExpressionTransformationTest.project.", ".tmp.dir" );
+            projectDir.delete();
+            projectDir.mkdirs();
+            
+            toDelete.add( projectDir );
+            
+            pomFile = new File( projectDir, "pom.xml" );
+            
             FileWriter writer = null;
             try
             {
@@ -483,45 +635,44 @@
             {
                 IOUtil.close( writer );
             }
+        }
 
-            model.getBuild().setDirectory( new File( projectDir, "target" 
).getAbsolutePath() );
-
-            MavenProject project = new MavenProject( model );
-            project.setFile( pomFile );
-            project.setBasedir( projectDir );
-            project.setProjectBuilderConfiguration( pbConfig );
+        File repoDir = File.createTempFile( 
"VersionExpressionTransformationTest.repo.", ".tmp.dir" );
+        repoDir.delete();
+        repoDir.mkdirs();
+        
+        toDelete.add( repoDir );
 
-            ArtifactWithProject a =
-                new ArtifactWithProject( project, "jar", null, new 
DefaultArtifactHandler( "jar" ), false );
+        File dir = new File( projectDir, "target" );
+        dir.mkdirs();
+        
+        if ( model.getBuild() == null )
+        {
+            model.setBuild( new Build() );
+        }
+        
+        model.getBuild().setDirectory( dir.getAbsolutePath() );
 
-            ArtifactRepository localRepository =
-                new DefaultArtifactRepository( "local", 
repoDir.getAbsolutePath(), new DefaultRepositoryLayout() );
+        MavenProject project = new MavenProject( model );
+        project.setFile( pomFile );
+        project.setBasedir( projectDir );
+        project.setProjectBuilderConfiguration( pbConfig );
 
-            transformation.transformVersions( pomFile, a, localRepository );
+        ArtifactWithProject a =
+            new ArtifactWithProject( project, "jar", null, new 
DefaultArtifactHandler( "jar" ), false );
 
-            FileReader reader = null;
-            try
-            {
-                reader = new FileReader( new File( 
project.getBuild().getDirectory(), "pom-transformed.xml" ) );
+        a.addMetadata( new ProjectArtifactMetadata( a, pomFile ) );
+        
+        ArtifactRepository localRepository =
+            new DefaultArtifactRepository( "local", repoDir.getAbsolutePath(), 
new DefaultRepositoryLayout() );
 
-                model = new MavenXpp3Reader().read( reader );
-            }
-            finally
-            {
-                IOUtil.close( reader );
-            }
-        }
-        finally
-        {
-            FileUtils.forceDelete( projectDir );
-            FileUtils.forceDelete( repoDir );
-        }
+        transformation.transformVersions( pomFile, a, localRepository );
 
-        return model;
+        return new File( project.getBuild().getDirectory(), 
"pom-transformed.xml" );
     }
 
     public void testInterpolate_ShouldNotInterpolateNonVersionFields()
-        throws ModelInterpolationException
+        throws ModelInterpolationException, IOException, XmlPullParserException
     {
         Model model = buildTestModel();
 
@@ -530,21 +681,79 @@
 
         model.setScm( scm );
 
-        File projectDir = new File( "." ).getAbsoluteFile();
+        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 );
+        }
 
-        transformation.interpolateVersions( model, projectDir, new 
DefaultProjectBuilderConfiguration() );
+        File output = new File( pomDir, "output.xml" );
+        
+        transformation.interpolateVersions( pomFile, output, model, pomDir, 
new DefaultProjectBuilderConfiguration() );
+        
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( output );
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
 
         // /project/scm/url
         assertFalse( model.getScm().getUrl().indexOf( VERSION ) > -1 );
     }
 
     public void 
testInterpolate_ShouldInterpolateAllVersionsUsingPOMProperties()
-        throws ModelInterpolationException
+        throws ModelInterpolationException, IOException, XmlPullParserException
     {
         Model model = buildTestModel();
-        File projectDir = new File( "." ).getAbsoluteFile();
+        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 );
+        }
 
-        transformation.interpolateVersions( model, projectDir, new 
DefaultProjectBuilderConfiguration() );
+        File output = new File( pomDir, "output.xml" );
+        
+        transformation.interpolateVersions( pomFile, output, model, pomDir, 
new DefaultProjectBuilderConfiguration() );
+        
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( output );
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
 
         assertTransformedVersions( model );
     }
@@ -584,16 +793,46 @@
     }
 
     public void 
testInterpolate_ShouldInterpolateAllVersionsUsingCLIProperties()
-        throws ModelInterpolationException
+        throws ModelInterpolationException, IOException, XmlPullParserException
     {
         Model model = buildTestModel();
-        File projectDir = new File( "." ).getAbsoluteFile();
+        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 );
+        }
 
         Properties props = model.getProperties();
         model.setProperties( new Properties() );
 
-        transformation.interpolateVersions( model, projectDir,
+        File output = new File( pomDir, "output.xml" );
+        
+        transformation.interpolateVersions( pomFile, output, model, pomDir,
                                             new 
DefaultProjectBuilderConfiguration().setExecutionProperties( props ) );
+        
+        FileReader reader = null;
+        try
+        {
+            reader = new FileReader( output );
+            model = new MavenXpp3Reader().read( reader );
+        }
+        finally
+        {
+            IOUtil.close( reader );
+        }
 
         assertTransformedVersions( model );
     }

Added: 
maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/pom-with-comments.xml
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/pom-with-comments.xml?rev=747440&view=auto
==============================================================================
--- 
maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/pom-with-comments.xml
 (added)
+++ 
maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/pom-with-comments.xml
 Tue Feb 24 17:06:19 2009
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This is a comment. -->
+<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>
+
+</project>

Propchange: 
maven/components/branches/maven-2.1.x/maven-project/src/test/resources/version-expressions/pom-with-comments.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: maven/components/branches/maven-2.1.x/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/components/branches/maven-2.1.x/pom.xml?rev=747440&r1=747439&r2=747440&view=diff
==============================================================================
--- maven/components/branches/maven-2.1.x/pom.xml (original)
+++ maven/components/branches/maven-2.1.x/pom.xml Tue Feb 24 17:06:19 2009
@@ -261,7 +261,7 @@
 
   <properties>
     <mavenVersion>2.1.0-SNAPSHOT</mavenVersion>
-    <wagonVersion>1.0-beta-5-SNAPSHOT</wagonVersion>
+    <wagonVersion>1.0-beta-5</wagonVersion>
   </properties>
 
   <!--start-->
@@ -384,7 +384,7 @@
       <dependency>
         <groupId>org.codehaus.plexus</groupId>
         <artifactId>plexus-interpolation</artifactId>
-        <version>1.7</version>
+        <version>1.8.1</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus</groupId>


Reply via email to