Author: sisbell
Date: Sun Sep 14 04:34:27 2008
New Revision: 695196

URL: http://svn.apache.org/viewvc?rev=695196&view=rev
Log:
Fix: mng3746 - Implemented proper ordering of system, user and model properties 
used in interpolation. this required creating a tag value, which could be used 
for comparing and ordering of InterpolatorProperty.

Added:
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomInterpolatorTag.java
Modified:
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
    
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/InterpolatorProperty.java
    
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java?rev=695196&r1=695195&r2=695196&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
 Sun Sep 14 04:34:27 2008
@@ -36,6 +36,7 @@
 import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.builder.PomClassicTransformer;
+import org.apache.maven.project.builder.PomInterpolatorTag;
 import org.apache.maven.extension.lineage.ModelLineage;
 import org.apache.maven.extension.lineage.ModelLineageBuilder;
 import org.apache.maven.extension.lineage.ModelLineageIterator;
@@ -163,8 +164,10 @@
                 config.setExecutionProperties( execProps );
 
                 List<InterpolatorProperty> interpolatorProperties = new 
ArrayList<InterpolatorProperty>();
-                interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( 
config.getExecutionProperties()));
-                interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getUserProperties()));
+                    interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getExecutionProperties(), 
+                PomInterpolatorTag.SYSTEM_PROPERTIES.name()));
+                    interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getUserProperties(),
+                PomInterpolatorTag.USER_PROPERTIES.name()));
                 model = PomClassicTransformer.interpolateModel( model, 
interpolatorProperties, modelPom.getParentFile());
 
                 grabManagedPluginsWithExtensionsFlagTurnedOn( model, 
managedPluginsWithExtensionsFlag );

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java?rev=695196&r1=695195&r2=695196&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
 Sun Sep 14 04:34:27 2008
@@ -61,6 +61,7 @@
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.ModelUtils;
 import org.apache.maven.project.builder.PomClassicTransformer;
+import org.apache.maven.project.builder.PomInterpolatorTag;
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.project.artifact.MavenMetadataSource;
 import org.apache.maven.realm.MavenRealmManager;
@@ -556,10 +557,12 @@
         if ( dom != null )
         {
             try
-            {
+            {  
                 List<InterpolatorProperty> interpolatorProperties = new 
ArrayList<InterpolatorProperty>();
-                interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( 
session.getProjectBuilderConfiguration().getExecutionProperties()));
-                interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( 
session.getProjectBuilderConfiguration().getUserProperties()));
+                interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( 
session.getProjectBuilderConfiguration().getExecutionProperties(),
+                        PomInterpolatorTag.SYSTEM_PROPERTIES.name()));
+                interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( 
session.getProjectBuilderConfiguration().getUserProperties(),
+                        PomInterpolatorTag.USER_PROPERTIES.name()));
                 String interpolatedDom  =
                         PomClassicTransformer.interpolateXmlString( 
String.valueOf( dom ), interpolatorProperties );
                 dom = Xpp3DomBuilder.build( new StringReader( interpolatedDom 
) );

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=695196&r1=695195&r2=695196&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Sun Sep 14 04:34:27 2008
@@ -44,6 +44,7 @@
 import org.apache.maven.project.artifact.InvalidDependencyVersionException;
 import org.apache.maven.project.builder.PomArtifactResolver;
 import org.apache.maven.project.builder.ProjectBuilder;
+import org.apache.maven.project.builder.PomInterpolatorTag;
 import org.apache.maven.project.validation.ModelValidationResult;
 import org.apache.maven.project.validation.ModelValidator;
 import org.apache.maven.project.workspace.ProjectWorkspace;
@@ -532,8 +533,10 @@
         }
 
         List<InterpolatorProperty> interpolatorProperties = new 
ArrayList<InterpolatorProperty>();
-        interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( 
config.getExecutionProperties()));
-        interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getUserProperties()));
+        interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getExecutionProperties(), 
+                PomInterpolatorTag.SYSTEM_PROPERTIES.name()));
+        interpolatorProperties.addAll( 
InterpolatorProperty.toInterpolatorProperties( config.getUserProperties(),
+                PomInterpolatorTag.USER_PROPERTIES.name()));
 
         MavenProject mavenProject;
         try

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java?rev=695196&r1=695195&r2=695196&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
 Sun Sep 14 04:34:27 2008
@@ -29,14 +29,7 @@
 import java.io.StringReader;
 import java.io.File;
 import java.io.ByteArrayInputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 /**
  * Provides methods for transforming model properties into a domain model for 
the pom classic format and vice versa.
@@ -506,7 +499,7 @@
 
         List<InterpolatorProperty> ips = new 
ArrayList<InterpolatorProperty>(interpolatorProperties);
         
ips.addAll(ModelTransformerContext.createInterpolatorProperties(modelProperties,
 ProjectUri.baseUri, aliases,
-                        false, false));
+                        PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, 
false));
 
         for(ModelProperty mp : modelProperties)
         {
@@ -593,9 +586,12 @@
         List<InterpolatorProperty> standardInterpolatorProperties = new 
ArrayList<InterpolatorProperty>();
         if(domainModel.isPomInBuild())
         {
-            standardInterpolatorProperties.add(new 
InterpolatorProperty("${project.basedir}", basedir ));
-            standardInterpolatorProperties.add(new 
InterpolatorProperty("${basedir}", basedir ));
-            standardInterpolatorProperties.add(new 
InterpolatorProperty("${pom.basedir}", basedir ));
+            standardInterpolatorProperties.add(new 
InterpolatorProperty("${project.basedir}", basedir,
+                    PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
+            standardInterpolatorProperties.add(new 
InterpolatorProperty("${basedir}", basedir,
+                    PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
+            standardInterpolatorProperties.add(new 
InterpolatorProperty("${pom.basedir}", basedir,
+                    PomInterpolatorTag.PROJECT_PROPERTIES.name() ));
 
         }
 
@@ -605,15 +601,21 @@
             {
                 String uri = mp.getUri();
                 standardInterpolatorProperties.add( new InterpolatorProperty( 
"${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
-                        uri.length() ) + "}", mp.getValue() ) );
+                        uri.length() ) + "}", mp.getValue(), 
PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
             }
         }
 
         //FIRST PASS - Withhold using build directories as interpolator 
properties
         List<InterpolatorProperty> ips1 = new 
ArrayList<InterpolatorProperty>(interpolatorProperties);
-        
ips1.addAll(ModelTransformerContext.createInterpolatorProperties(firstPassModelProperties,
 ProjectUri.baseUri, aliases,
-                        false, false));
         ips1.addAll(standardInterpolatorProperties);
+        
ips1.addAll(ModelTransformerContext.createInterpolatorProperties(firstPassModelProperties,
 ProjectUri.baseUri, aliases,
+                        PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, 
false));
+        Collections.sort(ips1, new Comparator<InterpolatorProperty>()
+        {
+            public int compare(InterpolatorProperty o, InterpolatorProperty 
o1) {
+                return 
PomInterpolatorTag.valueOf(o.getTag()).compareTo(PomInterpolatorTag.valueOf(o1.getTag()));
+            }
+        });
 
         ModelTransformerContext.interpolateModelProperties( modelProperties, 
ips1 );
 
@@ -642,9 +644,16 @@
 
         //THIRD PASS - Use build directories as interpolator properties
         List<InterpolatorProperty> ips2 = new 
ArrayList<InterpolatorProperty>(interpolatorProperties);
+        ips2.addAll(standardInterpolatorProperties);        
         
ips2.addAll(ModelTransformerContext.createInterpolatorProperties(secondPassModelProperties,
 ProjectUri.baseUri, aliases,
-                        false, false));
-        ips2.addAll(standardInterpolatorProperties);
+                        PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, 
false));
+        ips2.addAll(interpolatorProperties);
+        Collections.sort(ips2, new Comparator<InterpolatorProperty>()
+        {
+            public int compare(InterpolatorProperty o, InterpolatorProperty 
o1) {
+                return 
PomInterpolatorTag.valueOf(o.getTag()).compareTo(PomInterpolatorTag.valueOf(o1.getTag()));
+            }
+        });
 
         ModelTransformerContext.interpolateModelProperties( modelProperties, 
ips2 );
     }

Added: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomInterpolatorTag.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomInterpolatorTag.java?rev=695196&view=auto
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomInterpolatorTag.java
 (added)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomInterpolatorTag.java
 Sun Sep 14 04:34:27 2008
@@ -0,0 +1,14 @@
+package org.apache.maven.project.builder;
+
+
+public enum PomInterpolatorTag
+{
+
+    USER_PROPERTIES,
+
+    PROJECT_PROPERTIES,
+
+    SYSTEM_PROPERTIES
+
+
+}

Modified: 
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/InterpolatorProperty.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/InterpolatorProperty.java?rev=695196&r1=695195&r2=695196&view=diff
==============================================================================
--- 
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/InterpolatorProperty.java
 (original)
+++ 
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/InterpolatorProperty.java
 Sun Sep 14 04:34:27 2008
@@ -36,6 +36,11 @@
      */
     private final String value;
 
+    /**
+     * Metadata tag (general use)
+     */
+    private String tag;
+
 
     /**
      * Constructor
@@ -45,6 +50,11 @@
      */
     public InterpolatorProperty( String key, String value )
     {
+        this(key, value, null);
+    }
+
+    public InterpolatorProperty( String key, String value, String tag )
+    {
         if ( key == null )
         {
             throw new IllegalArgumentException( "key: null" );
@@ -56,6 +66,8 @@
         }
         this.key = key;
         this.value = value;
+        this.tag = tag;
+
     }
 
     /**
@@ -78,6 +90,16 @@
         return value;
     }
 
+    public String getTag()
+    {
+        return tag;
+    }
+
+    public void setTag(String tag)
+    {
+        this.tag = tag;
+    }
+
     /**
      * Returns true if key values match, otherwise returns false.
      *
@@ -121,7 +143,7 @@
             this.hashCode();
     }
 
-    public static List<InterpolatorProperty> toInterpolatorProperties( 
Properties properties )
+    public static List<InterpolatorProperty> toInterpolatorProperties( 
Properties properties, String tag )
     {
         if( properties == null )
         {
@@ -131,7 +153,7 @@
         List<InterpolatorProperty> interpolatorProperties = new 
ArrayList<InterpolatorProperty>();
         for ( Map.Entry<Object, Object> e : properties.entrySet() )
         {
-            interpolatorProperties.add( new InterpolatorProperty( "${" + 
e.getKey() +"}", (String) e.getValue()) );
+            interpolatorProperties.add( new InterpolatorProperty( "${" + 
e.getKey() +"}", (String) e.getValue(), tag) );
         }
         return interpolatorProperties;
     }

Modified: 
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java?rev=695196&r1=695195&r2=695196&view=diff
==============================================================================
--- 
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
 (original)
+++ 
maven/components/trunk/maven-shared-model/src/main/java/org/apache/maven/shared/model/ModelTransformerContext.java
 Sun Sep 14 04:34:27 2008
@@ -78,6 +78,7 @@
     public static List<InterpolatorProperty> 
createInterpolatorProperties(List<ModelProperty> modelProperties,
                                                                       String 
baseUriForModel,
                                                                       
Map<String, String> aliases,
+                                                                      String 
interpolatorTag,
                                                                       boolean 
includeSystemProperties,
                                                                       boolean 
includeEnvironmentProperties)
     {
@@ -108,13 +109,14 @@
         {
             InterpolatorProperty ip = mp.asInterpolatorProperty( 
baseUriForModel );
             if ( ip != null )
-            {
+            {   ip.setTag( interpolatorTag );
                 interpolatorProperties.add( ip );
                 for ( Map.Entry<String, String> a : aliases.entrySet() )
                 {
                     interpolatorProperties.add( new InterpolatorProperty(
                             ip.getKey().replaceAll( a.getKey(), a.getValue()),
-                            ip.getValue().replaceAll( a.getKey(), 
a.getValue()) ) );
+                            ip.getValue().replaceAll( a.getKey(), 
a.getValue()),
+                            interpolatorTag) );
                 }
             }
         }
@@ -124,6 +126,15 @@
     public static void interpolateModelProperties(List<ModelProperty> 
modelProperties, 
                                                   List<InterpolatorProperty> 
interpolatorProperties )
     {
+        if( modelProperties == null )
+        {
+            throw new IllegalArgumentException("modelProperties: null");
+        }
+
+        if( interpolatorProperties == null )
+        {
+            throw new IllegalArgumentException("interpolatorProperties: null");
+        }
 
         List<ModelProperty> unresolvedProperties = new 
ArrayList<ModelProperty>();
         for ( ModelProperty mp : modelProperties )
@@ -134,7 +145,10 @@
             }
         }
 
-        for ( InterpolatorProperty ip : interpolatorProperties )
+        LinkedHashSet<InterpolatorProperty> ips = new 
LinkedHashSet<InterpolatorProperty>();
+        ips.addAll(interpolatorProperties);
+
+        for ( InterpolatorProperty ip : ips)
         {
             for ( ModelProperty mp : unresolvedProperties )
             {
@@ -142,8 +156,7 @@
             }
         }
 
-
-        for ( InterpolatorProperty ip : interpolatorProperties )
+        for ( InterpolatorProperty ip : ips )
         {
             for ( ModelProperty mp : unresolvedProperties )
             {
@@ -152,7 +165,6 @@
         }
     }
 
-
     /**
      * Transforms the specified model properties using the specified 
transformers.
      *


Reply via email to