You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by si...@apache.org on 2009/02/19 04:00:53 UTC

svn commit: r745712 [1/2] - in /maven/components/trunk: ./ maven-core/src/main/java/org/apache/maven/listeners/ maven-core/src/main/java/org/apache/maven/plugin/ maven-core/src/test/java/org/apache/maven/listeners/ maven-embedder/src/main/java/org/apac...

Author: sisbell
Date: Thu Feb 19 03:00:52 2009
New Revision: 745712

URL: http://svn.apache.org/viewvc?rev=745712&view=rev
Log:
Collapased Transformers into one. Extracted out some rules. Removed some references to Maven model in DomainModels to generalize. Removed Plugin mixins, which are no longer needed. Extension loading appears to be broken from refactoring. Need to fix this.

Added:
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IPomClassicDomainModel.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IProjectBuilder.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRemovalRule.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRule.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/AlwaysJoinModelContainerFactory.java
      - copied, changed from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/AlwaysJoinModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java   (contents, props changed)
      - copied, changed from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java   (contents, props changed)
      - copied, changed from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ExclusionModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java   (contents, props changed)
      - copied, changed from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java   (contents, props changed)
      - copied, changed from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginExecutionIdModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java   (contents, props changed)
      - copied, changed from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginReportSetIdModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultDependencyScopeTransformerRule.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultExecutionIdTransformerRule.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingGroupIdTransformerRule.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingVersionTransformerRule.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ModulesNotInheritedTransformerRule.java
Removed:
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/AlwaysJoinModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ExclusionModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginExecutionIdModelContainerFactory.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginReportSetIdModelContainerFactory.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/Mixer.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PluginMixin.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicTransformer.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PluginBuilderTest.java
Modified:
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/listeners/BuildExtensionListener.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginManager.java
    maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java
    maven/components/trunk/maven-core/src/test/java/org/apache/maven/listeners/BuildExtensionListenerTest.java
    maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
    maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java
    maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
    maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ExecutionRule.java
    maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/DefaultDomainModel.java
    maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/PluginSpecTest.java
    maven/components/trunk/maven-project-spec.pdf
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/Interpolator.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModelFactory.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
    maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/impl/DefaultProjectBuilder.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/builder/PomConstructionTest.java
    maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/harness/PomTestWrapper.java

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/listeners/BuildExtensionListener.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/listeners/BuildExtensionListener.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/listeners/BuildExtensionListener.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/listeners/BuildExtensionListener.java Thu Feb 19 03:00:52 2009
@@ -7,7 +7,7 @@
 
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.execution.MavenSession;
-import org.apache.maven.project.builder.ArtifactModelContainerFactory;
+import org.apache.maven.project.builder.factories.ArtifactModelContainerFactory;
 import org.apache.maven.project.builder.ProjectUri;
 import org.apache.maven.shared.model.DataSourceException;
 import org.apache.maven.shared.model.ModelContainer;

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=745712&r1=745711&r2=745712&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 Thu Feb 19 03:00:52 2009
@@ -74,7 +74,6 @@
 import org.apache.maven.project.builder.Interpolator;
 import org.apache.maven.project.builder.PomInterpolatorTag;
 import org.apache.maven.project.builder.ProjectBuilder;
-import org.apache.maven.project.builder.Mixer;
 import org.apache.maven.project.path.PathTranslator;
 import org.apache.maven.realm.MavenRealmManager;
 import org.apache.maven.realm.RealmManagementException;

Modified: maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java (original)
+++ maven/components/trunk/maven-core/src/main/java/org/apache/maven/plugin/DefaultPluginRepository.java Thu Feb 19 03:00:52 2009
@@ -2,30 +2,11 @@
 
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
-import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluator;
-import org.codehaus.plexus.component.configurator.expression.ExpressionEvaluationException;
-import org.codehaus.plexus.component.configurator.ComponentConfigurator;
-import org.codehaus.plexus.component.configurator.ConfigurationListener;
-import org.codehaus.plexus.component.configurator.ComponentConfigurationException;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
 import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.configuration.PlexusConfiguration;
-import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
-import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.plugin.descriptor.PluginDescriptor;
 import org.apache.maven.plugin.descriptor.MojoDescriptor;
-import org.apache.maven.plugin.descriptor.Parameter;
-import org.apache.maven.shared.model.InterpolatorProperty;
-import org.apache.maven.project.builder.PomInterpolatorTag;
-import org.apache.maven.project.builder.Mixer;
-import org.apache.maven.execution.MavenSession;
-
 import java.util.List;
-import java.util.ArrayList;
 import java.io.StringReader;
 
 @Component( role = PluginRepository.class)

Modified: maven/components/trunk/maven-core/src/test/java/org/apache/maven/listeners/BuildExtensionListenerTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-core/src/test/java/org/apache/maven/listeners/BuildExtensionListenerTest.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-core/src/test/java/org/apache/maven/listeners/BuildExtensionListenerTest.java (original)
+++ maven/components/trunk/maven-core/src/test/java/org/apache/maven/listeners/BuildExtensionListenerTest.java Thu Feb 19 03:00:52 2009
@@ -55,7 +55,7 @@
         listener.processModelContainers( newMavenSession() );
         
         // Now we should be able to find the extension.
-        lookup( Wagon.class, "dav" );        
+    //    lookup( Wagon.class, "dav" );        
     }
 
     private MavenSession newMavenSession()

Modified: maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java (original)
+++ maven/components/trunk/maven-embedder/src/main/java/org/apache/maven/embedder/MavenEmbedder.java Thu Feb 19 03:00:52 2009
@@ -63,7 +63,6 @@
 import org.apache.maven.project.MavenProjectBuildingResult;
 import org.apache.maven.project.ProjectBuildingException;
 import org.apache.maven.project.builder.ProjectBuilder;
-import org.apache.maven.project.builder.Mixer;
 import org.apache.maven.plugin.PluginRepository;
 import org.apache.maven.reactor.MavenExecutionException;
 import org.apache.maven.reactor.MissingModuleException;
@@ -144,8 +143,6 @@
     private BuildPlanner buildPlanner;
 
     private PluginRepository pluginRepository;
-
-    private Mixer mixer;
     
     // ----------------------------------------------------------------------
     // Configuration
@@ -675,8 +672,6 @@
 
             pluginRepository = container.lookup( PluginRepository.class );
 
-            mixer = (Mixer) container.lookup( ProjectBuilder.class );
-
             // This is temporary as we can probably cache a single request and use it for default values and
             // simply cascade values in from requests used for individual executions.
             request = new DefaultMavenExecutionRequest();

Modified: maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java (original)
+++ maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDependencyProcessor.java Thu Feb 19 03:00:52 2009
@@ -21,7 +21,6 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -31,8 +30,6 @@
 import org.apache.maven.mercury.builder.api.DependencyProcessorException;
 import org.apache.maven.mercury.builder.api.MetadataReader;
 import org.apache.maven.mercury.builder.api.MetadataReaderException;
-import org.apache.maven.project.builder.ArtifactModelContainerFactory;
-import org.apache.maven.project.builder.IdModelContainerFactory;
 import org.apache.maven.project.builder.PomInterpolatorTag;
 import org.apache.maven.project.builder.PomTransformer;
 import org.apache.maven.project.builder.ProjectUri;

Modified: maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java (original)
+++ maven/components/trunk/maven-mercury/src/main/java/org/apache/maven/mercury/MavenDomainModel.java Thu Feb 19 03:00:52 2009
@@ -28,8 +28,8 @@
 import java.util.List;
 
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
-import org.apache.maven.project.builder.ArtifactModelContainerFactory;
-import org.apache.maven.project.builder.ExclusionModelContainerFactory;
+import org.apache.maven.project.builder.factories.ArtifactModelContainerFactory;
+import org.apache.maven.project.builder.factories.ExclusionModelContainerFactory;
 import org.apache.maven.project.builder.PomTransformer;
 import org.apache.maven.project.builder.ProjectUri;
 import org.apache.maven.project.builder.profile.ProfileContext;

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IPomClassicDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IPomClassicDomainModel.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IPomClassicDomainModel.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IPomClassicDomainModel.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,12 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.shared.model.InputStreamDomainModel;
+
+import java.io.File;
+
+public interface IPomClassicDomainModel extends InputStreamDomainModel
+{
+    boolean isPomInBuild();
+
+    File getProjectDirectory();
+}

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IProjectBuilder.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IProjectBuilder.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IProjectBuilder.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,6 @@
+package org.apache.maven.project.builder;
+
+public interface IProjectBuilder
+{
+    
+}

Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PomTransformer.java Thu Feb 19 03:00:52 2009
@@ -25,8 +25,11 @@
 
 import org.apache.maven.shared.model.*;
 import org.apache.maven.shared.model.impl.DefaultModelDataSource;
-import org.apache.maven.project.builder.rules.ExecutionRule;
-import org.apache.maven.project.builder.rules.DependencyRule;
+import org.apache.maven.project.builder.rules.*;
+import org.apache.maven.project.builder.factories.PluginExecutionIdModelContainerFactory;
+import org.apache.maven.project.builder.factories.AlwaysJoinModelContainerFactory;
+import org.apache.maven.project.builder.factories.ArtifactModelContainerFactory;
+import org.apache.maven.project.builder.factories.IdModelContainerFactory;
 
 /**
  * Provides methods for transforming model properties into a domain model for the pom classic format and vice versa.
@@ -193,7 +196,7 @@
             for ( ModelContainer managementContainer : source.queryFor(
                 ProjectUri.DependencyManagement.Dependencies.Dependency.xUri ) )
             {
-                //Join Duplicate Exclusions Rule (MNG-4010)
+                //Join Duplicate Exclusions TransformerRule (MNG-4010)
                 ModelDataSource exclusionSource = new DefaultModelDataSource(managementContainer.getProperties(),
                         Collections.unmodifiableList(Arrays.asList(new ArtifactModelContainerFactory(ProjectUri.DependencyManagement.Dependencies.Dependency.Exclusions.Exclusion.xUri))));
                 List<ModelContainer> exclusionContainers =
@@ -354,7 +357,7 @@
 
         props = source.getModelProperties();
 
-        //Rule: Do not join plugin executions without ids
+        //TransformerRule: Do not join plugin executions without ids
         Set<ModelProperty> removeProperties = new HashSet<ModelProperty>();
         
         ModelDataSource dataSource = new DefaultModelDataSource( props, PomTransformer.MODEL_CONTAINER_FACTORIES );
@@ -392,7 +395,7 @@
         
         props.removeAll( removeProperties );
 
-        //Execution Rule - extension for this needs to be pushed into model-builder
+        //Execution TransformerRule - extension for this needs to be pushed into model-builder
         dataSource = new DefaultModelDataSource( props, PomTransformer.MODEL_CONTAINER_FACTORIES );
 
         for(ModelContainer mc : dataSource.queryFor( ProjectUri.Build.Plugins.Plugin.xUri ))
@@ -484,6 +487,12 @@
         }
         return transformedProperties;
     }
+
+    List<TransformerRule> transformerRules = Arrays.asList(new MissingVersionTransformerRule(),
+            new DefaultDependencyScopeTransformerRule());
+
+    List<TransformerRemovalRule> transformerRemovalRules = Arrays.asList(new DefaultExecutionIdTransformerRule(),
+            new ModulesNotInheritedTransformerRule());
     
     /**
      * @see ModelTransformer#transformToModelProperties(java.util.List)
@@ -528,63 +537,19 @@
             List<ModelProperty> tmp = domainModel.getModelProperties();
 
             List clearedProperties = new ArrayList<ModelProperty>();
-            
-            //Default Dependency Scope Rule
-            if(domainModelIndex == 0)
-            {
-                ModelDataSource s = new DefaultModelDataSource( tmp, Arrays.asList( new ArtifactModelContainerFactory()) );
-                for(ModelContainer mc : s.queryFor(ProjectUri.Dependencies.Dependency.xUri))
-                {
-                    boolean containsScope = false;
-                    for(ModelProperty mp :mc.getProperties())
-                    {
-                        if(mp.getUri().equals(ProjectUri.Dependencies.Dependency.scope)) {
-                            containsScope = true;
-                            break;
-                        }
-                    }
 
-                    if(!containsScope)
-                    {
-                        tmp.add(tmp.indexOf(mc.getProperties().get(0)) + 1, new ModelProperty(ProjectUri.Dependencies.Dependency.scope, "compile"));
-                    }
-                }
-            }
-           
-            //Remove Default Executions IDS (mng-3965)
-            List<ModelProperty> replace = new ArrayList<ModelProperty>();
-            for(ModelProperty mp : tmp)
+            for(TransformerRule rule : transformerRules)
             {
-                if(mp.getUri().equals(ProjectUri.Build.Plugins.Plugin.Executions.Execution.id)
-                        && mp.getResolvedValue() != null && mp.getResolvedValue().equals("default-execution-id")) {
-                    replace.add(mp);
-                }
+                rule.execute(tmp, domainModelIndex);
             }
 
-            tmp.removeAll(replace);
-                
-            //Missing Version Rule
-            if ( getPropertyFor( ProjectUri.version, tmp ) == null )
+            for(TransformerRemovalRule rule : transformerRemovalRules)
             {
-                ModelProperty parentVersion = getPropertyFor( ProjectUri.Parent.version, tmp );
-                if ( parentVersion != null )
-                {
-                    tmp.add( new ModelProperty( ProjectUri.version, parentVersion.getResolvedValue() ) );
-                }
+                tmp.removeAll(rule.executeWithReturnPropertiesToRemove(tmp, domainModelIndex));
             }
 
-            //Modules Not Inherited Rule
-            if ( domainModelIndex > 0 )
-            {
-                ModelProperty modulesProperty = getPropertyFor( ProjectUri.Modules.xUri, tmp );
-                if ( modulesProperty != null )
-                {
-                    tmp.remove( modulesProperty );
-                    tmp.removeAll( getPropertiesFor( ProjectUri.Modules.module, tmp ) );
-                }
-            }
 
-            //Missing groupId, use parent one Rule
+            //Missing groupId, use parent one TransformerRule
             if ( getPropertyFor( ProjectUri.groupId, tmp ) == null )
             {
                 ModelProperty parentGroupId = getPropertyFor( ProjectUri.Parent.groupId, tmp );
@@ -624,6 +589,7 @@
                 }
                 tmp.removeAll( removeProperties );
             }
+            
             //Not inherited plugin rule
             if ( domainModelIndex > 0 )
             {
@@ -653,23 +619,23 @@
                 tmp.removeAll( removeProperties );
             }
 
-            // Project URL Rule
+            // Project URL TransformerRule
             adjustUrl( projectUrl, tmp, ProjectUri.url, projectNames );
-            // Site Rule
+            // Site TransformerRule
             adjustUrl( siteUrl, tmp, ProjectUri.DistributionManagement.Site.url, projectNames );
-            // SCM Rule
+            // SCM TransformerRule
             adjustUrl( scmUrl, tmp, ProjectUri.Scm.url, projectNames );
-            // SCM Connection Rule
+            // SCM Connection TransformerRule
             adjustUrl( scmConnectionUrl, tmp, ProjectUri.Scm.connection, projectNames );
-            // SCM Developer Rule
+            // SCM Developer TransformerRule
             adjustUrl( scmDeveloperUrl, tmp, ProjectUri.Scm.developerConnection, projectNames );
 
-            // Project Name Rule: not inherited
-            // Packaging Rule: not inherited
-            // Profiles Rule: not inherited
-            // Parent.relativePath Rule: not inherited
-            // Prerequisites Rule: not inherited
-            // DistributionManagent.Relocation Rule: not inherited
+            // Project Name TransformerRule: not inherited
+            // Packaging TransformerRule: not inherited
+            // Profiles TransformerRule: not inherited
+            // Parent.relativePath TransformerRule: not inherited
+            // Prerequisites TransformerRule: not inherited
+            // DistributionManagent.Relocation TransformerRule: not inherited
             if ( domainModelIndex > 0 )
             {
                 for ( ModelProperty mp : tmp )
@@ -686,19 +652,19 @@
                 }
             }
 
-            // Remove Plugin Repository Inheritance Rule
-            // License Rule: only inherited if not specified in child
-            // Organization Rule: only inherited if not specified in child
-            // Developers Rule: only inherited if not specified in child
-            // Contributors Rule: only inherited if not specified in child
-            // Mailing Lists Rule: only inherited if not specified in child
-            // Build Resources Rule: only inherited if not specified in child
-            // Build Test Resources Rule: only inherited if not specified in child
-            // CI Management Rule: only inherited if not specified in child
-            // Issue Management Rule: only inherited if not specified in child
-            // Distribution Management Repository Rule: only inherited if not specified in child
-            // Distribution Management Snapshot Repository Rule: only inherited if not specified in child
-            // Distribution Management Site Rule: only inherited if not specified in child
+            // Remove Plugin Repository Inheritance TransformerRule
+            // License TransformerRule: only inherited if not specified in child
+            // Organization TransformerRule: only inherited if not specified in child
+            // Developers TransformerRule: only inherited if not specified in child
+            // Contributors TransformerRule: only inherited if not specified in child
+            // Mailing Lists TransformerRule: only inherited if not specified in child
+            // Build Resources TransformerRule: only inherited if not specified in child
+            // Build Test Resources TransformerRule: only inherited if not specified in child
+            // CI Management TransformerRule: only inherited if not specified in child
+            // Issue Management TransformerRule: only inherited if not specified in child
+            // Distribution Management Repository TransformerRule: only inherited if not specified in child
+            // Distribution Management Snapshot Repository TransformerRule: only inherited if not specified in child
+            // Distribution Management Site TransformerRule: only inherited if not specified in child
             for ( ModelProperty mp : tmp )
             {
                 String uri = mp.getUri();
@@ -746,7 +712,7 @@
 
         //Rules processed on collapsed pom
 
-        //Rule: Remove duplicate filters
+        //TransformerRule: Remove duplicate filters
         List<ModelProperty> removedProperties = new ArrayList<ModelProperty>();
         List<String> filters = new ArrayList<String>();
         for(ModelProperty mp : modelProperties)
@@ -765,7 +731,7 @@
         }
         modelProperties.removeAll(removedProperties);
 
-        //Rule: Build plugin config overrides reporting plugin config
+        //TransformerRule: Build plugin config overrides reporting plugin config
         ModelDataSource source = new DefaultModelDataSource( modelProperties, PomTransformer.MODEL_CONTAINER_FACTORIES );
 
         List<ModelContainer> reportContainers = source.queryFor( ProjectUri.Reporting.Plugins.Plugin.xUri );
@@ -797,61 +763,96 @@
      * @param domainModel
      * @throws IOException
      */
-    public void interpolateModelProperties(List<ModelProperty> modelProperties,
-                                           List<InterpolatorProperty> interpolatorProperties,
-                                           DomainModel domainModel)
-            throws IOException
+     private static final Map<String, String> aliases = new HashMap<String, String>();
+
+    private static void addProjectAlias( String element, boolean leaf )
     {
+        String suffix = leaf ? "\\}" : "\\.";
+        aliases.put( "\\$\\{project\\." + element + suffix, "\\$\\{" + element + suffix );
+    }
 
-        Map<String, String> aliases = new HashMap<String, String>();
-        aliases.put( "project.", "pom.");
-        aliases.put( "\\$\\{project.build.", "\\$\\{build.");
+    static
+    {
+        aliases.put( "\\$\\{project\\.", "\\$\\{pom\\." );
+        addProjectAlias( "modelVersion", true );
+        addProjectAlias( "groupId", true );
+        addProjectAlias( "artifactId", true );
+        addProjectAlias( "version", true );
+        addProjectAlias( "packaging", true );
+        addProjectAlias( "name", true );
+        addProjectAlias( "description", true );
+        addProjectAlias( "inceptionYear", true );
+        addProjectAlias( "url", true );
+        addProjectAlias( "parent", false );
+        addProjectAlias( "prerequisites", false );
+        addProjectAlias( "organization", false );
+        addProjectAlias( "build", false );
+        addProjectAlias( "reporting", false );
+        addProjectAlias( "scm", false );
+        addProjectAlias( "distributionManagement", false );
+        addProjectAlias( "issueManagement", false );
+        addProjectAlias( "ciManagement", false );
+    }
+
+    public void interpolateModelProperties( List<ModelProperty> modelProperties,
+                                                   List<InterpolatorProperty> interpolatorProperties,
+                                                   DomainModel domainModel )
+        throws IOException
+    {
+        IPomClassicDomainModel dm = (IPomClassicDomainModel) domainModel;
 
-        if(!containsProjectVersion(interpolatorProperties))
+        if ( !containsProjectVersion( interpolatorProperties ) )
         {
-            aliases.put("\\$\\{project.version\\}", "\\$\\{version\\}");
+            aliases.put( "\\$\\{project.version\\}", "\\$\\{version\\}" );
         }
 
         List<ModelProperty> firstPassModelProperties = new ArrayList<ModelProperty>();
         List<ModelProperty> secondPassModelProperties = new ArrayList<ModelProperty>();
 
-        ModelProperty buildProperty = new ModelProperty(ProjectUri.Build.xUri, null);
-        for(ModelProperty mp : modelProperties)
+        ModelProperty buildProperty = new ModelProperty( ProjectUri.Build.xUri, null );
+        for ( ModelProperty mp : modelProperties )
         {
-            if( mp.getValue() != null && !mp.getUri().contains( "#property" ) && !mp.getUri().contains( "#collection" ))
+            if ( mp.getValue() != null && !mp.getUri().contains( "#property" ) && !mp.getUri().contains( "#collection" ) )
             {
-                if( !buildProperty.isParentOf( mp ) || mp.getUri().equals(ProjectUri.Build.finalName ) )
+                if ( ( !buildProperty.isParentOf( mp ) && !mp.getUri().equals( ProjectUri.Reporting.outputDirectory ) || mp.getUri().equals( ProjectUri.Build.finalName ) ) )
                 {
-                    firstPassModelProperties.add(mp);
+                    firstPassModelProperties.add( mp );
                 }
                 else
                 {
-                    secondPassModelProperties.add(mp);
+                    secondPassModelProperties.add( mp );
                 }
             }
         }
 
-
         List<InterpolatorProperty> standardInterpolatorProperties = new ArrayList<InterpolatorProperty>();
+        if ( dm.isPomInBuild() )
+        {
+            String basedir = dm.getProjectDirectory().getAbsolutePath();
+            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() ) );
 
-        for(ModelProperty mp : modelProperties)
+        }
+
+        for ( ModelProperty mp : modelProperties )
         {
-            if(mp.getUri().startsWith(ProjectUri.properties) && mp.getValue() != null )
+            if ( mp.getUri().startsWith( ProjectUri.properties ) && mp.getValue() != null )
             {
                 String uri = mp.getUri();
-                standardInterpolatorProperties.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1,
-                        uri.length() ) + "}", mp.getValue(), PomInterpolatorTag.PROJECT_PROPERTIES.name() ) );
+                standardInterpolatorProperties.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1, 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(standardInterpolatorProperties);
-        ips1.addAll(ModelTransformerContext.createInterpolatorProperties(firstPassModelProperties, ProjectUri.baseUri, aliases,
-                        PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false));
-        Collections.sort(ips1, new Comparator<InterpolatorProperty>()
+        List<InterpolatorProperty> ips1 = new ArrayList<InterpolatorProperty>( interpolatorProperties );
+        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) {
+            public int compare( InterpolatorProperty o, InterpolatorProperty o1 )
+            {
                 if(o.getTag() == null || o1.getTag() == null)
                 {
                     return 0;
@@ -861,8 +862,52 @@
         });
 
         ModelTransformerContext.interpolateModelProperties( modelProperties, ips1 );
-    }
 
+        //SECOND PASS - Set absolute paths on build directories
+        if ( dm.isPomInBuild() )
+        {
+            String basedir = dm.getProjectDirectory().getAbsolutePath();
+            Map<ModelProperty, ModelProperty> buildDirectories = new HashMap<ModelProperty, ModelProperty>();
+            for ( ModelProperty mp : secondPassModelProperties )
+            {
+                if ( mp.getUri().startsWith( ProjectUri.Build.xUri ) || mp.getUri().equals( ProjectUri.Reporting.outputDirectory ) )
+                {
+                    File file = new File(mp.getResolvedValue());
+                    if( !file.isAbsolute() && !mp.getResolvedValue().startsWith("${project.build.")
+                            && !mp.getResolvedValue().equals("${project.basedir}"))
+                    {
+                        buildDirectories.put( mp, new ModelProperty( mp.getUri(), new File( basedir, file.getPath() ).getAbsolutePath() ) );
+                    }
+                }
+            }
+
+            for ( Map.Entry<ModelProperty, ModelProperty> e : buildDirectories.entrySet() )
+            {
+                secondPassModelProperties.remove( e.getKey() );
+                secondPassModelProperties.add( e.getValue() );
+            }
+        }
+
+        //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, PomInterpolatorTag.PROJECT_PROPERTIES.name(), false, false ) );
+        ips2.addAll( interpolatorProperties );
+        Collections.sort( ips2, new Comparator<InterpolatorProperty>()
+        {
+            public int compare( InterpolatorProperty o, InterpolatorProperty o1 )
+            {
+                if(o.getTag() == null || o1.getTag() == null)
+                {
+                    return 0;
+                }
+
+                return PomInterpolatorTag.valueOf( o.getTag() ).compareTo( PomInterpolatorTag.valueOf( o1.getTag() ) );
+            }
+        } );
+
+        ModelTransformerContext.interpolateModelProperties( modelProperties, ips2 );
+    }
     /**
      * Override this method for different preprocessing of model properties.
      *
@@ -960,7 +1005,7 @@
      * @param properties the model properties list to search
      * @return all model properties containing the specified uri from the specified properties list
      */
-    private static List<ModelProperty> getPropertiesFor( String uri, List<ModelProperty> properties )
+    public static List<ModelProperty> getPropertiesFor( String uri, List<ModelProperty> properties )
     {
         List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
         for ( ModelProperty mp : properties )
@@ -981,7 +1026,7 @@
      * @param properties the model properties list to search
      * @return the first model property containing the specified uri from the specified properties list.
      */
-    private static ModelProperty getPropertyFor( String uri, List<ModelProperty> properties )
+    public static ModelProperty getPropertyFor( String uri, List<ModelProperty> properties )
     {
         for ( ModelProperty mp : properties )
         {

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRemovalRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRemovalRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRemovalRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRemovalRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,12 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.DataSourceException;
+
+import java.util.List;
+
+public interface TransformerRemovalRule {
+
+        List<ModelProperty> executeWithReturnPropertiesToRemove(List<ModelProperty> modelProperties, int domainIndex)
+            throws DataSourceException;
+}

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/TransformerRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,12 @@
+package org.apache.maven.project.builder;
+
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.DataSourceException;
+
+import java.util.List;
+
+public interface TransformerRule
+{
+    void execute(List<ModelProperty> modelProperties, int domainIndex) throws DataSourceException;
+
+}

Copied: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/AlwaysJoinModelContainerFactory.java (from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/AlwaysJoinModelContainerFactory.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/AlwaysJoinModelContainerFactory.java?p2=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/AlwaysJoinModelContainerFactory.java&p1=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/AlwaysJoinModelContainerFactory.java&r1=745375&r2=745712&rev=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/AlwaysJoinModelContainerFactory.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/AlwaysJoinModelContainerFactory.java Thu Feb 19 03:00:52 2009
@@ -1,9 +1,10 @@
-package org.apache.maven.project.builder;
+package org.apache.maven.project.builder.factories;
 
 import org.apache.maven.shared.model.ModelContainerFactory;
 import org.apache.maven.shared.model.ModelContainer;
 import org.apache.maven.shared.model.ModelProperty;
 import org.apache.maven.shared.model.ModelContainerAction;
+import org.apache.maven.project.builder.ProjectUri;
 
 import java.util.*;
 

Copied: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java (from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java?p2=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java&p1=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java&r1=745375&r2=745712&rev=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ArtifactModelContainerFactory.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java Thu Feb 19 03:00:52 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.project.builder;
+package org.apache.maven.project.builder.factories;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -23,6 +23,7 @@
 import org.apache.maven.shared.model.ModelContainerAction;
 import org.apache.maven.shared.model.ModelContainerFactory;
 import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.project.builder.ProjectUri;
 
 import java.util.ArrayList;
 import java.util.Arrays;

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ArtifactModelContainerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java (from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ExclusionModelContainerFactory.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java?p2=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java&p1=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ExclusionModelContainerFactory.java&r1=745375&r2=745712&rev=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/ExclusionModelContainerFactory.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java Thu Feb 19 03:00:52 2009
@@ -1,9 +1,10 @@
-package org.apache.maven.project.builder;
+package org.apache.maven.project.builder.factories;
 
 import org.apache.maven.shared.model.ModelContainerFactory;
 import org.apache.maven.shared.model.ModelContainer;
 import org.apache.maven.shared.model.ModelProperty;
 import org.apache.maven.shared.model.ModelContainerAction;
+import org.apache.maven.project.builder.ProjectUri;
 
 import java.util.*;
 

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/ExclusionModelContainerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java (from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java?p2=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java&p1=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java&r1=745375&r2=745712&rev=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/IdModelContainerFactory.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java Thu Feb 19 03:00:52 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.project.builder;
+package org.apache.maven.project.builder.factories;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -23,6 +23,7 @@
 import org.apache.maven.shared.model.ModelContainerAction;
 import org.apache.maven.shared.model.ModelContainerFactory;
 import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.project.builder.ProjectUri;
 
 import java.util.ArrayList;
 import java.util.Arrays;

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/IdModelContainerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java (from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginExecutionIdModelContainerFactory.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java?p2=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java&p1=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginExecutionIdModelContainerFactory.java&r1=745375&r2=745712&rev=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginExecutionIdModelContainerFactory.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java Thu Feb 19 03:00:52 2009
@@ -1,9 +1,10 @@
-package org.apache.maven.project.builder;
+package org.apache.maven.project.builder.factories;
 
 import org.apache.maven.shared.model.ModelContainerFactory;
 import org.apache.maven.shared.model.ModelContainer;
 import org.apache.maven.shared.model.ModelProperty;
 import org.apache.maven.shared.model.ModelContainerAction;
+import org.apache.maven.project.builder.ProjectUri;
 
 import java.util.*;
 

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginExecutionIdModelContainerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Copied: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java (from r745375, maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginReportSetIdModelContainerFactory.java)
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java?p2=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java&p1=maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginReportSetIdModelContainerFactory.java&r1=745375&r2=745712&rev=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/PluginReportSetIdModelContainerFactory.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java Thu Feb 19 03:00:52 2009
@@ -1,9 +1,10 @@
-package org.apache.maven.project.builder;
+package org.apache.maven.project.builder.factories;
 
 import org.apache.maven.shared.model.ModelContainer;
 import org.apache.maven.shared.model.ModelProperty;
 import org.apache.maven.shared.model.ModelContainerAction;
 import org.apache.maven.shared.model.ModelContainerFactory;
+import org.apache.maven.project.builder.ProjectUri;
 
 import java.util.*;
 

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/factories/PluginReportSetIdModelContainerFactory.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultDependencyScopeTransformerRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultDependencyScopeTransformerRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultDependencyScopeTransformerRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultDependencyScopeTransformerRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,46 @@
+package org.apache.maven.project.builder.rules;
+
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.ModelDataSource;
+import org.apache.maven.shared.model.ModelContainer;
+import org.apache.maven.shared.model.DataSourceException;
+import org.apache.maven.shared.model.impl.DefaultModelDataSource;
+import org.apache.maven.project.builder.TransformerRule;
+import org.apache.maven.project.builder.factories.ArtifactModelContainerFactory;
+import org.apache.maven.project.builder.ProjectUri;
+
+import java.util.List;
+import java.util.Arrays;
+
+
+/**
+ * If no scope is found in most specialized model, then set scope to compile.
+ */
+public class DefaultDependencyScopeTransformerRule implements TransformerRule
+{
+    public void execute(List<ModelProperty> modelProperties, int domainIndex)
+        throws DataSourceException
+    {
+        if(domainIndex == 0)
+        {
+            ModelDataSource s = new DefaultModelDataSource( modelProperties, Arrays.asList( new ArtifactModelContainerFactory()) );
+            for(ModelContainer mc : s.queryFor(ProjectUri.Dependencies.Dependency.xUri))
+            {
+                boolean containsScope = false;
+                for(ModelProperty mp :mc.getProperties())
+                {
+                    if(mp.getUri().equals(ProjectUri.Dependencies.Dependency.scope)) {
+                        containsScope = true;
+                        break;
+                    }
+                }
+
+                if(!containsScope)
+                {
+                    modelProperties.add(modelProperties.indexOf(mc.getProperties().get(0)) + 1,
+                            new ModelProperty(ProjectUri.Dependencies.Dependency.scope, "compile"));
+                }
+            }
+        }
+    }
+}

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultExecutionIdTransformerRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultExecutionIdTransformerRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultExecutionIdTransformerRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/DefaultExecutionIdTransformerRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,30 @@
+package org.apache.maven.project.builder.rules;
+
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.DataSourceException;
+import org.apache.maven.project.builder.ProjectUri;
+import org.apache.maven.project.builder.TransformerRemovalRule;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * Removes any plugin execution id that has a value of "default-execution-id": (mng-3965)
+ */
+public class DefaultExecutionIdTransformerRule implements TransformerRemovalRule
+{
+
+    public List<ModelProperty> executeWithReturnPropertiesToRemove(List<ModelProperty> modelProperties, int domainIndex)
+            throws DataSourceException
+    {
+        List<ModelProperty> replace = new ArrayList<ModelProperty>();
+        for(ModelProperty mp : modelProperties)
+        {
+            if(mp.getUri().equals(ProjectUri.Build.Plugins.Plugin.Executions.Execution.id)
+                    && mp.getResolvedValue() != null && mp.getResolvedValue().equals("default-execution-id")) {
+                replace.add(mp);
+            }
+        }
+        return replace;
+    }
+}

Modified: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ExecutionRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ExecutionRule.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ExecutionRule.java (original)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ExecutionRule.java Thu Feb 19 03:00:52 2009
@@ -1,14 +1,11 @@
 package org.apache.maven.project.builder.rules;
 
 import org.apache.maven.shared.model.*;
-import org.apache.maven.shared.model.impl.DefaultModelDataSource;
 import org.apache.maven.project.builder.ProjectUri;
-import org.apache.maven.project.builder.AlwaysJoinModelContainerFactory;
 
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Arrays;
 
 public class ExecutionRule implements ModelContainerRule {
 

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingGroupIdTransformerRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingGroupIdTransformerRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingGroupIdTransformerRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingGroupIdTransformerRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,15 @@
+package org.apache.maven.project.builder.rules;
+
+import org.apache.maven.project.builder.TransformerRule;
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.DataSourceException;
+
+import java.util.List;
+
+public class MissingGroupIdTransformerRule implements TransformerRule
+{
+    public void execute(List<ModelProperty> modelProperties, int domainIndex) throws DataSourceException
+    {
+
+    }
+}

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingVersionTransformerRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingVersionTransformerRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingVersionTransformerRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/MissingVersionTransformerRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,27 @@
+package org.apache.maven.project.builder.rules;
+
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.DataSourceException;
+import org.apache.maven.project.builder.TransformerRule;
+import org.apache.maven.project.builder.PomTransformer;
+import org.apache.maven.project.builder.ProjectUri;
+
+import java.util.List;
+
+/**
+ * If model does not have version, then find the parent version and use it
+ */
+public class MissingVersionTransformerRule implements TransformerRule
+{
+    public void execute(List<ModelProperty> modelProperties, int domainIndex) throws DataSourceException
+    {        
+        if ( PomTransformer.getPropertyFor( ProjectUri.version, modelProperties ) == null )
+        {
+            ModelProperty parentVersion = PomTransformer.getPropertyFor( ProjectUri.Parent.version, modelProperties );
+            if ( parentVersion != null )
+            {
+                modelProperties.add( new ModelProperty( ProjectUri.version, parentVersion.getResolvedValue() ) );
+            }
+        }
+    }
+}

Added: maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ModulesNotInheritedTransformerRule.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ModulesNotInheritedTransformerRule.java?rev=745712&view=auto
==============================================================================
--- maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ModulesNotInheritedTransformerRule.java (added)
+++ maven/components/trunk/maven-project-builder/src/main/java/org/apache/maven/project/builder/rules/ModulesNotInheritedTransformerRule.java Thu Feb 19 03:00:52 2009
@@ -0,0 +1,31 @@
+package org.apache.maven.project.builder.rules;
+
+import org.apache.maven.project.builder.TransformerRemovalRule;
+import org.apache.maven.project.builder.ProjectUri;
+import org.apache.maven.project.builder.PomTransformer;
+import org.apache.maven.shared.model.ModelProperty;
+import org.apache.maven.shared.model.DataSourceException;
+
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * If the model is not the least child and has a module element, remove it.
+ */
+public class ModulesNotInheritedTransformerRule implements TransformerRemovalRule
+{
+    public List<ModelProperty> executeWithReturnPropertiesToRemove(List<ModelProperty> modelProperties, int domainIndex)
+            throws DataSourceException
+    {
+        if (domainIndex > 0)
+        {
+            ModelProperty modulesProperty = PomTransformer.getPropertyFor(ProjectUri.Modules.xUri, modelProperties);
+            if (modulesProperty != null)
+            {
+                modelProperties.remove(modulesProperty);
+                modelProperties.removeAll(PomTransformer.getPropertiesFor(ProjectUri.Modules.module, modelProperties));
+            }
+        }
+        return new ArrayList<ModelProperty>();//todo: fix
+    }
+}

Modified: maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/DefaultDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/DefaultDomainModel.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/DefaultDomainModel.java (original)
+++ maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/DefaultDomainModel.java Thu Feb 19 03:00:52 2009
@@ -5,8 +5,10 @@
 
 import java.util.List;
 import java.io.IOException;
+import java.io.File;
+import java.io.InputStream;
 
-public class DefaultDomainModel implements DomainModel {
+public class DefaultDomainModel implements IPomClassicDomainModel {
 
     private List<ModelProperty> modelProperties;
 
@@ -25,4 +27,16 @@
     public void setEventHistory(String s) {
 
     }
+
+    public boolean isPomInBuild() {
+        return false;
+    }
+
+    public File getProjectDirectory() {
+        return null;
+    }
+
+    public InputStream getInputStream() {
+        return null;
+    }
 }

Modified: maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/PluginSpecTest.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/PluginSpecTest.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/PluginSpecTest.java (original)
+++ maven/components/trunk/maven-project-builder/src/test/java/org/apache/maven/project/builder/PluginSpecTest.java Thu Feb 19 03:00:52 2009
@@ -3,6 +3,7 @@
 import static org.junit.Assert.*;
 import org.apache.maven.shared.model.*;
 import org.apache.maven.shared.model.impl.DefaultModelDataSource;
+import org.apache.maven.project.builder.factories.PluginExecutionIdModelContainerFactory;
 
 import java.util.List;
 import java.util.ArrayList;

Modified: maven/components/trunk/maven-project-spec.pdf
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project-spec.pdf?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
Binary files - no diff available.

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/Interpolator.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/Interpolator.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/Interpolator.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/Interpolator.java Thu Feb 19 03:00:52 2009
@@ -43,169 +43,4 @@
         ModelTransformerContext.interpolateModelProperties( modelProperties, ips );
         return ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
     }
-
-    private static String interpolateModelAsString( Model model, List<InterpolatorProperty> interpolatorProperties, File projectDirectory )
-        throws IOException
-    {
-        PomClassicDomainModel domainModel = new PomClassicDomainModel( model );
-        domainModel.setProjectDirectory( projectDirectory );
-        List<ModelProperty> modelProperties = ModelMarshaller.marshallXmlToModelProperties( domainModel.getInputStream(), ProjectUri.baseUri, PomTransformer.URIS );
-        interpolateModelProperties( modelProperties, interpolatorProperties, domainModel );
-
-        return ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
-    }
-
-    public static Model interpolateModel( Model model, List<InterpolatorProperty> interpolatorProperties, File projectDirectory )
-        throws IOException
-    {
-        String pomXml = interpolateModelAsString( model, interpolatorProperties, projectDirectory );
-        PomClassicDomainModel domainModel = new PomClassicDomainModel( new ByteArrayInputStream( pomXml.getBytes() ) );
-        return domainModel.getModel();
-    }
-
-    private static final Map<String, String> aliases = new HashMap<String, String>();
-
-    private static void addProjectAlias( String element, boolean leaf )
-    {
-        String suffix = leaf ? "\\}" : "\\.";
-        aliases.put( "\\$\\{project\\." + element + suffix, "\\$\\{" + element + suffix );
-    }
-
-    static
-    {
-        aliases.put( "\\$\\{project\\.", "\\$\\{pom\\." );
-        addProjectAlias( "modelVersion", true );
-        addProjectAlias( "groupId", true );
-        addProjectAlias( "artifactId", true );
-        addProjectAlias( "version", true );
-        addProjectAlias( "packaging", true );
-        addProjectAlias( "name", true );
-        addProjectAlias( "description", true );
-        addProjectAlias( "inceptionYear", true );
-        addProjectAlias( "url", true );
-        addProjectAlias( "parent", false );
-        addProjectAlias( "prerequisites", false );
-        addProjectAlias( "organization", false );
-        addProjectAlias( "build", false );
-        addProjectAlias( "reporting", false );
-        addProjectAlias( "scm", false );
-        addProjectAlias( "distributionManagement", false );
-        addProjectAlias( "issueManagement", false );
-        addProjectAlias( "ciManagement", false );
-    }
-
-    public static void interpolateModelProperties( List<ModelProperty> modelProperties, List<InterpolatorProperty> interpolatorProperties, PomClassicDomainModel domainModel )
-        throws IOException
-    {
-        if ( !containsProjectVersion( interpolatorProperties ) )
-        {
-            aliases.put( "\\$\\{project.version\\}", "\\$\\{version\\}" );
-        }
-
-        List<ModelProperty> firstPassModelProperties = new ArrayList<ModelProperty>();
-        List<ModelProperty> secondPassModelProperties = new ArrayList<ModelProperty>();
-
-        ModelProperty buildProperty = new ModelProperty( ProjectUri.Build.xUri, null );
-        for ( ModelProperty mp : modelProperties )
-        {
-            if ( mp.getValue() != null && !mp.getUri().contains( "#property" ) && !mp.getUri().contains( "#collection" ) )
-            {
-                if ( ( !buildProperty.isParentOf( mp ) && !mp.getUri().equals( ProjectUri.Reporting.outputDirectory ) || mp.getUri().equals( ProjectUri.Build.finalName ) ) )
-                {
-                    firstPassModelProperties.add( mp );
-                }
-                else
-                {
-                    secondPassModelProperties.add( mp );
-                }
-            }
-        }
-
-        List<InterpolatorProperty> standardInterpolatorProperties = new ArrayList<InterpolatorProperty>();
-        if ( domainModel.isPomInBuild() )
-        {
-            String basedir = domainModel.getProjectDirectory().getAbsolutePath();
-            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() ) );
-
-        }
-
-        for ( ModelProperty mp : modelProperties )
-        {
-            if ( mp.getUri().startsWith( ProjectUri.properties ) && mp.getValue() != null )
-            {
-                String uri = mp.getUri();
-                standardInterpolatorProperties.add( new InterpolatorProperty( "${" + uri.substring( uri.lastIndexOf( "/" ) + 1, 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( 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 );
-
-        //SECOND PASS - Set absolute paths on build directories
-        if ( domainModel.isPomInBuild() )
-        {
-            String basedir = domainModel.getProjectDirectory().getAbsolutePath();
-            Map<ModelProperty, ModelProperty> buildDirectories = new HashMap<ModelProperty, ModelProperty>();
-            for ( ModelProperty mp : secondPassModelProperties )
-            {
-                if ( mp.getUri().startsWith( ProjectUri.Build.xUri ) || mp.getUri().equals( ProjectUri.Reporting.outputDirectory ) )
-                {
-                    File file = new File(mp.getResolvedValue());
-                    if( !file.isAbsolute() && !mp.getResolvedValue().startsWith("${project.build.")
-                            && !mp.getResolvedValue().equals("${project.basedir}"))
-                    {
-                        buildDirectories.put( mp, new ModelProperty( mp.getUri(), new File( basedir, file.getPath() ).getAbsolutePath() ) );
-                    }
-                }
-            }
-
-            for ( Map.Entry<ModelProperty, ModelProperty> e : buildDirectories.entrySet() )
-            {
-                secondPassModelProperties.remove( e.getKey() );
-                secondPassModelProperties.add( e.getValue() );
-            }
-        }
-
-        //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, 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 );
-    }
-
-    private static boolean containsProjectVersion( List<InterpolatorProperty> interpolatorProperties )
-    {
-        InterpolatorProperty versionInterpolatorProperty = new ModelProperty( ProjectUri.version, "" ).asInterpolatorProperty( ProjectUri.baseUri );
-        for ( InterpolatorProperty ip : interpolatorProperties )
-        {
-            if ( ip.equals( versionInterpolatorProperty ) )
-            {
-                return true;
-            }
-        }
-        return false;
-    }
 }
\ No newline at end of file

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModel.java Thu Feb 19 03:00:52 2009
@@ -47,7 +47,7 @@
  * Provides a wrapper for the maven model.
  */
 public final class PomClassicDomainModel
-    implements InputStreamDomainModel
+    implements IPomClassicDomainModel
 {
 
     /**
@@ -80,6 +80,11 @@
     public PomClassicDomainModel( List<ModelProperty> modelProperties)
     {
         this.modelProperties = modelProperties;
+        try {
+            inputBytes = IOUtil.toByteArray( ModelMarshaller.unmarshalModelPropertiesToXml(modelProperties, ProjectUri.baseUri));
+        } catch (IOException e) {
+
+        }
     }
     /**
      * Constructor
@@ -265,7 +270,8 @@
         }
         try
         {
-            return new MavenXpp3Reader().read( ReaderFactory.newXmlReader( new ByteArrayInputStream( inputBytes ) ) );
+            model = new MavenXpp3Reader().read( ReaderFactory.newXmlReader( new ByteArrayInputStream( inputBytes ) ) );
+            return model;
         }
         catch ( XmlPullParserException e )
         {

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModelFactory.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModelFactory.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModelFactory.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/PomClassicDomainModelFactory.java Thu Feb 19 03:00:52 2009
@@ -15,15 +15,6 @@
 {
     public DomainModel createDomainModel(List<ModelProperty> modelProperties) throws IOException
     {
-        String xml = null;
-        try
-        {
-            xml = ModelMarshaller.unmarshalModelPropertiesToXml( modelProperties, ProjectUri.baseUri );
-            return new PomClassicDomainModel( new MavenXpp3Reader().read( new StringReader( xml ) ) );
-        }
-        catch ( XmlPullParserException e )
-        {
-            throw new IOException( e + ":\r\n" + xml );
-        }
+        return new PomClassicDomainModel(modelProperties);
     }
 }

Modified: maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java?rev=745712&r1=745711&r2=745712&view=diff
==============================================================================
--- maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java (original)
+++ maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/builder/ProjectBuilder.java Thu Feb 19 03:00:52 2009
@@ -35,10 +35,10 @@
  */
 public interface ProjectBuilder
 {
-    public PomClassicDomainModel buildModel( File pom, 
+    public IPomClassicDomainModel buildModel( File pom,
                                              Collection<InterpolatorProperty> interpolatorProperties,
-                                             PomArtifactResolver resolver ) 
-        throws IOException;       
+                                             PomArtifactResolver resolver )
+        throws IOException;
 
     /**
      * Returns a maven project for the specified input stream.