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 2006/05/03 16:58:43 UTC

svn commit: r399323 - in /maven/plugins/trunk/maven-assembly-plugin/src: main/java/org/apache/maven/plugin/assembly/ main/java/org/apache/maven/plugin/assembly/interpolation/ test/java/org/apache/maven/plugin/assembly/interpolation/

Author: jdcasey
Date: Wed May  3 07:58:22 2006
New Revision: 399323

URL: http://svn.apache.org/viewcvs?rev=399323&view=rev
Log:
[MASSEMBLY-89] Added blacklisting of certain expressions for the outputFileNameMapping element, in an extensible way that we can build on for other similar scenarios. Also added a unit test for this problem.

Added:
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/
    maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java   (with props)
Modified:
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
    maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java?rev=399323&r1=399322&r2=399323&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/AbstractAssemblyMojo.java Wed May  3 07:58:22 2006
@@ -1168,7 +1168,7 @@
             String left = evaluateFileNameMapping( mat.group( 1 ), artifact );
             try
             {
-                middle = ReflectionValueExtractor.evaluate( "dep." + mat.group( 2 ), artifact );
+                middle = ReflectionValueExtractor.evaluate( mat.group( 2 ), artifact, false );
             }
             catch ( Exception e )
             {

Modified: maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java?rev=399323&r1=399322&r2=399323&view=diff
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java (original)
+++ maven/plugins/trunk/maven-assembly-plugin/src/main/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolator.java Wed May  3 07:58:22 2006
@@ -14,6 +14,10 @@
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.regex.Matcher;
@@ -22,7 +26,25 @@
 public class AssemblyInterpolator
     extends AbstractLogEnabled
 {
+    private static final Pattern ELEMENT_PATTERN = Pattern.compile( "\\<([^> ]+)[^>]*>([^<]+)" );
     private static final Pattern EXPRESSION_PATTERN = Pattern.compile( "\\$\\{(pom\\.|project\\.|env\\.)?([^}]+)\\}" );
+    
+    private static final Map INTERPOLATION_BLACKLIST;
+    
+    static
+    {
+        Map blacklist = new HashMap();
+        
+        List ofnmBlacklistings = new ArrayList();
+        
+        ofnmBlacklistings.add( "groupId" );
+        ofnmBlacklistings.add( "artifactId" );
+        ofnmBlacklistings.add( "version" );
+        
+        blacklist.put( "outputFileNameMapping", ofnmBlacklistings );
+        
+        INTERPOLATION_BLACKLIST = blacklist;
+    }
 
     private Properties envars;
 
@@ -80,17 +102,61 @@
             throw new AssemblyInterpolationException(
                 "Cannot read assembly descriptor from interpolating filter of serialized version.", e );
         }
+        
         return assembly;
     }
 
-    private String interpolateInternal( String result, Assembly assembly, Model model, Map context )
+    private String interpolateInternal( String src, Assembly assembly, Model model, Map context )
         throws AssemblyInterpolationException
     {
+        String result = src;
+        
+        Matcher elementMatcher = ELEMENT_PATTERN.matcher( result );
+        
+        while( elementMatcher.find() )
+        {
+            String element = elementMatcher.group( 0 );
+            
+            String elementName = elementMatcher.group( 1 );
+            String value = elementMatcher.group( 2 );
+            
+            // only attempt to interpolate if the following is met:
+            // 1. the element is not in the interpolation blacklist.
+            // 2. the value is not empty (otherwise there's nothing to interpolate)
+            // 3. the value contains a "${" (a pretty good clue that there's an expression in it)
+            if ( StringUtils.isNotEmpty( value ) && value.indexOf( "${" ) > -1 )
+            {
+                List blacklistedExpressions = (List) INTERPOLATION_BLACKLIST.get( elementName );
+                if ( blacklistedExpressions == null )
+                {
+                    blacklistedExpressions = Collections.EMPTY_LIST;
+                }
+                
+                String interpolatedValue = interpolateElementValue( value, assembly, model, context, blacklistedExpressions );
+                
+                String modifiedElement = StringUtils.replace( element, value, interpolatedValue );
+                result = StringUtils.replace( result, element, modifiedElement );
+            }
+        }
+        
+        return result;
+    }
+    
+    private String interpolateElementValue( String src, Assembly assembly, Model model, Map context, List blacklistedExpressions ) 
+        throws AssemblyInterpolationException
+    {
+        String result = src;
+        
         Matcher matcher = EXPRESSION_PATTERN.matcher( result );
         while ( matcher.find() )
         {
             String wholeExpr = matcher.group( 0 );
-            String realExpr = parseExpression( wholeExpr );
+            String realExpr = matcher.group( 2 );
+            
+            if ( blacklistedExpressions.contains( realExpr ) )
+            {
+                continue;
+            }
 
             Object value = context.get( realExpr );
 
@@ -137,15 +203,5 @@
             }
         }
         return result;
-    }
-
-    private String parseExpression( String expression )
-    {
-        int startIndex = expression.indexOf( "{" );
-        int endIndex = expression.indexOf( "}" );
-
-        expression = expression.substring( startIndex + 1, endIndex );
-
-        return expression;
     }
 }

Added: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java
URL: http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java?rev=399323&view=auto
==============================================================================
--- maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java (added)
+++ maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java Wed May  3 07:58:22 2006
@@ -0,0 +1,44 @@
+package org.apache.maven.plugin.assembly.interpolation;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.plugins.assembly.model.Assembly;
+import org.apache.maven.plugins.assembly.model.DependencySet;
+
+import java.io.IOException;
+import java.util.Collections;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+public class AssemblyInterpolatorTest
+    extends TestCase
+{
+
+    public void testDependencyOutputFileNameMappingsAreNotInterpolated() 
+        throws IOException, AssemblyInterpolationException
+    {
+        AssemblyInterpolator interpolator = new AssemblyInterpolator();
+
+        Model model = new Model();
+        model.setArtifactId( "artifact-id" );
+        model.setGroupId( "group.id" );
+        model.setVersion( "1" );
+
+        Assembly assembly = new Assembly();
+
+        DependencySet set = new DependencySet();
+        set.setOutputFileNameMapping( "${artifactId}.${extension}" );
+
+        assembly.addDependencySet( set );
+
+        Assembly outputAssembly = interpolator.interpolate( assembly, model, Collections.EMPTY_MAP );
+        
+        List outputDependencySets = outputAssembly.getDependencySets();
+        assertEquals( 1, outputDependencySets.size() );
+        
+        DependencySet outputSet = (DependencySet) outputDependencySets.get( 0 );
+        
+        assertEquals( set.getOutputFileNameMapping(), outputSet.getOutputFileNameMapping() );
+    }
+
+}

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-assembly-plugin/src/test/java/org/apache/maven/plugin/assembly/interpolation/AssemblyInterpolatorTest.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"