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 2011/03/14 23:54:46 UTC

svn commit: r1081601 - /maven/plugins/branches/MSITE-560/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java

Author: hboutemy
Date: Mon Mar 14 22:54:46 2011
New Revision: 1081601

URL: http://svn.apache.org/viewvc?rev=1081601&view=rev
Log:
added Maven 2.2 reflection-based MavenMultiPageReport support

Modified:
    maven/plugins/branches/MSITE-560/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java

Modified: maven/plugins/branches/MSITE-560/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
URL: http://svn.apache.org/viewvc/maven/plugins/branches/MSITE-560/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java?rev=1081601&r1=1081600&r2=1081601&view=diff
==============================================================================
--- maven/plugins/branches/MSITE-560/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java (original)
+++ maven/plugins/branches/MSITE-560/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java Mon Mar 14 22:54:46 2011
@@ -24,6 +24,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;
@@ -215,7 +217,11 @@ public class ReportDocumentRenderer
                 // extended multi-page API
                 ( (MavenMultiPageReport) report ).generate( sink, sf, locale );
             }
-            else // TODO: insert Maven 2 reflection-based MavenMultiPageReport detection
+            else if ( generateMultiPage( locale, sf, sink ) )
+            {
+             // extended multi-page API for Maven 2.2, only accessible by reflection API
+            }
+            else
             {
                 // old single-page-only API
                 report.generate( sink, locale );
@@ -277,6 +283,47 @@ public class ReportDocumentRenderer
         }
     }
 
+    /**
+     * Try to generate report with extended multi-page API.
+     * 
+     * @return <code>true</code> if the report was compatible with the extended API
+     */
+    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();