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();