You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2010/07/05 23:11:35 UTC

svn commit: r960703 - /maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java

Author: hboutemy
Date: Mon Jul  5 21:11:34 2010
New Revision: 960703

URL: http://svn.apache.org/viewvc?rev=960703&view=rev
Log:
[MSITE-490] fixed MavenMultiPageReport API detection

Modified:
    maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java

Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java?rev=960703&r1=960702&r2=960703&view=diff
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java (original)
+++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java Mon Jul  5 21:11:34 2010
@@ -40,6 +40,8 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Writer;
 import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Locale;
 import java.util.List;
@@ -153,11 +155,7 @@ public class ReportDocumentRenderer
 
         try
         {
-            if ( report instanceof MavenMultiPageReport )
-            {
-                ( (MavenMultiPageReport) report ).generate( sink, sf, locale );
-            }
-            else
+            if ( !generateMultiPage( locale, sf, sink ) )
             {
                 try
                 {
@@ -216,6 +214,42 @@ public class ReportDocumentRenderer
         }
     }
 
+    private boolean generateMultiPage( Locale locale, SinkFactory sf, Sink sink )
+        throws MavenReportException
+    {
+        try
+        {
+            // MavenMultiPageReport is not in Maven Core, then the class is different in site plugin and in each report
+            // plugin: only reflection can let us invoke its method
+            Method generate =
+                report.getClass().getMethod( "generate", Sink.class, SinkFactory.class, Locale.class );
+
+            generate.invoke( report, sink, sf, locale );
+
+            return true;
+        }
+        catch ( SecurityException se )
+        {
+            return false;
+        }
+        catch ( NoSuchMethodException nsme )
+        {
+            return false;
+        }
+        catch ( IllegalArgumentException iae )
+        {
+            throw new MavenReportException( "error while invoking generate", iae );
+        }
+        catch ( IllegalAccessException iae )
+        {
+            throw new MavenReportException( "error while invoking generate", iae );
+        }
+        catch ( InvocationTargetException ite )
+        {
+            throw new MavenReportException( "error while invoking generate", ite );
+        }
+    }
+
     public String getOutputName()
     {
         return renderingContext.getOutputName();