Author: jdcasey
Date: Thu Jun 26 09:34:27 2008
New Revision: 671936

URL: http://svn.apache.org/viewvc?rev=671936&view=rev
Log:
Adding -V|--show-version, and cleaning up interpolation to correspond with 
recent refactoriing in 2.0.x branch. Also, changing super-POM to use 
basedir/build.directory expressions in build paths, to enable paths to respond 
to changes in other, more basic paths (like outputDirectory responding to a 
change in build.directory). This is in preparation for merging over the 
dynamicBuild behavior.

Added:
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
   (with props)
Modified:
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
    
maven/components/trunk/maven-core/src/main/java/org/apache/maven/extension/DefaultBuildExtensionScanner.java
    
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
    
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.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/DefaultProjectBuilderConfiguration.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/PathTranslatingValueSource.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
    
maven/components/trunk/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml
    
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/DefaultMavenExecutionRequest.java
 Thu Jun 26 09:34:27 2008
@@ -743,6 +743,7 @@
             projectBuildingConfiguration.setExecutionProperties( 
getProperties() );
             projectBuildingConfiguration.setGlobalProfileManager( 
getProfileManager() );
             projectBuildingConfiguration.setUserProperties( 
getUserProperties() );
+            projectBuildingConfiguration.setBuildStartTime( getStartTime() );
         }
 
         return projectBuildingConfiguration;

Modified: 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
 (original)
+++ 
maven/components/trunk/maven-core/src/main/java/org/apache/maven/execution/MavenSession.java
 Thu Jun 26 09:34:27 2008
@@ -25,6 +25,7 @@
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 import org.apache.maven.realm.MavenRealmManager;
 import org.apache.maven.reporting.MavenReport;
 import org.apache.maven.settings.Settings;
@@ -276,4 +277,9 @@
         return buildPlans;
     }
 
+    public ProjectBuilderConfiguration getProjectBuilderConfiguration()
+    {
+        return request.getProjectBuildingConfiguration();
+    }
+
 }
\ No newline at end of file

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=671936&r1=671935&r2=671936&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
 Thu Jun 26 09:34:27 2008
@@ -162,7 +162,7 @@
                     inheritedInterpolationValues = new HashMap();
                 }
 
-                model = modelInterpolator.interpolate( model, 
inheritedInterpolationValues, request.getUserProperties(), false );
+                model = modelInterpolator.interpolate( model, 
modelPom.getParentFile(), request.getProjectBuildingConfiguration(), 
getLogger().isDebugEnabled() );
 
                 grabManagedPluginsWithExtensionsFlagTurnedOn( model, 
managedPluginsWithExtensionsFlag );
 

Modified: 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
 (original)
+++ 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
 Thu Jun 26 09:34:27 2008
@@ -56,6 +56,8 @@
 
     public static final char VERSION = 'v';
 
+    public static final char SHOW_VERSION = 'V';
+
     public static final char NON_RECURSIVE = 'N';
 
     public static final char UPDATE_SNAPSHOTS = 'U';
@@ -161,6 +163,10 @@
 
         options.addOption( OptionBuilder.withLongOpt( "log-file" 
).hasArg().withDescription(
             "Log file to where all build output will go." ).create( LOG_FILE ) 
);
+
+        options.addOption(
+                          OptionBuilder.withLongOpt( "show-version" 
).withDescription( "Display version information WITHOUT stopping build" 
).create(
+                              SHOW_VERSION ) );
     }
 
     public CommandLine parse( String[] args )

Modified: 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
 (original)
+++ 
maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
 Thu Jun 26 09:34:27 2008
@@ -128,7 +128,7 @@
 
             return 0;
         }
-        else if ( debug )
+        else if ( debug || commandLine.hasOption( CLIManager.SHOW_VERSION ) )
         {
             CLIReportingUtils.showVersion();
         }

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=671936&r1=671935&r2=671936&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
 Thu Jun 26 09:34:27 2008
@@ -201,6 +201,7 @@
     }
 
     /** @deprecated  */
+    @Deprecated
     public MavenProject buildFromRepository( Artifact artifact,
                                              List remoteArtifactRepositories,
                                              ArtifactRepository 
localRepository,
@@ -965,18 +966,6 @@
 
         List activeProfiles = project.getActiveProfiles();
 
-        // TODO: Clean this up...we're using this to 'jump' the interpolation 
step for model properties not expressed in XML.
-        //  [BP] - Can this above comment be explained?
-        // We don't need all the project methods that are added over those in 
the model, but we do need basedir
-        // mkleint - using System.getProperties() is almost definitely bad for 
embedding.
-        Map context = new HashMap();
-
-        // [MNG-2339] ensure the system properties are still interpolated for 
backwards compat, but the model values must win
-        if ( config.getExecutionProperties() != null && 
!config.getExecutionProperties().isEmpty() )
-        {
-            context.putAll( config.getExecutionProperties() );
-        }
-
         File projectDir = null;
 
         if ( pomFile != null )
@@ -984,13 +973,7 @@
             projectDir = pomFile.getAbsoluteFile().getParentFile();
         }
 
-        Map overrideContext = new HashMap();
-        if ( !isSuperPom && config.getUserProperties() != null && 
!config.getUserProperties().isEmpty() )
-        {
-            overrideContext.putAll( config.getUserProperties() );
-        }
-
-        model = modelInterpolator.interpolate( model, context, 
overrideContext, projectDir, true );
+        model = modelInterpolator.interpolate( model, projectDir, config, 
getLogger().isDebugEnabled() );
 
         // We must inject any imported dependencyManagement information ahead 
of the defaults injection.
         if ( !isSuperPom )
@@ -1309,6 +1292,7 @@
      * @return
      * @throws ProjectBuildingException
      */
+    @Deprecated
     protected Set createPluginArtifacts( String projectId,
                                          List plugins, String pomLocation )
         throws ProjectBuildingException
@@ -1372,6 +1356,7 @@
      * @return
      * @throws ProjectBuildingException
      */
+    @Deprecated
     protected Set createReportArtifacts( String projectId,
                                          List reports, String pomLocation )
         throws ProjectBuildingException
@@ -1431,6 +1416,7 @@
      * @return
      * @throws ProjectBuildingException
      */
+    @Deprecated
     protected Set createExtensionArtifacts( String projectId,
                                             List extensions, String 
pomLocation )
         throws ProjectBuildingException

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultProjectBuilderConfiguration.java
 Thu Jun 26 09:34:27 2008
@@ -3,6 +3,7 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.profiles.ProfileManager;
 
+import java.util.Date;
 import java.util.Properties;
 
 public class DefaultProjectBuilderConfiguration
@@ -17,6 +18,8 @@
 
     private Properties executionProperties = System.getProperties();
 
+    private Date buildStartTime;
+
     public DefaultProjectBuilderConfiguration()
     {
     }
@@ -70,4 +73,15 @@
         return this;
     }
 
+    public Date getBuildStartTime()
+    {
+        return buildStartTime;
+    }
+
+    public ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime )
+    {
+        this.buildStartTime = buildStartTime;
+        return this;
+    }
+
 }

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ProjectBuilderConfiguration.java
 Thu Jun 26 09:34:27 2008
@@ -3,6 +3,7 @@
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.profiles.ProfileManager;
 
+import java.util.Date;
 import java.util.Properties;
 
 public interface ProjectBuilderConfiguration
@@ -24,4 +25,8 @@
 
     ProjectBuilderConfiguration setExecutionProperties( Properties 
executionProperties );
 
+    Date getBuildStartTime();
+
+    ProjectBuilderConfiguration setBuildStartTime( Date buildStartTime );
+
 }

Added: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java?rev=671936&view=auto
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
 (added)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
 Thu Jun 26 09:34:27 2008
@@ -0,0 +1,32 @@
+package org.apache.maven.project.interpolation;
+
+import org.codehaus.plexus.interpolation.ValueSource;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class BuildTimestampValueSource
+    implements ValueSource
+{
+
+    private String formattedDate;
+
+    public BuildTimestampValueSource( Date startTime, String format )
+    {
+        if ( startTime != null )
+        {
+            formattedDate = new SimpleDateFormat( format ).format( startTime );
+        }
+    }
+
+    public Object getValue( String expression )
+    {
+        if ( "build.timestamp".equals( expression ) || 
"maven.build.timestamp".equals( expression ) )
+        {
+            return formattedDate;
+        }
+
+        return null;
+    }
+
+}

Propchange: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/BuildTimestampValueSource.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/ModelInterpolator.java
 Thu Jun 26 09:34:27 2008
@@ -20,6 +20,7 @@
  */
 
 import org.apache.maven.model.Model;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 
 import java.io.File;
 import java.util.Map;
@@ -31,27 +32,39 @@
  */
 public interface ModelInterpolator
 {
+    String DEFAULT_BUILD_TIMESTAMP_FORMAT = "yyyyMMdd-hhmm";
+
+    String BUILD_TIMESTAMP_FORMAT_PROPERTY = "maven.build.timestamp.format";
+
     String ROLE = ModelInterpolator.class.getName();
 
+    /**
+     * @deprecated Use [EMAIL PROTECTED] ModelInterpolator#interpolate(Model, 
File, ProjectBuilderConfiguration, boolean)} instead.
+     */
+    @Deprecated
     Model interpolate( Model project,
-                       Map context )
+                       Map<String, ?> context )
         throws ModelInterpolationException;
 
+    /**
+     * @deprecated Use [EMAIL PROTECTED] ModelInterpolator#interpolate(Model, 
File, ProjectBuilderConfiguration, boolean)} instead.
+     */
+    @Deprecated
     Model interpolate( Model model,
-                       Map context,
+                       Map<String, ?> context,
                        boolean strict )
         throws ModelInterpolationException;
 
     Model interpolate( Model model,
-                       Map context,
-                       Map overrideContext,
-                       boolean outputDebugMessages )
+                       File projectDir,
+                       ProjectBuilderConfiguration config,
+                       boolean debugEnabled )
         throws ModelInterpolationException;
 
-    Model interpolate( Model model,
-                       Map context,
-                       Map overrideContext,
-                       File projectDir,
-                       boolean outputDebugMessages )
+    String interpolate( String src,
+                        Model model,
+                        File projectDir,
+                        ProjectBuilderConfiguration config,
+                        boolean debugEnabled )
         throws ModelInterpolationException;
 }
\ No newline at end of file

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/PathTranslatingValueSource.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/PathTranslatingValueSource.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/PathTranslatingValueSource.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/PathTranslatingValueSource.java
 Thu Jun 26 09:34:27 2008
@@ -11,11 +11,11 @@
     extends AbstractFunctionValueSourceWrapper
 {
 
-    private final List unprefixedPathKeys;
+    private final List<String> unprefixedPathKeys;
     private final File projectDir;
     private final PathTranslator pathTranslator;
 
-    protected PathTranslatingValueSource( ValueSource valueSource, List 
unprefixedPathKeys, File projectDir, PathTranslator pathTranslator )
+    protected PathTranslatingValueSource( ValueSource valueSource, 
List<String> unprefixedPathKeys, File projectDir, PathTranslator pathTranslator 
)
     {
         super( valueSource );
         this.unprefixedPathKeys = unprefixedPathKeys;
@@ -23,6 +23,7 @@
         this.pathTranslator = pathTranslator;
     }
 
+    @Override
     protected Object executeFunction( String expression,
                                       Object value )
     {

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolator.java
 Thu Jun 26 09:34:27 2008
@@ -22,6 +22,8 @@
 import org.apache.maven.model.Model;
 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.ProjectBuilderConfiguration;
 import org.apache.maven.project.path.PathTranslator;
 import org.codehaus.plexus.interpolation.InterpolationException;
 import org.codehaus.plexus.interpolation.MapBasedValueSource;
@@ -34,7 +36,6 @@
 import org.codehaus.plexus.interpolation.ValueSource;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.logging.Logger;
-import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 
 import java.io.File;
@@ -43,12 +44,10 @@
 import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.util.Properties;
 
 /**
  * Use a regular expression search to find and resolve expressions within the 
POM.
@@ -61,14 +60,13 @@
     extends AbstractLogEnabled
     implements ModelInterpolator
 {
-    private static final Pattern EXPRESSION_PATTERN = Pattern.compile( 
"\\$\\{([^}]+)\\}" );
 
-    private static final List PROJECT_PREFIXES = Arrays.asList( new String[]{ 
"pom.", "project." } );
-    private static final List TRANSLATED_PATH_EXPRESSIONS;
+    private static final List<String> PROJECT_PREFIXES = Arrays.asList( new 
String[]{ "pom.", "project." } );
+    private static final List<String> TRANSLATED_PATH_EXPRESSIONS;
 
     static
     {
-        List translatedPrefixes = new ArrayList();
+        List<String> translatedPrefixes = new ArrayList<String>();
 
         // MNG-1927, MNG-2124, MNG-3355:
         // If the build section is present and the project directory is 
non-null, we should make
@@ -91,25 +89,28 @@
     {
     }
 
-    public Model interpolate( Model model, Map context )
+    public Model interpolate( Model model, Map<String, ?> context )
         throws ModelInterpolationException
     {
-        return interpolate( model, context, Collections.EMPTY_MAP, null, true 
);
-    }
+        Properties props = new Properties();
+        props.putAll( context );
 
-    public Model interpolate( Model model, Map context, boolean strict )
-        throws ModelInterpolationException
-    {
-        return interpolate( model, context, Collections.EMPTY_MAP, null, true 
);
+        return interpolate( model,
+                            null,
+                            new 
DefaultProjectBuilderConfiguration().setExecutionProperties( props ),
+                            true );
     }
 
-    public Model interpolate( Model model,
-                              Map context,
-                              Map overrideContext,
-                              boolean strict )
+    public Model interpolate( Model model, Map<String, ?> context, boolean 
strict )
         throws ModelInterpolationException
     {
-        return interpolate( model, context, Collections.EMPTY_MAP, null, true 
);
+        Properties props = new Properties();
+        props.putAll( context );
+
+        return interpolate( model,
+                            null,
+                            new 
DefaultProjectBuilderConfiguration().setExecutionProperties( props ),
+                            true );
     }
 
     /**
@@ -125,10 +126,10 @@
      *                        or userProperties in the execution request.
      * @param projectDir The directory from which the current model's pom was 
read.
      * @param strict  This parameter is ignored!
-     * @param outputDebugMessages If true, print any feedback from the 
interpolator out to the DEBUG log-level.
+     * @param debugMessages If true, print any feedback from the interpolator 
out to the DEBUG log-level.
      * @return The resolved instance of the inbound Model. This is a different 
instance!
      */
-    public Model interpolate( Model model, Map context, Map overrideContext, 
File projectDir, boolean outputDebugMessages )
+    public Model interpolate( Model model, File projectDir, 
ProjectBuilderConfiguration config, boolean debugMessages )
         throws ModelInterpolationException
     {
         StringWriter sWriter = new StringWriter();
@@ -144,7 +145,7 @@
         }
 
         String serializedModel = sWriter.toString();
-        serializedModel = interpolateInternal( serializedModel, model, 
context, overrideContext, projectDir, outputDebugMessages );
+        serializedModel = interpolate( serializedModel, model, projectDir, 
config, debugMessages );
 
         StringReader sReader = new StringReader( serializedModel );
 
@@ -179,18 +180,25 @@
      *   <li>If the value is null, get it from the model properties.</li>
      *   <li>
      * @param overrideContext
-     * @param outputDebugMessages
+     * @param debugMessages
      */
-    private String interpolateInternal( String src,
+    public String interpolate( String src,
                                         Model model,
-                                        Map context,
-                                        Map overrideContext,
                                         final File projectDir,
-                                        boolean outputDebugMessages )
+                                        ProjectBuilderConfiguration config,
+                                        boolean debugMessages )
         throws ModelInterpolationException
     {
         Logger logger = getLogger();
 
+        String timestampFormat = DEFAULT_BUILD_TIMESTAMP_FORMAT;
+
+        Properties modelProperties = model.getProperties();
+        if ( modelProperties != null )
+        {
+            timestampFormat = modelProperties.getProperty( 
BUILD_TIMESTAMP_FORMAT_PROPERTY, timestampFormat );
+        }
+
         ValueSource baseModelValueSource1 = new PrefixedObjectValueSource( 
PROJECT_PREFIXES, model, false );
         ValueSource modelValueSource1 = new PathTranslatingValueSource( 
baseModelValueSource1,
                                                                        
TRANSLATED_PATH_EXPRESSIONS,
@@ -218,76 +226,34 @@
 
         // NOTE: Order counts here!
         interpolator.addValueSource( basedirValueSource );
-        interpolator.addValueSource( new MapBasedValueSource( overrideContext 
) );
+        interpolator.addValueSource( new BuildTimestampValueSource( 
config.getBuildStartTime(), timestampFormat ) );
+        interpolator.addValueSource( new MapBasedValueSource( 
config.getExecutionProperties() ) );
         interpolator.addValueSource( modelValueSource1 );
-        interpolator.addValueSource( new PrefixedValueSourceWrapper( new 
MapBasedValueSource( model.getProperties() ), PROJECT_PREFIXES, true ) );
+        interpolator.addValueSource( new PrefixedValueSourceWrapper( new 
MapBasedValueSource( modelProperties ), PROJECT_PREFIXES, true ) );
         interpolator.addValueSource( modelValueSource2 );
-        interpolator.addValueSource( new MapBasedValueSource( context ) );
+        interpolator.addValueSource( new MapBasedValueSource( 
config.getUserProperties() ) );
 
         RecursionInterceptor recursionInterceptor = new 
PrefixAwareRecursionInterceptor( PROJECT_PREFIXES );
 
         String result = src;
-        Matcher matcher = EXPRESSION_PATTERN.matcher( result );
-        while ( matcher.find() )
+        try
         {
-            String wholeExpr = matcher.group( 0 );
-
-            Object value;
-            try
-            {
-                value = interpolator.interpolate( wholeExpr, "", 
recursionInterceptor );
-            }
-            catch( InterpolationException e )
-            {
-                throw new ModelInterpolationException( e.getMessage(), e );
-            }
-
-            if ( value == null || value.equals(  wholeExpr ) )
-            {
-                continue;
-            }
-
-            // FIXME: Does this account for the case where 
${project.build.directory} -> ${build.directory}??
-            if ( value != null )
-            {
-                // if the expression refers to itself, skip it.
-                // replace project. expressions with pom. expressions to 
circumvent self-referencing expressions using
-                // the 2 different model expressions.
-                if ( StringUtils.replace( value.toString(), "${project.", 
"${pom." ).indexOf(
-                    StringUtils.replace( wholeExpr, "${project.", "${pom." ) ) 
> -1 )
-                {
-                    throw new ModelInterpolationException( wholeExpr, 
"Expression value '" + value
-                        + "' references itself in '" + model.getId() + "'." );
-                }
-
-                result = StringUtils.replace( result, wholeExpr, 
value.toString() );
-                // could use:
-                // result = matcher.replaceFirst( stringValue );
-                // but this could result in multiple lookups of stringValue, 
and replaceAll is not correct behaviour
-                matcher.reset( result );
-            }
-
-/*
-        // This is the desired behaviour, however there are too many crappy 
poms in the repo and an issue with the
-        // timing of executing the interpolation
-
-            else
-            {
-                throw new ModelInterpolationException(
-                    "Expression '" + wholeExpr + "' did not evaluate to 
anything in the model" );
-            }
-*/
+            result = interpolator.interpolate( result, "", 
recursionInterceptor );
+        }
+        catch( InterpolationException e )
+        {
+            throw new ModelInterpolationException( e.getMessage(), e );
         }
 
-        if ( outputDebugMessages )
+        if ( debugMessages )
         {
-            List feedback = interpolator.getFeedback();
+            List<?> feedback = interpolator.getFeedback();
             if ( feedback != null && !feedback.isEmpty() )
             {
                 logger.debug( "Maven encountered the following problems during 
initial POM interpolation:" );
 
                 Object last = null;
-                for ( Iterator it = feedback.iterator(); it.hasNext(); )
+                for ( Iterator<?> it = feedback.iterator(); it.hasNext(); )
                 {
                     Object next = it.next();
 

Modified: 
maven/components/trunk/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml
 (original)
+++ 
maven/components/trunk/maven-project/src/main/resources/org/apache/maven/project/pom-4.0.0.xml
 Thu Jun 26 09:34:27 2008
@@ -50,21 +50,21 @@
   </pluginRepositories>
 
   <build>
-    <directory>target</directory>
-    <outputDirectory>target/classes</outputDirectory>
+    <directory>${project.basedir}/target</directory>
+    <outputDirectory>${project.build.directory}/classes</outputDirectory>
     <finalName>${project.artifactId}-${project.version}</finalName>
-    <testOutputDirectory>target/test-classes</testOutputDirectory>
-    <sourceDirectory>src/main/java</sourceDirectory>
-    <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
-    <testSourceDirectory>src/test/java</testSourceDirectory>
+    
<testOutputDirectory>${project.build.directory}/test-classes</testOutputDirectory>
+    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
+    
<scriptSourceDirectory>${project.basedir}/src/main/scripts</scriptSourceDirectory>
+    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
     <resources>
       <resource>
-        <directory>src/main/resources</directory>
+        <directory>${project.basedir}/src/main/resources</directory>
       </resource>
     </resources>
     <testResources>
       <testResource>
-        <directory>src/test/resources</directory>
+        <directory>${project.basedir}/src/test/resources</directory>
       </testResource>
     </testResources>
     <pluginManagement>
@@ -150,7 +150,7 @@
   </build>
 
   <reporting>
-    <outputDirectory>target/site</outputDirectory>
+    <outputDirectory>${project.build.directory}/site</outputDirectory>
   </reporting>
 </project>
   <!-- END SNIPPET: superpom -->

Modified: 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java?rev=671936&r1=671935&r2=671936&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
 (original)
+++ 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/interpolation/RegexBasedModelInterpolatorTest.java
 Thu Jun 26 09:34:27 2008
@@ -26,11 +26,12 @@
 import org.apache.maven.model.Organization;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.Scm;
+import org.apache.maven.project.DefaultProjectBuilderConfiguration;
+import org.apache.maven.project.ProjectBuilderConfiguration;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
@@ -45,6 +46,7 @@
 {
     private Map context;
 
+    @Override
     protected void setUp()
         throws Exception
     {
@@ -66,15 +68,15 @@
         dm.setRepository( repo );
         model.setDistributionManagement( dm );
 
-        Map context = new HashMap();
         String path = "path/to/project";
 
         File basedir = new File( path ).getAbsoluteFile();
 
+        ProjectBuilderConfiguration config = new 
DefaultProjectBuilderConfiguration();
+
         Model out = new RegexBasedModelInterpolator().interpolate( model,
-                                                                   context,
-                                                                   
Collections.EMPTY_MAP,
                                                                    basedir,
+                                                                   config,
                                                                    false );
 
         assertEquals( "http://localhost/"; + basedir.getAbsolutePath() + 
"/target/test-repo",


Reply via email to