Author: bentmann Date: Fri May 8 14:40:47 2009 New Revision: 773012 URL: http://svn.apache.org/viewvc?rev=773012&view=rev Log: o Continued work on model merging
Modified: maven/components/branches/MNG-2766/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java 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=773012&r1=773011&r2=773012&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 14:40:47 2009 @@ -96,7 +96,8 @@ } /* - * TODO: Whether the merge continues recursively into an existing node or not could be an option for the generated merger + * TODO: Whether the merge continues recursively into an existing node or not could be an option for the generated + * merger */ @Override protected void mergeModel_Organization( Model target, Model source, boolean sourceDominant, @@ -241,6 +242,26 @@ } @Override + protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant, + Map<Object, Object> context ) + { + if ( sourceDominant || target.getResources().isEmpty() ) + { + super.mergeBuildBase_Resources( target, source, sourceDominant, context ); + } + } + + @Override + protected void mergeBuildBase_TestResources( BuildBase target, BuildBase source, boolean sourceDominant, + Map<Object, Object> context ) + { + if ( sourceDominant || target.getTestResources().isEmpty() ) + { + super.mergeBuildBase_TestResources( target, source, sourceDominant, context ); + } + } + + @Override protected void mergeDistributionManagement_Repository( DistributionManagement target, DistributionManagement source, boolean sourceDominant, Map<Object, Object> context ) @@ -437,6 +458,65 @@ } @Override + protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant, + Map<Object, Object> context ) + { + List<PluginExecution> src = source.getExecutions(); + if ( !src.isEmpty() ) + { + List<PluginExecution> tgt = target.getExecutions(); + Map<Object, PluginExecution> merged = + new LinkedHashMap<Object, PluginExecution>( ( src.size() + tgt.size() ) * 2 ); + + for ( Iterator<PluginExecution> it = tgt.iterator(); it.hasNext(); ) + { + PluginExecution element = it.next(); + Object key = getPluginExecutionKey( element ); + merged.put( key, element ); + } + + for ( Iterator<PluginExecution> it = src.iterator(); it.hasNext(); ) + { + PluginExecution element = it.next(); + Object key = getPluginExecutionKey( element ); + PluginExecution existing = merged.get( key ); + if ( existing != null ) + { + mergePluginExecution( existing, element, sourceDominant, context ); + } + else + { + merged.put( key, element ); + } + } + + target.setExecutions( new ArrayList<PluginExecution>( merged.values() ) ); + } + } + + @Override + protected void mergePluginExecution_Goals( PluginExecution target, PluginExecution source, boolean sourceDominant, + Map<Object, Object> context ) + { + List<String> src = source.getGoals(); + if ( !src.isEmpty() ) + { + List<String> tgt = target.getGoals(); + 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.setGoals( merged ); + } + } + + @Override protected Object getDependencyKey( Dependency dependency ) { return dependency.getManagementKey();