Author: bentmann
Date: Fri May  8 13:10:51 2009
New Revision: 772964

URL: http://svn.apache.org/viewvc?rev=772964&view=rev
Log:
o Continued work on model merging

Modified:
    
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
    
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
    
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
    
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
    
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java

Modified: 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java?rev=772964&r1=772963&r2=772964&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-core/src/main/java/org/apache/maven/project/DefaultMavenProjectBuilder.java
 Fri May  8 13:10:51 2009
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
@@ -159,11 +160,12 @@
 
             project = this.fromDomainModelToMavenProject( model, 
domainModel.getParentFile(), configuration, pomFile );
 
-            Set<Plugin> pluginsFromProject = new HashSet<Plugin>();
+            Set<Plugin> pluginsFromProject = new LinkedHashSet<Plugin>();
             for ( Plugin p : project.getModel().getBuild().getPlugins() )
             {
                 Plugin copy = new Plugin();
                 PluginProcessor.copy2( p, copy, true );
+                copy.setDependencies( p.getDependencies() );
                 pluginsFromProject.add( copy );
             }
 

Modified: 
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=772964&r1=772963&r2=772964&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-core/src/test/java/org/apache/maven/project/PomConstructionTest.java
 Fri May  8 13:10:51 2009
@@ -925,7 +925,7 @@
     }
     
     /** MNG-2006 */
-    public void testUrlAppend()
+    public void testUrlAppendWithChildPathAdjustment()
         throws Exception
     {
         PomTestWrapper pom = this.buildPom( "url-append/child" );

Modified: 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java?rev=772964&r1=772963&r2=772964&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java
 Fri May  8 13:10:51 2009
@@ -1,24 +1,5 @@
 package org.apache.maven.model.merge;
 
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.ModelBase;
-import org.apache.maven.model.Plugin;
-import org.apache.maven.model.PluginExecution;
-import org.apache.maven.model.Repository;
-import org.apache.maven.model.RepositoryBase;
-import org.apache.maven.model.Site;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -38,8 +19,30 @@
  * under the License.
  */
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.maven.model.BuildBase;
+import org.apache.maven.model.Dependency;
+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.Repository;
+import org.apache.maven.model.RepositoryBase;
+import org.apache.maven.model.Scm;
+import org.apache.maven.model.Site;
+
 /**
- * The domain-specific model merger for the Maven POM..
+ * The domain-specific model merger for the Maven POM.
  * 
  * @author Benjamin Bentmann
  */
@@ -66,6 +69,24 @@
     }
 
     @Override
+    protected void mergeModel_Url( Model target, Model source, boolean 
sourceDominant, Map<Object, Object> context )
+    {
+        String src = source.getUrl();
+        if ( src != null )
+        {
+            if ( sourceDominant )
+            {
+                target.setUrl( src );
+            }
+            else if ( target.getUrl() == null )
+            {
+                target.setUrl( appendPath( src, context.get( ARTIFACT_ID 
).toString(),
+                                           context.get( CHILD_PATH_ADJUSTMENT 
).toString() ) );
+            }
+        }
+    }
+
+    @Override
     protected void mergeModelBase_Modules( ModelBase target, ModelBase source, 
boolean sourceDominant,
                                            Map<Object, Object> context )
     {
@@ -73,10 +94,17 @@
         if ( !src.isEmpty() && sourceDominant )
         {
             List<String> tgt = target.getModules();
-            Set<String> merged = new LinkedHashSet<String>( ( tgt.size() + 
src.size() ) * 2 );
+            Set<String> excludes = new LinkedHashSet<String>( tgt );
+            List<String> merged = new ArrayList<String>( tgt.size() + 
src.size() );
             merged.addAll( tgt );
-            merged.addAll( src );
-            target.setModules( new ArrayList<String>( merged ) );
+            for ( String s : src )
+            {
+                if ( !excludes.contains( s ) )
+                {
+                    merged.add( s );
+                }
+            }
+            target.setModules( merged );
         }
     }
 
@@ -127,6 +155,31 @@
         }
     }
 
+    /*
+     * TODO: Whether duplicates should be removed looks like an option for the 
generated merger.
+     */
+    @Override
+    protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, 
boolean sourceDominant,
+                                           Map<Object, Object> context )
+    {
+        List<String> src = source.getFilters();
+        if ( !src.isEmpty() )
+        {
+            List<String> tgt = target.getFilters();
+            Set<String> excludes = new LinkedHashSet<String>( tgt );
+            List<String> merged = new ArrayList<String>( tgt.size() + 
src.size() );
+            merged.addAll( tgt );
+            for ( String s : src )
+            {
+                if ( !excludes.contains( s ) )
+                {
+                    merged.add( s );
+                }
+            }
+            target.setFilters( merged );
+        }
+    }
+
     @Override
     protected void mergeSite_Url( Site target, Site source, boolean 
sourceDominant, Map<Object, Object> context )
     {
@@ -146,6 +199,97 @@
     }
 
     @Override
+    protected void mergeScm_Url( Scm target, Scm source, boolean 
sourceDominant, Map<Object, Object> context )
+    {
+        String src = source.getUrl();
+        if ( src != null )
+        {
+            if ( sourceDominant )
+            {
+                target.setUrl( src );
+            }
+            else if ( target.getUrl() == null )
+            {
+                target.setUrl( appendPath( src, context.get( ARTIFACT_ID 
).toString(),
+                                           context.get( CHILD_PATH_ADJUSTMENT 
).toString() ) );
+            }
+        }
+    }
+
+    @Override
+    protected void mergeScm_Connection( Scm target, Scm source, boolean 
sourceDominant, Map<Object, Object> context )
+    {
+        String src = source.getConnection();
+        if ( src != null )
+        {
+            if ( sourceDominant )
+            {
+                target.setConnection( src );
+            }
+            else if ( target.getConnection() == null )
+            {
+                target.setConnection( appendPath( src, context.get( 
ARTIFACT_ID ).toString(),
+                                                  context.get( 
CHILD_PATH_ADJUSTMENT ).toString() ) );
+            }
+        }
+    }
+
+    @Override
+    protected void mergeScm_DeveloperConnection( Scm target, Scm source, 
boolean sourceDominant,
+                                                 Map<Object, Object> context )
+    {
+        String src = source.getDeveloperConnection();
+        if ( src != null )
+        {
+            if ( sourceDominant )
+            {
+                target.setDeveloperConnection( src );
+            }
+            else if ( target.getDeveloperConnection() == null )
+            {
+                target.setDeveloperConnection( appendPath( src, context.get( 
ARTIFACT_ID ).toString(),
+                                                           context.get( 
CHILD_PATH_ADJUSTMENT ).toString() ) );
+            }
+        }
+    }
+
+    @Override
+    protected void mergePluginContainer_Plugins( PluginContainer target, 
PluginContainer source,
+                                                 boolean sourceDominant, 
Map<Object, Object> context )
+    {
+        List<Plugin> src = source.getPlugins();
+        if ( !src.isEmpty() )
+        {
+            List<Plugin> tgt = target.getPlugins();
+            Map<Object, Plugin> merged = new LinkedHashMap<Object, Plugin>( ( 
src.size() + tgt.size() ) * 2 );
+
+            for ( Iterator<Plugin> it = tgt.iterator(); it.hasNext(); )
+            {
+                Plugin element = it.next();
+                Object key = getPluginKey( element );
+                merged.put( key, element );
+            }
+
+            for ( Iterator<Plugin> it = src.iterator(); it.hasNext(); )
+            {
+                Plugin element = it.next();
+                Object key = getPluginKey( element );
+                Plugin existing = merged.get( key );
+                if ( existing != null )
+                {
+                    mergePlugin( existing, element, sourceDominant, context );
+                }
+                else
+                {
+                    merged.put( key, element );
+                }
+            }
+
+            target.setPlugins( new ArrayList<Plugin>( merged.values() ) );
+        }
+    }
+
+    @Override
     protected Object getDependencyKey( Dependency dependency )
     {
         return dependency.getManagementKey();

Modified: 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java?rev=772964&r1=772963&r2=772964&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/DefaultProfileInjector.java
 Fri May  8 13:10:51 2009
@@ -43,11 +43,6 @@
 
     public void injectProfile( Model model, Profile profile )
     {
-        if ( profile == null )
-        {
-            return;
-        }
-
         if ( profile != null )
         {
             merger.mergeModelBase( model, profile );

Modified: 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java
URL: 
http://svn.apache.org/viewvc/maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java?rev=772964&r1=772963&r2=772964&view=diff
==============================================================================
--- 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java
 (original)
+++ 
maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/profile/ProfileInjector.java
 Fri May  8 13:10:51 2009
@@ -34,7 +34,7 @@
      * Merges values from the specified profile into the given model.
      * 
      * @param model The model into which to merge the values defined by the 
profile, must not be <code>null</code>.
-     * @param profile The (read-only) profile from whose values should be 
injected, may be <code>null</code>.
+     * @param profile The (read-only) profile whose values should be injected, 
may be <code>null</code>.
      */
     void injectProfile( Model model, Profile profile );
 


Reply via email to