Author: sisbell
Date: Wed Mar 25 17:26:55 2009
New Revision: 758357

URL: http://svn.apache.org/viewvc?rev=758357&view=rev
Log:
[MNG-3811] - Report plugins don't inherit configuration

Modified:
    
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/processor/ReportingProcessor.java
    
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java

Modified: 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/processor/ReportingProcessor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/processor/ReportingProcessor.java?rev=758357&r1=758356&r2=758357&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/processor/ReportingProcessor.java
 (original)
+++ 
maven/components/trunk/maven-project/src/main/java/org/apache/maven/project/processor/ReportingProcessor.java
 Wed Mar 25 17:26:55 2009
@@ -20,11 +20,14 @@
  */
 
 import java.util.ArrayList;
+import java.util.List;
 
 import org.apache.maven.model.Model;
+import org.apache.maven.model.Plugin;
 import org.apache.maven.model.ReportPlugin;
 import org.apache.maven.model.ReportSet;
 import org.apache.maven.model.Reporting;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
 
 public class ReportingProcessor extends BaseProcessor
 {
@@ -51,9 +54,7 @@
             }
             
             copy(c.getReporting(), t.getReporting());
-        }
-        
-       
+        }     
     }
     
     private static void copy(Reporting source, Reporting target)
@@ -68,11 +69,67 @@
         
         for ( ReportPlugin plugin : source.getPlugins() )
         {
-            target.addPlugin( copyPlugin( plugin ) );
+            ReportPlugin match = contains(plugin, target.getPlugins());
+            if(match == null)
+            {
+                target.addPlugin( copyNewPlugin( plugin ) );    
+            }
+            else
+            {
+                copyPluginToPlugin(plugin, match);
+            }
+            
+        }
+    }
+    
+    private static ReportPlugin contains(ReportPlugin plugin, 
List<ReportPlugin> list)
+    {
+        for(ReportPlugin p :list)
+        {
+            if(match(p, plugin))
+            {
+                return p;
+            }
+        }
+        return null;
+    }
+    
+    private static void copyPluginToPlugin(ReportPlugin source, ReportPlugin 
target)
+    {
+        if(source.getInherited() != null)
+        {
+            target.setInherited( source.getInherited() );
+        }
+        
+        if(source.getVersion() != null)
+        {
+            target.setVersion( source.getVersion() );
+        }
+        
+        if(source.getConfiguration() != null)
+        {
+            if(target.getConfiguration() != null)
+            {
+                target.setConfiguration( Xpp3Dom.mergeXpp3Dom( (Xpp3Dom) 
source.getConfiguration(), (Xpp3Dom) target.getConfiguration() ));     
+            }
+            else
+            {
+                target.setConfiguration( source.getConfiguration() );
+            }                       
         }
+        
+        for(ReportSet rs : source.getReportSets())
+        {
+            ReportSet r = new ReportSet();
+            r.setId( rs.getId() );
+            r.setInherited( rs.getInherited() );
+            r.setReports( new ArrayList<String>(rs.getReports()) );
+            r.setConfiguration( rs.getConfiguration() );
+            target.addReportSet( r );
+        }        
     }
     
-    private static ReportPlugin copyPlugin(ReportPlugin plugin)
+    private static ReportPlugin copyNewPlugin(ReportPlugin plugin)
     {
         ReportPlugin rp = new ReportPlugin();
         rp.setArtifactId( plugin.getArtifactId() );
@@ -92,4 +149,16 @@
         }
         return rp;
     }
+    
+    private static boolean match( ReportPlugin d1, ReportPlugin d2 )
+    {
+        return getId( d1 ).equals( getId( d2 ));
+    }
+
+    private static String getId( ReportPlugin d )
+    {
+        StringBuilder sb = new StringBuilder();
+        sb.append( d.getGroupId() ).append( ":" ).append( d.getArtifactId() 
).append( ":" );
+        return sb.toString();
+    }      
 }

Modified: 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java?rev=758357&r1=758356&r2=758357&view=diff
==============================================================================
--- 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java
 (original)
+++ 
maven/components/trunk/maven-project/src/test/java/org/apache/maven/project/PomConstructionTest.java
 Wed Mar 25 17:26:55 2009
@@ -953,6 +953,18 @@
         assertEquals( pom.getBasedir().toURI().toString(), pom.getValue( 
"properties/prop1" ).toString() );
     }
 
+    /* MNG-3811*/
+    public void testReportingPluginConfig()
+        throws Exception
+    {
+        PomTestWrapper pom = buildPom( "reporting-plugin-config/sub" );
+
+        assertEquals(2,  ( (List<?>) pom.getValue( 
"reporting/plugins[1]/configuration/stringParams" ) ).size());
+        assertEquals("parentParam",  pom.getValue( 
"reporting/plugins[1]/configuration/stringParams[1]/stringParam[1]"));
+        assertEquals("childParam",  pom.getValue( 
"reporting/plugins[1]/configuration/stringParams[1]/stringParam[2]"));
+        assertEquals("true",  pom.getValue( 
"reporting/plugins[1]/configuration/booleanParam"));
+    }    
+    
     public void testCompleteModelWithoutParent()
         throws Exception
     {


Reply via email to