Author: jdcasey
Date: Wed Aug 10 12:21:34 2005
New Revision: 231294

URL: http://svn.apache.org/viewcvs?rev=231294&view=rev
Log:
Resolving: MNG-684

o Split profile injection out into its own component away from the defaults 
assembler
o Moved code common to the defaults assembler and the profile injector into 
ModelUtils
o Removed the profile-related method from ModelIntheritanceAssembler
o added it0048 to test that profile values will override POM values.


Added:
    maven/components/trunk/maven-core-it/it0048/
    maven/components/trunk/maven-core-it/it0048/expected-results.txt   (with 
props)
    maven/components/trunk/maven-core-it/it0048/goals.txt   (with props)
    maven/components/trunk/maven-core-it/it0048/pom.xml   (with props)
    maven/components/trunk/maven-core-it/it0048/src/
    maven/components/trunk/maven-core-it/it0048/src/main/
    maven/components/trunk/maven-core-it/it0048/src/main/java/
    maven/components/trunk/maven-core-it/it0048/src/main/java/org/
    maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/
    maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/
    
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/
    
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java
   (with props)
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
   (with props)
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/ProfileInjector.java
   (with props)
Modified:
    
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/ModelUtils.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
    
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml

Added: maven/components/trunk/maven-core-it/it0048/expected-results.txt
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0048/expected-results.txt?rev=231294&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0048/expected-results.txt (added)
+++ maven/components/trunk/maven-core-it/it0048/expected-results.txt Wed Aug 10 
12:21:34 2005
@@ -0,0 +1 @@
+target/replacedPluginItem.txt

Propchange: maven/components/trunk/maven-core-it/it0048/expected-results.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0048/expected-results.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0048/goals.txt
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0048/goals.txt?rev=231294&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0048/goals.txt (added)
+++ maven/components/trunk/maven-core-it/it0048/goals.txt Wed Aug 10 12:21:34 
2005
@@ -0,0 +1 @@
+core-it:touch
\ No newline at end of file

Propchange: maven/components/trunk/maven-core-it/it0048/goals.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0048/goals.txt
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/components/trunk/maven-core-it/it0048/pom.xml
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0048/pom.xml?rev=231294&view=auto
==============================================================================
--- maven/components/trunk/maven-core-it/it0048/pom.xml (added)
+++ maven/components/trunk/maven-core-it/it0048/pom.xml Wed Aug 10 12:21:34 2005
@@ -0,0 +1,53 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven</groupId>
+  <artifactId>maven-it0023</artifactId>
+  <version>1.0-SNAPSHOT</version>
+  
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-core-it-plugin</artifactId>
+        <version>1.0-SNAPSHOT</version>
+        <configuration>
+          <pluginItem>pluginItem.txt</pluginItem>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+  <pluginRepositories>
+    <pluginRepository>
+      <id>snapshots</id>
+      <name>Maven Central Plugins Development Repository</name>
+      <url>http://snapshots.maven.codehaus.org/maven2/plugins</url>
+    </pluginRepository>
+  </pluginRepositories>
+
+  <profiles>
+    <profile>
+      <id>test-profile</id>
+      
+      <activation>
+        <property>
+          <!-- always active... -->
+          <name>java.version</name>
+        </property>
+      </activation>
+      
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-core-it-plugin</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <configuration>
+              <pluginItem>replacedPluginItem.txt</pluginItem>
+            </configuration>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+
+</project>

Propchange: maven/components/trunk/maven-core-it/it0048/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/components/trunk/maven-core-it/it0048/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: 
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java?rev=231294&view=auto
==============================================================================
--- 
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java
 (added)
+++ 
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java
 Wed Aug 10 12:21:34 2005
@@ -0,0 +1,16 @@
+package org.apache.maven.it0023;
+
+public class Person
+{
+    private String name;
+    
+    public void setName( String name )
+    {
+        this.name = name;
+    }
+    
+    public String getName()
+    {
+        return name;
+    }
+}

Propchange: 
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/components/trunk/maven-core-it/it0048/src/main/java/org/apache/maven/it0023/Person.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=231294&r1=231293&r2=231294&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
 Wed Aug 10 12:21:34 2005
@@ -43,6 +43,7 @@
 import org.apache.maven.profiles.activation.ProfileActivationCalculator;
 import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
 import org.apache.maven.project.injection.ModelDefaultsInjector;
+import org.apache.maven.project.injection.ProfileInjector;
 import org.apache.maven.project.interpolation.ModelInterpolationException;
 import org.apache.maven.project.interpolation.ModelInterpolator;
 import org.apache.maven.project.path.PathTranslator;
@@ -96,6 +97,8 @@
     private ArtifactFactory artifactFactory;
 
     private ModelInheritanceAssembler modelInheritanceAssembler;
+    
+    private ProfileInjector profileInjector;
 
     private ModelValidator validator;
 
@@ -481,7 +484,7 @@
         {
             Profile profile = (Profile) it.next();
 
-            modelInheritanceAssembler.mergeProfileWithModel( model, profile );
+            profileInjector.inject( profile, model );
 
             profileProperties.putAll( profile.getProperties() );
         }

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java?rev=231294&r1=231293&r2=231294&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/ModelUtils.java
 Wed Aug 10 12:21:34 2005
@@ -16,16 +16,27 @@
  * limitations under the License.
  */
 
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.Goal;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.ModelBase;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.PluginContainer;
 import org.apache.maven.model.PluginExecution;
+import org.apache.maven.model.PluginManagement;
+import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.ReportSet;
+import org.apache.maven.model.Reporting;
+import org.apache.maven.model.Repository;
 import org.apache.maven.project.inheritance.DefaultModelInheritanceAssembler;
 import org.apache.maven.project.inheritance.ModelInheritanceAssembler;
+import org.codehaus.plexus.util.StringUtils;
 import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -266,6 +277,310 @@
         child.setConfiguration( childConfiguration );
     }
 
+    public static void mergeModelBases( ModelBase dominant, ModelBase 
recessive )
+    {
+        mergeDependencies( dominant, recessive );
+        
+        dominant.setRepositories( mergeRepositoryLists( 
dominant.getRepositories(), recessive.getRepositories() ) );
+        dominant.setPluginRepositories( mergeRepositoryLists( 
dominant.getPluginRepositories(), recessive.getPluginRepositories() ) );
+        
+        mergeReporting( dominant, recessive );
+        
+        mergeDependencyManagementSections( dominant, recessive );
+    }
+    
+    private static List mergeRepositoryLists( List dominantRepositories, List 
recessiveRepositories )
+    {
+        List repositories = new ArrayList();
+        
+        for ( Iterator it = dominantRepositories.iterator(); it.hasNext(); )
+        {
+            Repository repository = (Repository) it.next();
+            
+            repositories.add( repository );
+        }
+        
+        for ( Iterator it = recessiveRepositories.iterator(); it.hasNext(); )
+        {
+            Repository repository = (Repository) it.next();
+            
+            if ( !repositories.contains( repository ) )
+            {
+                repositories.add( repository );
+            }
+        }
+        
+        return repositories;
+    }
+
+    private static void mergeDependencies( ModelBase dominant, ModelBase 
recessive )
+    {
+        Map depsMap = new HashMap();
+        
+        List deps = recessive.getDependencies();
+        
+        if ( deps != null )
+        {
+            for ( Iterator it = deps.iterator(); it.hasNext(); )
+            {
+                Dependency dependency = (Dependency) it.next();
+                depsMap.put( dependency.getManagementKey(), dependency );
+            }
+        }
+        
+        deps = dominant.getDependencies();
+        
+        if ( deps != null )
+        {
+            for ( Iterator it = deps.iterator(); it.hasNext(); )
+            {
+                Dependency dependency = (Dependency) it.next();
+                depsMap.put( dependency.getManagementKey(), dependency );
+            }
+        }
+        
+        dominant.setDependencies( new ArrayList( depsMap.values() ) );
+    }
+
+    public static void mergeReporting( ModelBase dominant, ModelBase recessive 
)
+    {
+        // Reports :: aggregate
+        Reporting dominantReporting = dominant.getReporting();
+        Reporting modelReporting = recessive.getReporting();
+
+        if ( dominantReporting != null && modelReporting != null )
+        {
+            if ( StringUtils.isEmpty( dominantReporting.getOutputDirectory() ) 
)
+            {
+                dominantReporting.setOutputDirectory( 
modelReporting.getOutputDirectory() );
+            }
+
+            Map mergedReportPlugins = new HashMap();
+
+            Map dominantReportersByKey = 
dominantReporting.getReportPluginsAsMap();
+
+            List parentReportPlugins = modelReporting.getPlugins();
+
+            if ( parentReportPlugins != null )
+            {
+                for ( Iterator it = parentReportPlugins.iterator(); 
it.hasNext(); )
+                {
+                    ReportPlugin recessiveReportPlugin = (ReportPlugin) 
it.next();
+
+                    String inherited = recessiveReportPlugin.getInherited();
+
+                    if ( StringUtils.isEmpty( inherited ) || Boolean.valueOf( 
inherited ).booleanValue() )
+                    {
+                        ReportPlugin dominantReportPlugin = (ReportPlugin) 
dominantReportersByKey.get(
+                            recessiveReportPlugin.getKey() );
+
+                        ReportPlugin mergedReportPlugin = 
recessiveReportPlugin;
+
+                        if ( dominantReportPlugin != null )
+                        {
+                            mergedReportPlugin = dominantReportPlugin;
+
+                            mergeReportPlugins( dominantReportPlugin, 
recessiveReportPlugin );
+                        }
+                        else if ( StringUtils.isEmpty( inherited ) )
+                        {
+                            mergedReportPlugin.unsetInheritanceApplied();
+                        }
+
+                        mergedReportPlugins.put( mergedReportPlugin.getKey(), 
mergedReportPlugin );
+                    }
+                }
+            }
+
+            for ( Iterator it = dominantReportersByKey.entrySet().iterator(); 
it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+
+                String key = (String) entry.getKey();
+
+                if ( !mergedReportPlugins.containsKey( key ) )
+                {
+                    mergedReportPlugins.put( key, entry.getValue() );
+                }
+            }
+
+            dominantReporting.setPlugins( new ArrayList( 
mergedReportPlugins.values() ) );
+
+            dominantReporting.flushReportPluginMap();
+        }
+    }
+
+    public static void mergeDependencyManagementSections( ModelBase dominant, 
ModelBase recessive )
+    {
+        DependencyManagement recessiveDepMgmt = 
recessive.getDependencyManagement();
+
+        DependencyManagement dominantDepMgmt = 
dominant.getDependencyManagement();
+
+        if ( recessiveDepMgmt != null )
+        {
+            if ( dominantDepMgmt == null )
+            {
+                dominant.setDependencyManagement( recessiveDepMgmt );
+            }
+            else
+            {
+                List dominantDeps = dominantDepMgmt.getDependencies();
+
+                Map mappedDominantDeps = new TreeMap();
+                for ( Iterator it = dominantDeps.iterator(); it.hasNext(); )
+                {
+                    Dependency dep = (Dependency) it.next();
+                    mappedDominantDeps.put( dep.getManagementKey(), dep );
+                }
+
+                for ( Iterator it = 
recessiveDepMgmt.getDependencies().iterator(); it.hasNext(); )
+                {
+                    Dependency dep = (Dependency) it.next();
+                    if ( !mappedDominantDeps.containsKey( 
dep.getManagementKey() ) )
+                    {
+                        dominantDepMgmt.addDependency( dep );
+                    }
+                }
+            }
+        }
+    }
+
+    public static void mergeReportPlugins( ReportPlugin dominant, ReportPlugin 
recessive )
+    {
+        if ( StringUtils.isEmpty( dominant.getVersion() ) )
+        {
+            dominant.setVersion( recessive.getVersion() );
+        }
+
+        Xpp3Dom dominantConfig = (Xpp3Dom) dominant.getConfiguration();
+        Xpp3Dom recessiveConfig = (Xpp3Dom) recessive.getConfiguration();
+
+        dominant.setConfiguration( Xpp3Dom.mergeXpp3Dom( dominantConfig, 
recessiveConfig ) );
+
+        Map mergedReportSets = new HashMap();
+
+        Map dominantReportSetsById = dominant.getReportSetsAsMap();
+
+        for ( Iterator it = recessive.getReportSets().iterator(); 
it.hasNext(); )
+        {
+            ReportSet recessiveReportSet = (ReportSet) it.next();
+
+            String inherited = recessiveReportSet.getInherited();
+
+            if ( StringUtils.isEmpty( inherited ) || Boolean.valueOf( 
inherited ).booleanValue() )
+            {
+                ReportSet dominantReportSet = (ReportSet) 
dominantReportSetsById.get( recessiveReportSet.getId() );
+
+                ReportSet merged = recessiveReportSet;
+
+                if ( dominantReportSet != null )
+                {
+                    merged = dominantReportSet;
+
+                    Xpp3Dom recessiveRSConfig = (Xpp3Dom) 
recessiveReportSet.getConfiguration();
+                    Xpp3Dom mergedRSConfig = (Xpp3Dom) 
merged.getConfiguration();
+
+                    merged.setConfiguration( Xpp3Dom.mergeXpp3Dom( 
mergedRSConfig, recessiveRSConfig ) );
+
+                    List mergedReports = merged.getReports();
+
+                    if ( mergedReports == null )
+                    {
+                        mergedReports = new ArrayList();
+
+                        merged.setReports( mergedReports );
+                    }
+
+                    List recessiveRSReports = recessiveReportSet.getReports();
+
+                    if ( recessiveRSReports != null )
+                    {
+                        for ( Iterator reportIterator = 
recessiveRSReports.iterator(); reportIterator.hasNext(); )
+                        {
+                            String report = (String) reportIterator.next();
+
+                            if ( !mergedReports.contains( report ) )
+                            {
+                                mergedReports.add( report );
+                            }
+                        }
+                    }
+                }
+                else if ( StringUtils.isEmpty( inherited ) )
+                {
+                    merged.unsetInheritanceApplied();
+                }
+
+                mergedReportSets.put( merged.getId(), merged );
+            }
+        }
+
+        for ( Iterator rsIterator = 
dominantReportSetsById.entrySet().iterator(); rsIterator.hasNext(); )
+        {
+            Map.Entry entry = (Map.Entry) rsIterator.next();
+
+            String key = (String) entry.getKey();
+
+            if ( !mergedReportSets.containsKey( key ) )
+            {
+                mergedReportSets.put( key, entry.getValue() );
+            }
+        }
+
+        dominant.setReportSets( new ArrayList( mergedReportSets.values() ) );
+
+        dominant.flushReportSetMap();
+    }
+
+    public static void mergeBuildBases( BuildBase dominant, BuildBase 
recessive )
+    {
+        // NOTE: This assumes that the dominant build is not null.
+        //If it is null, the action taken should have been external to this 
method.
+        
+        // if the parent build is null, obviously we cannot inherit from it...
+        if ( recessive != null )
+        {
+            if ( dominant.getDefaultGoal() == null )
+            {
+                dominant.setDefaultGoal( recessive.getDefaultGoal() );
+            }
+
+            if ( dominant.getFinalName() == null )
+            {
+                dominant.setFinalName( recessive.getFinalName() );
+            }
+
+            List resources = dominant.getResources();
+            if ( resources == null || resources.isEmpty() )
+            {
+                dominant.setResources( recessive.getResources() );
+            }
+
+            resources = dominant.getTestResources();
+            if ( resources == null || resources.isEmpty() )
+            {
+                dominant.setTestResources( recessive.getTestResources() );
+            }
+
+            // Plugins are aggregated if Plugin.inherit != false
+            ModelUtils.mergePluginLists( dominant, recessive, true );
+
+            // Plugin management :: aggregate
+            PluginManagement dominantPM = dominant.getPluginManagement();
+            PluginManagement recessivePM = recessive.getPluginManagement();
+
+            if ( dominantPM == null && recessivePM != null )
+            {
+                dominant.setPluginManagement( recessivePM );
+            }
+            else
+            {
+                ModelUtils.mergePluginLists( dominant.getPluginManagement(), 
recessive.getPluginManagement(),
+                                             false );
+            }
+        }
+    }
+    
     static Model cloneModel( Model model )
     {
         // TODO: would be nice for the modello:java code to generate this as a 
copy constructor

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java?rev=231294&r1=231293&r2=231294&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/DefaultModelInheritanceAssembler.java
 Wed Aug 10 12:21:34 2005
@@ -17,31 +17,16 @@
  */
 
 import org.apache.maven.model.Build;
-import org.apache.maven.model.BuildBase;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.DependencyManagement;
 import org.apache.maven.model.DistributionManagement;
 import org.apache.maven.model.Extension;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.ModelBase;
-import org.apache.maven.model.PluginManagement;
-import org.apache.maven.model.Profile;
-import org.apache.maven.model.ReportPlugin;
-import org.apache.maven.model.ReportSet;
-import org.apache.maven.model.Reporting;
 import org.apache.maven.model.Repository;
 import org.apache.maven.model.Scm;
 import org.apache.maven.model.Site;
 import org.apache.maven.project.ModelUtils;
 import org.codehaus.plexus.util.StringUtils;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
 
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl </a>
@@ -157,253 +142,7 @@
         // Build
         assembleBuildInheritance( child, parent.getBuild() );
 
-        assembleModelBaseInheritance( child, parent );
-    }
-
-    public void mergeProfileWithModel( Model model, Profile profile )
-    {
-        assembleModelBaseInheritance( model, profile );
-
-        assembleBuildBaseInheritance( model.getBuild(), profile.getBuild() );
-    }
-
-    private void assembleModelBaseInheritance( ModelBase child, ModelBase 
parent )
-    {
-        // Dependencies :: aggregate
-        Map mappedChildDeps = new TreeMap();
-        for ( Iterator it = child.getDependencies().iterator(); it.hasNext(); )
-        {
-            Dependency dep = (Dependency) it.next();
-            mappedChildDeps.put( dep.getManagementKey(), dep );
-        }
-
-        for ( Iterator it = parent.getDependencies().iterator(); it.hasNext(); 
)
-        {
-            Dependency dep = (Dependency) it.next();
-            if ( !mappedChildDeps.containsKey( dep.getManagementKey() ) )
-            {
-                child.addDependency( dep );
-            }
-        }
-
-        // Repositories :: aggregate
-        List parentRepositories = parent.getRepositories();
-
-        List childRepositories = child.getRepositories();
-
-        for ( Iterator iterator = parentRepositories.iterator(); 
iterator.hasNext(); )
-        {
-            Repository repository = (Repository) iterator.next();
-
-            // child will always override parent repositories if there are 
duplicates
-            if ( !childRepositories.contains( repository ) )
-            {
-                child.addRepository( repository );
-            }
-        }
-
-        // Mojo Repositories :: aggregate
-        List parentPluginRepositories = parent.getPluginRepositories();
-        List childPluginRepositories = child.getPluginRepositories();
-
-        for ( Iterator iterator = parentPluginRepositories.iterator(); 
iterator.hasNext(); )
-        {
-            Repository repository = (Repository) iterator.next();
-
-            if ( !childPluginRepositories.contains( repository ) )
-            {
-                child.addPluginRepository( repository );
-            }
-        }
-
-        // Reports :: aggregate
-        Reporting childReporting = child.getReporting();
-        Reporting parentReporting = parent.getReporting();
-
-        if ( childReporting != null && parentReporting != null )
-        {
-            if ( StringUtils.isEmpty( childReporting.getOutputDirectory() ) )
-            {
-                childReporting.setOutputDirectory( 
parentReporting.getOutputDirectory() );
-            }
-
-            Map mergedReportPlugins = new HashMap();
-
-            Map childReportersByKey = childReporting.getReportPluginsAsMap();
-
-            List parentReportPlugins = parentReporting.getPlugins();
-
-            if ( parentReportPlugins != null )
-            {
-                for ( Iterator it = parentReportPlugins.iterator(); 
it.hasNext(); )
-                {
-                    ReportPlugin parentReportPlugin = (ReportPlugin) it.next();
-
-                    String inherited = parentReportPlugin.getInherited();
-
-                    if ( StringUtils.isEmpty( inherited ) || Boolean.valueOf( 
inherited ).booleanValue() )
-                    {
-                        ReportPlugin childReportPlugin = (ReportPlugin) 
childReportersByKey.get(
-                            parentReportPlugin.getKey() );
-
-                        ReportPlugin mergedReportPlugin = parentReportPlugin;
-
-                        if ( childReportPlugin != null )
-                        {
-                            mergedReportPlugin = childReportPlugin;
-
-                            mergeReportPlugins( childReportPlugin, 
parentReportPlugin );
-                        }
-                        else if ( StringUtils.isEmpty( inherited ) )
-                        {
-                            mergedReportPlugin.unsetInheritanceApplied();
-                        }
-
-                        mergedReportPlugins.put( mergedReportPlugin.getKey(), 
mergedReportPlugin );
-                    }
-                }
-            }
-
-            for ( Iterator it = childReportersByKey.entrySet().iterator(); 
it.hasNext(); )
-            {
-                Map.Entry entry = (Map.Entry) it.next();
-
-                String key = (String) entry.getKey();
-
-                if ( !mergedReportPlugins.containsKey( key ) )
-                {
-                    mergedReportPlugins.put( key, entry.getValue() );
-                }
-            }
-
-            childReporting.setPlugins( new ArrayList( 
mergedReportPlugins.values() ) );
-
-            childReporting.flushReportPluginMap();
-        }
-
-        assembleDependencyManagementInheritance( child, parent );
-    }
-
-    private void mergeReportPlugins( ReportPlugin dominant, ReportPlugin 
recessive )
-    {
-        if ( StringUtils.isEmpty( dominant.getVersion() ) )
-        {
-            dominant.setVersion( recessive.getVersion() );
-        }
-
-        Xpp3Dom dominantConfig = (Xpp3Dom) dominant.getConfiguration();
-        Xpp3Dom recessiveConfig = (Xpp3Dom) recessive.getConfiguration();
-
-        dominant.setConfiguration( Xpp3Dom.mergeXpp3Dom( dominantConfig, 
recessiveConfig ) );
-
-        Map mergedReportSets = new HashMap();
-
-        Map dominantReportSetsById = dominant.getReportSetsAsMap();
-
-        for ( Iterator it = recessive.getReportSets().iterator(); 
it.hasNext(); )
-        {
-            ReportSet recessiveReportSet = (ReportSet) it.next();
-
-            String inherited = recessiveReportSet.getInherited();
-
-            if ( StringUtils.isEmpty( inherited ) || Boolean.valueOf( 
inherited ).booleanValue() )
-            {
-                ReportSet dominantReportSet = (ReportSet) 
dominantReportSetsById.get( recessiveReportSet.getId() );
-
-                ReportSet merged = recessiveReportSet;
-
-                if ( dominantReportSet != null )
-                {
-                    merged = dominantReportSet;
-
-                    Xpp3Dom recessiveRSConfig = (Xpp3Dom) 
recessiveReportSet.getConfiguration();
-                    Xpp3Dom mergedRSConfig = (Xpp3Dom) 
merged.getConfiguration();
-
-                    merged.setConfiguration( Xpp3Dom.mergeXpp3Dom( 
mergedRSConfig, recessiveRSConfig ) );
-
-                    List mergedReports = merged.getReports();
-
-                    if ( mergedReports == null )
-                    {
-                        mergedReports = new ArrayList();
-
-                        merged.setReports( mergedReports );
-                    }
-
-                    List recessiveRSReports = recessiveReportSet.getReports();
-
-                    if ( recessiveRSReports != null )
-                    {
-                        for ( Iterator reportIterator = 
recessiveRSReports.iterator(); reportIterator.hasNext(); )
-                        {
-                            String report = (String) reportIterator.next();
-
-                            if ( !mergedReports.contains( report ) )
-                            {
-                                mergedReports.add( report );
-                            }
-                        }
-                    }
-                }
-                else if ( StringUtils.isEmpty( inherited ) )
-                {
-                    merged.unsetInheritanceApplied();
-                }
-
-                mergedReportSets.put( merged.getId(), merged );
-            }
-        }
-
-        for ( Iterator rsIterator = 
dominantReportSetsById.entrySet().iterator(); rsIterator.hasNext(); )
-        {
-            Map.Entry entry = (Map.Entry) rsIterator.next();
-
-            String key = (String) entry.getKey();
-
-            if ( !mergedReportSets.containsKey( key ) )
-            {
-                mergedReportSets.put( key, entry.getValue() );
-            }
-        }
-
-        dominant.setReportSets( new ArrayList( mergedReportSets.values() ) );
-
-        dominant.flushReportSetMap();
-    }
-
-    private void assembleDependencyManagementInheritance( ModelBase child, 
ModelBase parent )
-    {
-        DependencyManagement parentDepMgmt = parent.getDependencyManagement();
-
-        DependencyManagement childDepMgmt = child.getDependencyManagement();
-
-        if ( parentDepMgmt != null )
-        {
-            if ( childDepMgmt == null )
-            {
-                child.setDependencyManagement( parentDepMgmt );
-            }
-            else
-            {
-                List childDeps = childDepMgmt.getDependencies();
-
-                Map mappedChildDeps = new TreeMap();
-                for ( Iterator it = childDeps.iterator(); it.hasNext(); )
-                {
-                    Dependency dep = (Dependency) it.next();
-                    mappedChildDeps.put( dep.getManagementKey(), dep );
-                }
-
-                for ( Iterator it = 
parentDepMgmt.getDependencies().iterator(); it.hasNext(); )
-                {
-                    Dependency dep = (Dependency) it.next();
-                    if ( !mappedChildDeps.containsKey( dep.getManagementKey() 
) )
-                    {
-                        childDepMgmt.addDependency( dep );
-                    }
-                }
-            }
-        }
+        ModelUtils.mergeModelBases( child, parent );
     }
 
     private void assembleBuildInheritance( Model child, Build parentBuild )
@@ -454,55 +193,10 @@
             // Extensions are accumlated
             mergeExtensionLists( childBuild, parentBuild );
 
-            assembleBuildBaseInheritance( childBuild, parentBuild );
+            ModelUtils.mergeBuildBases( childBuild, parentBuild );
         }
     }
 
-    private void assembleBuildBaseInheritance( BuildBase childBuild, BuildBase 
parentBuild )
-    {
-        // if the parent build is null, obviously we cannot inherit from it...
-        if ( parentBuild != null )
-        {
-            if ( childBuild.getDefaultGoal() == null )
-            {
-                childBuild.setDefaultGoal( parentBuild.getDefaultGoal() );
-            }
-
-            if ( childBuild.getFinalName() == null )
-            {
-                childBuild.setFinalName( parentBuild.getFinalName() );
-            }
-
-            List resources = childBuild.getResources();
-            if ( resources == null || resources.isEmpty() )
-            {
-                childBuild.setResources( parentBuild.getResources() );
-            }
-
-            resources = childBuild.getTestResources();
-            if ( resources == null || resources.isEmpty() )
-            {
-                childBuild.setTestResources( parentBuild.getTestResources() );
-            }
-
-            // Plugins are aggregated if Plugin.inherit != false
-            ModelUtils.mergePluginLists( childBuild, parentBuild, true );
-
-            // Plugin management :: aggregate
-            PluginManagement childPM = childBuild.getPluginManagement();
-            PluginManagement parentPM = parentBuild.getPluginManagement();
-
-            if ( childPM == null && parentPM != null )
-            {
-                childBuild.setPluginManagement( parentPM );
-            }
-            else
-            {
-                ModelUtils.mergePluginLists( childBuild.getPluginManagement(), 
parentBuild.getPluginManagement(),
-                                             false );
-            }
-        }
-    }
 
     private void assembleScmInheritance( Model child, Model parent )
     {

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java?rev=231294&r1=231293&r2=231294&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/inheritance/ModelInheritanceAssembler.java
 Wed Aug 10 12:21:34 2005
@@ -17,7 +17,6 @@
  */
 
 import org.apache.maven.model.Model;
-import org.apache.maven.model.Profile;
 
 /**
  * @author <a href="mailto:[EMAIL PROTECTED]">Jason van Zyl</a>
@@ -28,6 +27,4 @@
     String ROLE = ModelInheritanceAssembler.class.getName();
 
     void assembleModelInheritance( Model child, Model parent );
-
-    void mergeProfileWithModel( Model model, Profile profile );
 }

Added: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java?rev=231294&view=auto
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
 (added)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/DefaultProfileInjector.java
 Wed Aug 10 12:21:34 2005
@@ -0,0 +1,44 @@
+package org.apache.maven.project.injection;
+
+import org.apache.maven.model.Build;
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.project.ModelUtils;
+
+public class DefaultProfileInjector
+    implements ProfileInjector
+{
+
+    public void inject( Profile profile, Model model )
+    {
+        ModelUtils.mergeModelBases( profile, model );
+        
+        model.setDependencies( profile.getDependencies() );
+        model.setDependencyManagement( profile.getDependencyManagement() );
+        model.setDistributionManagement( profile.getDistributionManagement() );
+        model.setModules( profile.getModules() );
+        model.setPluginRepositories( profile.getPluginRepositories() );
+        model.setReporting( profile.getReporting() );
+        model.setRepositories( profile.getRepositories() );
+        
+        BuildBase profileBuild = profile.getBuild();
+        if ( profileBuild != null )
+        {
+            ModelUtils.mergeBuildBases( profile.getBuild(), model.getBuild() );
+            
+            Build modelBuild = model.getBuild();
+            
+            modelBuild.setDefaultGoal( profileBuild.getDefaultGoal() );
+            modelBuild.setFinalName( profileBuild.getFinalName() );
+            modelBuild.setPluginManagement( profileBuild.getPluginManagement() 
);
+            
+            modelBuild.setPlugins( profileBuild.getPlugins() );
+            modelBuild.flushPluginMap();
+            
+            modelBuild.setResources( profileBuild.getResources() );
+            modelBuild.setTestResources( profileBuild.getTestResources() );
+        }
+    }
+
+}

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

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

Added: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/ProfileInjector.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/ProfileInjector.java?rev=231294&view=auto
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/ProfileInjector.java
 (added)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/injection/ProfileInjector.java
 Wed Aug 10 12:21:34 2005
@@ -0,0 +1,13 @@
+package org.apache.maven.project.injection;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+
+public interface ProfileInjector
+{
+    
+    String ROLE = ProfileInjector.class.getName();
+    
+    void inject( Profile profile, Model model );
+
+}

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

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

Modified: 
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml?rev=231294&r1=231293&r2=231294&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
 (original)
+++ 
maven/components/trunk/maven-project/src/main/resources/META-INF/plexus/components.xml
 Wed Aug 10 12:21:34 2005
@@ -24,9 +24,21 @@
      |
      -->
     <component>
+      <role>org.apache.maven.project.injection.ProfileInjector</role>
+      
<implementation>org.apache.maven.project.injection.DefaultProfileInjector</implementation>
+    </component>
+<!--
+     |
+     |
+     |
+     -->
+    <component>
       <role>org.apache.maven.project.MavenProjectBuilder</role>
       
<implementation>org.apache.maven.project.DefaultMavenProjectBuilder</implementation>
       <requirements>
+        <requirement>
+          <role>org.apache.maven.project.injection.ProfileInjector</role>
+        </requirement>
         <requirement>
           <role>org.apache.maven.project.injection.ModelDefaultsInjector</role>
         </requirement>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to