Author: vmassol
Date: Tue Mar 28 04:32:20 2006
New Revision: 389489

URL: http://svn.apache.org/viewcvs?rev=389489&view=rev
Log:
MCLOVER-25: Create aggregated report when Clover is executed in a multimodule 
build

Added:
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java
   (contents, props changed)
      - copied, changed from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java
   (contents, props changed)
      - copied, changed from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java
   (contents, props changed)
      - copied, changed from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java
   (contents, props changed)
      - copied, changed from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java
Removed:
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java
Modified:
    
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-simple/pom.xml
    
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverReportMojo.java

Copied: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java
 (from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java)
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java?p2=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java&p1=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java&r1=389413&r2=389489&rev=389489&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java
 Tue Mar 28 04:32:20 2006
@@ -1,5 +1,5 @@
 /*
- * Copyright 2005 The Apache Software Foundation.
+ * Copyright 2005-2006 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,9 +15,9 @@
  */
 package org.apache.maven.plugin.clover.samples.multiproject;
 
-public class Simple
+public class Simple1
 {
-    public void someMethod()
+    public void someMethod1()
     {
         int i = 0;
         if (i > 0)

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java
 (from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java)
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java?p2=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java&p1=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java&r1=389413&r2=389489&rev=389489&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java
 Tue Mar 28 04:32:20 2006
@@ -17,12 +17,12 @@
 
 import junit.framework.TestCase;
 
-public class SimpleTest extends TestCase
+public class Simple1Test extends TestCase
 {
     public void testSomeMethod()
     {
-        Simple simple = new Simple();
-        simple.someMethod();
+        Simple1 simple = new Simple1();
+        simple.someMethod1();
     }
 }
  

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module1/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple1Test.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java
 (from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java)
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java?p2=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java&p1=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java&r1=389413&r2=389489&rev=389489&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple.java
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java
 Tue Mar 28 04:32:20 2006
@@ -15,9 +15,9 @@
  */
 package org.apache.maven.plugin.clover.samples.multiproject;
 
-public class Simple
+public class Simple2
 {
-    public void someMethod()
+    public void someMethod2()
     {
         int i = 0;
         if (i > 0)

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/main/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Copied: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java
 (from r389413, 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java)
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java?p2=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java&p1=maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java&r1=389413&r2=389489&rev=389489&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/SimpleTest.java
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java
 Tue Mar 28 04:32:20 2006
@@ -17,12 +17,12 @@
 
 import junit.framework.TestCase;
 
-public class SimpleTest extends TestCase
+public class Simple2Test extends TestCase
 {
     public void testSomeMethod()
     {
-        Simple simple = new Simple();
-        simple.someMethod();
+        Simple2 simple = new Simple2();
+        simple.someMethod2();
     }
 }
  

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-multiproject/maven-clover-plugin-sample-multiproject-module2/src/test/java/org/apache/maven/plugin/clover/samples/multiproject/Simple2Test.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-simple/pom.xml
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-simple/pom.xml?rev=389489&r1=389488&r2=389489&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-simple/pom.xml
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/it/maven-clover-plugin-sample-simple/pom.xml
 Tue Mar 28 04:32:20 2006
@@ -35,12 +35,10 @@
         <artifactId>maven-clover-plugin</artifactId>
         <configuration>
           <jdk>1.4</jdk>
+          <targetPercentage>1%</targetPercentage>
         </configuration>
         <executions>
           <execution>
-            <configuration>
-              <targetPercentage>1%</targetPercentage>
-            </configuration>
             <goals>
               <goal>check</goal>
             </goals>

Modified: 
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverReportMojo.java
URL: 
http://svn.apache.org/viewcvs/maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverReportMojo.java?rev=389489&r1=389488&r2=389489&view=diff
==============================================================================
--- 
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverReportMojo.java
 (original)
+++ 
maven/plugins/trunk/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverReportMojo.java
 Tue Mar 28 04:32:20 2006
@@ -1,7 +1,5 @@
-package org.apache.maven.plugin.clover;
-
 /*
- * Copyright 2001-2005 The Apache Software Foundation.
+ * Copyright 2001-2006 The Apache Software Foundation.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -15,35 +13,40 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.maven.plugin.clover;
 
 import com.cenqua.clover.reporters.html.HtmlReporter;
+import com.cenqua.clover.CloverMerge;
 
 import org.apache.maven.artifact.handler.ArtifactHandler;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.reporting.AbstractMavenReport;
 import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.model.Plugin;
+import org.apache.tools.ant.Project;
 import org.codehaus.doxia.sink.Sink;
 import org.codehaus.doxia.site.renderer.SiteRenderer;
 
 import java.io.File;
-import java.util.Locale;
-import java.util.ResourceBundle;
+import java.util.*;
 
 /**
- * Generate a <a href="http://cenqua.com/clover";>Clover</a> report.
- * The generated report is an external report generated  by Clover itself.
+ * Generate a <a href="http://cenqua.com/clover";>Clover</a> report. The 
generated report is an external report
+ * generated by Clover itself. If the project generating the report is a top 
level project and if the
+ * <code>aggregate</code> configuration element is set to true then an 
aggregated report will also be created.
  *
- * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Massol</a>
- * @version $Id$
  * @goal clover
  * @execute phase="test" lifecycle="clover"
+ * @aggregator
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Vincent Massol</a>
+ * @version $Id$
  */
-public class CloverReportMojo
-    extends AbstractMavenReport
+public class CloverReportMojo extends AbstractMavenReport
 {
     // TODO: Need some way to share config elements and code between report 
mojos and main build
     // mojos. See http://jira.codehaus.org/browse/MNG-1886
-    
+
     /**
      * The location of the <a 
href="http://cenqua.com/clover/doc/adv/database.html";>Clover database</a>.
      * 
@@ -53,6 +56,14 @@
     private String cloverDatabase;
 
     /**
+     * The location of the merged clover database to create when running a 
report in a multimodule build.
+     *
+     * @parameter expression="${project.build.directory}/clover/cloverMerge.db"
+     * @required
+     */
+    private String cloverMergeDatabase;
+
+    /**
      * The directory where the Clover report will be generated.
      * 
      * @parameter expression="${project.reporting.outputDirectory}/clover"
@@ -81,7 +92,7 @@
      * @parameter default-value="true"
      */
     protected boolean waitForFlush;
-    
+
     /**
      * @component
      */
@@ -97,31 +108,130 @@
     private MavenProject project;
 
     /**
+     * The projects in the reactor for aggregation report.
+     *
+     * @parameter expression="${reactorProjects}"
+     * @readonly
+     */
+    private List reactorProjects;
+
+    /**
+     * Whether to build an aggregated report at the root in addition to 
building individual reports or not.
+     *
+     * @parameter expression="${aggregate}" default-value="true"
+     */
+    protected boolean aggregate;
+
+    /**
      * @see 
org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale)
      */
-    public void executeReport( Locale locale )
-        throws MavenReportException
+    public void executeReport( Locale locale ) throws MavenReportException
     {
-        AbstractCloverMojo.waitForFlush( this.waitForFlush, this.flushInterval 
);
-        
-        int result = HtmlReporter.mainImpl( createCliArgs() );
-        if ( result != 0 )
+        // Only generate module reports for non root projects
+        if ( !getProject().isExecutionRoot() )
+        {
+            AbstractCloverMojo.waitForFlush( this.waitForFlush, 
this.flushInterval );
+            createCloverHtmlReport();
+        }
+
+        // If we're in the top level module, then create an extra report by 
aggregating the generated clover
+        // databases.
+        if ( this.aggregate && getProject().isExecutionRoot() )
+        {
+            // Ensure the merged database output directory exists
+            new File( this.cloverMergeDatabase ).getParentFile().mkdirs();
+
+            // Merge the databases
+            mergeCloverDatabases();
+
+            // Generate the merged report
+            createMasterCloverHtmlReport();
+        }
+    }
+
+    private List getChildrenCloverDatabases()
+    {
+        // Ideally we'd need to find out where each module stores its Clover 
database. However that's not
+        // currently possible in m2 (see 
http://jira.codehaus.org/browse/MNG-2180). Thus we'll assume for now
+        // that all modules use the cloverDatabase configuration from the top 
level module.
+
+        // Find out the location of the clover DB relative to the root module.
+        // Note: This is a pretty buggy algorithm and we really need a proper 
solution (see MNG-2180)
+        String relativeCloverDatabasePath =
+            
this.cloverDatabase.substring(getProject().getBasedir().getPath().length());
+
+        List dbFiles = new ArrayList();
+        for ( Iterator projects = this.reactorProjects.iterator(); 
projects.hasNext(); )
         {
-            throw new MavenReportException( "Clover has failed to instrument 
the source files" );
+            MavenProject project = (MavenProject) projects.next();
+
+            File cloverDb = new File(project.getBasedir(), 
relativeCloverDatabasePath);
+            if (cloverDb.exists())
+            {
+                dbFiles.add(cloverDb.getPath());
+            }
+            else
+            {
+                getLog().warn("Skipping [" + cloverDb.getPath() + "] as it 
doesn't exist.");
+            }
         }
+
+        return dbFiles;
     }
 
     /**
-     * @return the CLI args to be passed to the reporter
      * @todo handle multiple source roots. At the moment only the first source 
root is instrumented
      */
-    private String[] createCliArgs()
+    private void createCloverHtmlReport() throws MavenReportException
     {
-        return new String[] {
-            "-t", "Maven Clover report", 
+        String[] cliArgs = new String[] {
+            "-t", "Maven Clover report",
             "-p", (String) this.project.getCompileSourceRoots().get( 0 ),
-            "-i", this.cloverDatabase, 
+            "-i", this.cloverDatabase,
             "-o", this.outputDirectory.getPath() };
+
+        int result = HtmlReporter.mainImpl( cliArgs );
+        if ( result != 0 )
+        {
+            throw new MavenReportException( "Clover has failed to create the 
HTML report" );
+        }
+
+    }
+
+    private void createMasterCloverHtmlReport() throws MavenReportException
+    {
+        String[] args = new String[] {
+            "-t", "Maven Aggregated Clover report",
+            "-i", this.cloverMergeDatabase,
+            "-o", this.outputDirectory.getPath() };
+
+        int reportResult = HtmlReporter.mainImpl( args );
+        if ( reportResult != 0 )
+        {
+            throw new MavenReportException( "Clover has failed to create the 
merged HTML report" );
+        }
+    }
+
+    private void mergeCloverDatabases() throws MavenReportException
+    {
+        List dbFiles = getChildrenCloverDatabases();
+
+        String[] args = new String[dbFiles.size() + 2];
+        args[0] = "-i";
+        args[1] = this.cloverMergeDatabase;
+
+        int i = 2;
+        for ( Iterator dbs = dbFiles.iterator(); dbs.hasNext(); )
+        {
+            args[i] = (String) dbs.next();
+            i++;
+        }
+
+        int mergeResult = CloverMerge.mainImpl( args );
+        if ( mergeResult != 0 )
+        {
+            throw new MavenReportException( "Clover has failed to merge the 
module databases" );
+        }
     }
 
     public String getOutputName()
@@ -183,19 +293,49 @@
         executeReport( locale );
     }
 
+    /**
+     * Always return true as we're using the report generated by Clover rather 
than creating our own report.
+     * @return true
+     */
     public boolean isExternalReport()
     {
         return true;
     }
 
     /**
+     * Only execute reports for Java projects.
+     *
+     * @return true if the current project is Java project and false otherwise
      * @see org.apache.maven.reporting.AbstractMavenReport#canGenerateReport()
      */
     public boolean canGenerateReport()
     {
-        // Only execute reports for java projects
-        ArtifactHandler artifactHandler = 
this.project.getArtifact().getArtifactHandler();
-        return "java".equals( artifactHandler.getLanguage() );
+        boolean canGenerate = false;
+
+        if ( this.aggregate && getProject().isExecutionRoot() )
+        {
+            // Check if we have at least one project which is a java project
+            for ( Iterator projects = this.reactorProjects.iterator(); 
projects.hasNext(); )
+            {
+                MavenProject project = (MavenProject) projects.next();
+                if ( isJavaProject(project) )
+                {
+                    canGenerate = true;
+                    break;
+                }
+            }
+        }
+        else if ( isJavaProject(getProject()) )
+        {
+            canGenerate = true;
+        }
+
+        return canGenerate;
     }
 
+    private boolean isJavaProject(MavenProject project)
+    {
+        ArtifactHandler artifactHandler = 
project.getArtifact().getArtifactHandler();
+        return "java".equals( artifactHandler.getLanguage() );
+    }
 }


Reply via email to