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/08/21 00:42:46 UTC

svn commit: r806383 - in /maven/shared/trunk/maven-filtering: ./ src/main/java/org/apache/maven/shared/filtering/

Author: jdcasey
Date: Thu Aug 20 22:42:46 2009
New Revision: 806383

URL: http://svn.apache.org/viewvc?rev=806383&view=rev
Log:
use a recursion interceptor to guard against recursive expressions spanning multiple project prefixes.

Modified:
    maven/shared/trunk/maven-filtering/pom.xml
    maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
    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/MavenResourcesExecution.java

Modified: maven/shared/trunk/maven-filtering/pom.xml
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/pom.xml?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/pom.xml (original)
+++ maven/shared/trunk/maven-filtering/pom.xml Thu Aug 20 22:42:46 2009
@@ -87,12 +87,12 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-utils</artifactId>
-      <version>1.5.8</version>
+      <version>1.5.15</version>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-interpolation</artifactId>
-      <version>1.7</version>
+      <version>1.12-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.sonatype.plexus</groupId>

Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java (original)
+++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/AbstractMavenFilteringRequest.java Thu Aug 20 22:42:46 2009
@@ -22,8 +22,11 @@
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.project.MavenProject;
 
+import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Properties;
+import java.util.Set;
 
 /**
  * @since 1.0-beta-3
@@ -41,6 +44,13 @@
 
     private MavenSession mavenSession;
 
+    /** 
+     * List of String considered as expressions which contains values in the project/pom : pom project
+     * default value will be pom and project.
+     * @since 1.0-beta-2
+     */
+    private List projectStartExpressions = new ArrayList();
+    
     /**
      * String which will escape interpolation mechanism : foo \${foo.bar} -> foo ${foo.bar}
      * @since 1.0-beta-2
@@ -57,19 +67,35 @@
      */
     private boolean injectProjectBuildFilters = false;
     
+    /**
+     * @since 1.0-beta-3
+     */
+    private Set delimiters = new HashSet();
+    
     protected AbstractMavenFilteringRequest()
     {
+        initDefaults();
     }
 
     protected AbstractMavenFilteringRequest( MavenProject mavenProject, List filters,
                                           String encoding, MavenSession mavenSession )
     {
+        initDefaults();
         this.mavenProject = mavenProject;
         this.filters = filters;
         this.encoding = encoding;
         this.mavenSession = mavenSession;
     }
 
+    private void initDefaults()
+    {
+        projectStartExpressions.add( "pom" );
+        projectStartExpressions.add( "project" );
+        
+        delimiters.add( "${*}" );
+        delimiters.add( "@*@" );
+    }
+
     public MavenProject getMavenProject()
     {
         return mavenProject;
@@ -196,6 +222,48 @@
         this.escapeString = escapeString;
     }
     
-    
+    /**
+     * @return
+     * @since 1.0-beta-2
+     */
+    public List getProjectStartExpressions()
+    {
+        return projectStartExpressions;
+    }
+
+    /**
+     * @param projectStartExpressions
+     * @since 1.0-beta-2
+     */
+    public void setProjectStartExpressions( List projectStartExpressions )
+    {
+        this.projectStartExpressions = projectStartExpressions;
+    }
+
+    /**
+     * @return Not allowed to be null or empty.
+     * @since 1.0-beta-3
+     */
+    public Set getDelimiters()
+    {
+        return delimiters;
+    }
+
+    /**
+     * @param delimiters If null, reset delimiters to ${*} only. Otherwise, use the provided parameter value.
+     * @since 1.0-beta-3
+     */
+    public void setDelimiters( Set delimiters )
+    {
+        if ( delimiters == null || delimiters.isEmpty() )
+        {
+            this.delimiters.clear();
+            this.delimiters.add( "${*}" );
+        }
+        else
+        {
+            this.delimiters = delimiters;
+        }
+    }
 
 }

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=806383&r1=806382&r2=806383&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 Thu Aug 20 22:42:46 2009
@@ -32,6 +32,9 @@
 import org.apache.maven.project.MavenProject;
 import org.sonatype.plexus.build.incremental.BuildContext;
 import org.codehaus.plexus.interpolation.InterpolatorFilterReader;
+import org.codehaus.plexus.interpolation.PrefixAwareRecursionInterceptor;
+import org.codehaus.plexus.interpolation.RecursionInterceptor;
+import org.codehaus.plexus.interpolation.SimpleRecursionInterceptor;
 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
 import org.codehaus.plexus.interpolation.ValueSource;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -155,9 +158,11 @@
 
     }
     
-    public List getDefaultFilterWrappers( final AbstractMavenFilteringRequest request )
+    public List getDefaultFilterWrappers( final AbstractMavenFilteringRequest req )
         throws MavenFilteringException
     {
+        // compensate for null parameter value.
+        final AbstractMavenFilteringRequest request = req == null ? new MavenFileFilterRequest() : req;
 
         // here we build some properties which will be used to read some properties files
         // to interpolate the expression ${ } in this properties file
@@ -209,11 +214,11 @@
 
         if ( request.getAdditionalProperties() != null )
         {
-            // additionnal properties wins
+            // additional properties wins
             filterProperties.putAll( request.getAdditionalProperties() );
         }
         
-        List defaultFilterWrappers = new ArrayList( 3 );
+        List defaultFilterWrappers = request == null ? new ArrayList( 1 ) : new ArrayList( request.getDelimiters().size() + 1 );
 
         if ( getLogger().isDebugEnabled() )
         {
@@ -224,45 +229,68 @@
             new PropertiesEscapingBackSlashValueSource( request.isEscapeWindowsPaths(), filterProperties );
 
         final String escapeString = request == null ? null : request.getEscapeString();
-
-        // support ${token}
-        FileUtils.FilterWrapper one = new FileUtils.FilterWrapper()
-        {
-            public Reader getReader( Reader reader )
-            {
-                StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator();
-                MavenProjectValueSource valueSource =
-                    new MavenProjectValueSource( request.getMavenProject(), request.isEscapeWindowsPaths() );
-                valueSource.setPropertiesValueSource( propertiesValueSource );
-                propertiesInterpolator.addValueSource( valueSource );
-                propertiesInterpolator.setEscapeString( escapeString );
-                InterpolatorFilterReader filterReader = new InterpolatorFilterReader( reader, propertiesInterpolator );
-                filterReader.setInterpolateWithPrefixPattern( false );
-                filterReader.setEscapeString( escapeString );
-                return filterReader;
-            }
-        };
-        defaultFilterWrappers.add( one );
-
-        // support @token@
-        FileUtils.FilterWrapper second = new FileUtils.FilterWrapper()
+        
+        if ( request != null )
         {
-            public Reader getReader( Reader reader )
+            for ( Iterator it = request.getDelimiters().iterator(); it.hasNext(); )
             {
-                StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( "@", "@" );
-                MavenProjectValueSource valueSource =
-                    new MavenProjectValueSource( request.getMavenProject(), request.isEscapeWindowsPaths() );
-                valueSource.setPropertiesValueSource( propertiesValueSource );
-                propertiesInterpolator.addValueSource( valueSource );
-                propertiesInterpolator.setEscapeString( escapeString );
-                InterpolatorFilterReader filterReader =
-                    new InterpolatorFilterReader( reader, propertiesInterpolator, "@", "@" );
-                filterReader.setInterpolateWithPrefixPattern( false );
-                filterReader.setEscapeString( escapeString );
-                return filterReader;
+                String delimiterPattern = (String) it.next();
+                final String[] delimiters = new String[2];
+                
+                int splitIdx = delimiterPattern.indexOf( '*' );
+                if ( splitIdx < 0 || splitIdx == delimiterPattern.length() - 1 )
+                {
+                    delimiters[0] = delimiterPattern;
+                    delimiters[1] = delimiterPattern;
+                }
+                else
+                {
+                    delimiters[0] = delimiterPattern.substring( 0, splitIdx );
+                    delimiters[1] = delimiterPattern.substring( splitIdx + 1 );
+                }
+                
+                FileUtils.FilterWrapper wrapper = new FileUtils.FilterWrapper()
+                {
+                    public Reader getReader( Reader reader )
+                    {
+                        StringSearchInterpolator propertiesInterpolator = new StringSearchInterpolator( delimiters[0],
+                                                                                                        delimiters[1] );
+                        
+                        RecursionInterceptor ri = null;
+                        if ( request.getProjectStartExpressions() != null && !request.getProjectStartExpressions().isEmpty() )
+                        {
+                            ri = new PrefixAwareRecursionInterceptor( request.getProjectStartExpressions(), true );
+                        }
+                        else
+                        {
+                            ri = new SimpleRecursionInterceptor();
+                        }
+                        
+                        MavenProjectValueSource valueSource = new MavenProjectValueSource(
+                                                                                           request.getMavenProject(),
+                                                                                           request.isEscapeWindowsPaths() );
+                        
+                        valueSource.setPropertiesValueSource( propertiesValueSource );
+                        
+                        propertiesInterpolator.addValueSource( valueSource );
+                        propertiesInterpolator.setEscapeString( escapeString );
+                        
+                        InterpolatorFilterReader filterReader = new InterpolatorFilterReader( reader,
+                                                                                              propertiesInterpolator,
+                                                                                              delimiters[0],
+                                                                                              delimiters[1],
+                                                                                              ri );
+                        
+                        filterReader.setInterpolateWithPrefixPattern( false );
+                        filterReader.setEscapeString( escapeString );
+                        
+                        return filterReader;
+                    }
+                };
+                
+                defaultFilterWrappers.add( wrapper );
             }
-        };
-        defaultFilterWrappers.add( second );
+        }
 
         return defaultFilterWrappers;
     }    

Modified: maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java
URL: http://svn.apache.org/viewvc/maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java?rev=806383&r1=806382&r2=806383&view=diff
==============================================================================
--- maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java (original)
+++ maven/shared/trunk/maven-filtering/src/main/java/org/apache/maven/shared/filtering/MavenResourcesExecution.java Thu Aug 20 22:42:46 2009
@@ -57,13 +57,6 @@
 
     private boolean useDefaultFilterWrappers = false;
     
-    /** 
-     * List of String considered as expressions which contains values in the project/pom : pom project
-     * default value will be pom and project.
-     * @since 1.0-beta-2
-     */
-    private List projectStartExpressions = new ArrayList();
-    
     /**
      * Overwrite existing files even if the destination files are newer.
      * <b>false by default</b>
@@ -79,15 +72,8 @@
     
     public MavenResourcesExecution()
     {
-        initProjectStartExpressions();
     }
     
-    private void initProjectStartExpressions()
-    {
-        projectStartExpressions.add( "pom" );
-        projectStartExpressions.add( "project" );
-    }
-
     /**
      * <b>As we use a maven project useDefaultFilterWrappers will set to true</b>
      * @param resources
@@ -102,7 +88,6 @@
                                     List fileFilters, List nonFilteredFileExtensions, MavenSession mavenSession )
     {
         super( mavenProject, fileFilters, encoding, mavenSession );
-        initProjectStartExpressions();
         this.resources = resources;
         this.outputDirectory = outputDirectory;
         this.nonFilteredFileExtensions = nonFilteredFileExtensions;
@@ -283,24 +268,6 @@
      * @return
      * @since 1.0-beta-2
      */
-    public List getProjectStartExpressions()
-    {
-        return projectStartExpressions;
-    }
-
-    /**
-     * @param projectStartExpressions
-     * @since 1.0-beta-2
-     */
-    public void setProjectStartExpressions( List projectStartExpressions )
-    {
-        this.projectStartExpressions = projectStartExpressions;
-    }
-
-    /**
-     * @return
-     * @since 1.0-beta-2
-     */
     public boolean isOverwrite()
     {
         return overwrite;