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 );