From 6e2798f2e943a04709d41c7dab3a12567f66d3ec Mon Sep 17 00:00:00 2001 From: Benjamin Bentmann Date: Fri, 8 May 2009 14:40:47 +0000 Subject: [PATCH] o Continued work on model merging git-svn-id: https://svn.apache.org/repos/asf/maven/components/branches/MNG-2766@773012 13f79535-47bb-0310-9956-ffa450edef68 --- .../maven/model/merge/MavenModelMerger.java | 82 ++++++++++++++++++- 1 file changed, 81 insertions(+), 1 deletion(-) diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java b/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java index 3314b45f5b..c0fa279d45 100644 --- a/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java +++ b/maven-model-builder/src/main/java/org/apache/maven/model/merge/MavenModelMerger.java @@ -96,7 +96,8 @@ else if ( target.getUrl() == null ) } /* - * 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, @@ -240,6 +241,26 @@ protected void mergeBuildBase_Filters( BuildBase target, BuildBase source, boole } } + @Override + protected void mergeBuildBase_Resources( BuildBase target, BuildBase source, boolean sourceDominant, + Map 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 context ) + { + if ( sourceDominant || target.getTestResources().isEmpty() ) + { + super.mergeBuildBase_TestResources( target, source, sourceDominant, context ); + } + } + @Override protected void mergeDistributionManagement_Repository( DistributionManagement target, DistributionManagement source, boolean sourceDominant, @@ -436,6 +457,65 @@ protected void mergeReporting_Plugins( Reporting target, Reporting source, boole } } + @Override + protected void mergePlugin_Executions( Plugin target, Plugin source, boolean sourceDominant, + Map context ) + { + List src = source.getExecutions(); + if ( !src.isEmpty() ) + { + List tgt = target.getExecutions(); + Map merged = + new LinkedHashMap( ( src.size() + tgt.size() ) * 2 ); + + for ( Iterator it = tgt.iterator(); it.hasNext(); ) + { + PluginExecution element = it.next(); + Object key = getPluginExecutionKey( element ); + merged.put( key, element ); + } + + for ( Iterator 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( merged.values() ) ); + } + } + + @Override + protected void mergePluginExecution_Goals( PluginExecution target, PluginExecution source, boolean sourceDominant, + Map context ) + { + List src = source.getGoals(); + if ( !src.isEmpty() ) + { + List tgt = target.getGoals(); + Set excludes = new LinkedHashSet( tgt ); + List merged = new ArrayList( 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 ) {