Author: jdcasey
Date: Fri Aug 21 17:08:45 2009
New Revision: 806646

URL: http://svn.apache.org/viewvc?rev=806646&view=rev
Log:
Fixing interpolation for escaping, and simplifying escaping of windows paths. 
Also, moving to some standard ValueSource implementations and normal 
ValueSource stacking within the interpolator, rather than using more complex 
delegation of ValueSource instances. Finally, correcting windows-path escaping 
to account for pre-escaped paths.

Removed:
    
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenProjectValueSource.java
    
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/PropertiesEscapingBackSlashValueSource.java
Modified:
    
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
    
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
    
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
    
maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java

Modified: 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java?rev=806646&r1=806645&r2=806646&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
 (original)
+++ 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenFileFilter.java
 Fri Aug 21 17:08:45 2009
@@ -33,8 +33,11 @@
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.project.MavenProject;
 import org.sonatype.plexus.build.incremental.BuildContext;
+import org.codehaus.plexus.interpolation.InterpolationPostProcessor;
 import org.codehaus.plexus.interpolation.InterpolatorFilterReader;
 import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
+import org.codehaus.plexus.interpolation.PropertiesBasedValueSource;
 import org.codehaus.plexus.interpolation.RecursionInterceptor;
 import org.codehaus.plexus.interpolation.SimpleRecursionInterceptor;
 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
@@ -195,6 +198,10 @@
         final Properties filterProperties = new Properties();
 
         loadProperties( filterProperties, request.getFileFilters(), baseProps 
);
+        if ( filterProperties.size() < 1 )
+        {
+            filterProperties.putAll( baseProps );
+        }
 
         if ( request.getMavenProject() != null )
         {
@@ -229,8 +236,7 @@
             getLogger().debug( "properties used " + filterProperties );
         }
 
-        final ValueSource propertiesValueSource =
-            new PropertiesEscapingBackSlashValueSource( 
request.isEscapeWindowsPaths(), filterProperties );
+        final ValueSource propertiesValueSource = new 
PropertiesBasedValueSource( filterProperties );
 
         if ( request != null )
         {
@@ -280,14 +286,14 @@
         
         private ValueSource propertiesValueSource;
         
-        private Collection projectStartExpressions;
+        private List projectStartExpressions;
         
         private String escapeString;
         
         private boolean escapeWindowsPaths;
 
         Wrapper( LinkedHashSet delimiters, MavenProject project, ValueSource 
propertiesValueSource,
-                        Collection projectStartExpressions, String 
escapeString, boolean escapeWindowsPaths )
+                        List projectStartExpressions, String escapeString, 
boolean escapeWindowsPaths )
         {
             super();
             this.delimiters = delimiters;
@@ -313,13 +319,27 @@
                 ri = new SimpleRecursionInterceptor();
             }
             
-            MavenProjectValueSource valueSource = new MavenProjectValueSource( 
project, escapeWindowsPaths );
+            interpolator.addValueSource( propertiesValueSource );
+            interpolator.addValueSource( new PrefixedObjectValueSource( 
projectStartExpressions, project, true ) );
             
-            valueSource.setPropertiesValueSource( propertiesValueSource );
-            
-            interpolator.addValueSource( valueSource );
             interpolator.setEscapeString( escapeString );
             
+            if ( escapeWindowsPaths )
+            {
+                interpolator.addPostProcessor( new InterpolationPostProcessor()
+                {
+                    public Object execute( String expression, Object value )
+                    {
+                        if ( value instanceof String )
+                        {
+                            return FilteringUtils.escapeWindowsPath( (String) 
value );
+                        }
+                        
+                        return value;
+                    }
+                } );
+            }
+            
             MultiDelimiterInterpolatorFilterReader filterReader = new 
MultiDelimiterInterpolatorFilterReader( reader, interpolator );
             filterReader.setRecursionInterceptor( ri );
             filterReader.setDelimiterSpecs( delimiters );

Modified: 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java?rev=806646&r1=806645&r2=806646&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
 (original)
+++ 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFiltering.java
 Fri Aug 21 17:08:45 2009
@@ -92,6 +92,8 @@
                                                                                
        nonFilteredFileExtensions,
                                                                                
        mavenSession );
         mavenResourcesExecution.setUseDefaultFilterWrappers( true );
+//        mavenResourcesExecution.setEscapeWindowsPaths( false );
+        
         filterResources( mavenResourcesExecution );
     }
 

Modified: 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java?rev=806646&r1=806645&r2=806646&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
 (original)
+++ 
maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/FilteringUtils.java
 Fri Aug 21 17:08:45 2009
@@ -25,7 +25,7 @@
  * @author <a href="mailto:ol...@apache.org";>olamy</a>
  * @version $Id$
  */
-public class FilteringUtils
+public final class FilteringUtils
 {
 
     /**
@@ -40,8 +40,23 @@
     {
         if ( !StringUtils.isEmpty( val ) && val.indexOf( ":\\" ) == 1 )
         {
-            val = StringUtils.replace( val, "\\", "\\\\" );
-            //val = StringUtils.replace( val, ":", "\\:" );
+            // Adapted from StringUtils.replace in plexus-utils to accommodate 
pre-escaped backslashes.
+            StringBuffer buf = new StringBuffer( val.length() );
+            int start = 0, end = 0;
+            while ( ( end = val.indexOf( '\\', start ) ) != -1 )
+            {
+                buf.append( val.substring( start, end ) ).append( "\\\\" );
+                start = end + 1;
+                
+                if ( val.indexOf( '\\', end + 1 ) == end + 1 )
+                {
+                    start++;
+                }
+            }
+            
+            buf.append( val.substring( start ) );
+            
+            return buf.toString();
         }
         return val;
     }

Modified: 
maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
URL: 
http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java?rev=806646&r1=806645&r2=806646&view=diff
==============================================================================
--- 
maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
 (original)
+++ 
maven/shared/trunk/maven-filtering/src/test/java/org/apache/maven/shared/filtering/DefaultMavenResourcesFilteringTest.java
 Fri Aug 21 17:08:45 2009
@@ -29,6 +29,8 @@
 
 import org.apache.maven.model.Resource;
 import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.interpolation.PrefixedObjectValueSource;
+import org.codehaus.plexus.interpolation.ValueSource;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.IOUtil;
 
@@ -227,7 +229,7 @@
 
         String userHome = result.getProperty( "userHome" );
 
-        assertTrue( new File( userHome ).exists() );
+        assertTrue( "'" + userHome + "' does not exist.", new File( userHome 
).exists() );
         assertEquals( new File( System.getProperty( "user.home" ) ), new File( 
userHome ) );
 
         if ( escapeTest )
@@ -279,8 +281,10 @@
             new MavenResourcesExecution( resources, outputDirectory, 
mavenProject, "UTF-8", null,
                                          nonFilteredFileExtensions, new 
StubMavenSession() );
 
-        mavenResourcesExecution.addFilerWrapperWithEscaping( new 
MavenProjectValueSource( mavenProject, true ), "@",
-                                                             "@", null );
+        ValueSource vs = new PrefixedObjectValueSource( 
mavenResourcesExecution.getProjectStartExpressions(), mavenProject, true );
+        
+        mavenResourcesExecution.addFilerWrapperWithEscaping( vs, "@", "@", 
null );
+        
         mavenResourcesFiltering.filterResources( mavenResourcesExecution );
         Properties result =
             PropertyUtils.loadPropertyFile( new File( outputDirectory, 
"maven-resources-filtering.txt" ), null );


Reply via email to