Author: kenney
Date: Thu Aug 10 10:20:32 2006
New Revision: 430446
URL: http://svn.apache.org/viewvc?rev=430446&view=rev
Log:
PR: 2410
Add support for multiple sinks for reports.
Update dep on maven-reporting to 2.1-SNAPSHOT to enable the new MavenReport API.
NOTE that the reporting api changes need to be merged to the 2.0.x branch
before a new site plugin can be released, and that the doxia deps on the 2.0.x
branch
need to be updated to 1.0-alpha-9 (currently SNAPSHOT).
Modified:
maven/plugins/trunk/maven-site-plugin/pom.xml
maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
Modified: maven/plugins/trunk/maven-site-plugin/pom.xml
URL:
http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/pom.xml?rev=430446&r1=430445&r2=430446&view=diff
==============================================================================
--- maven/plugins/trunk/maven-site-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-site-plugin/pom.xml Thu Aug 10 10:20:32 2006
@@ -79,7 +79,7 @@
<dependency>
<groupId>org.apache.maven.reporting</groupId>
<artifactId>maven-reporting-api</artifactId>
- <version>2.0.2</version>
+ <version>2.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
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=430446&r1=430445&r2=430446&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
Thu Aug 10 10:20:32 2006
@@ -17,6 +17,8 @@
*/
import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.sink.Sink;
+import org.apache.maven.doxia.sink.SinkFactory;
import org.apache.maven.doxia.siterenderer.DocumentRenderer;
import org.apache.maven.doxia.siterenderer.Renderer;
import org.apache.maven.doxia.siterenderer.RendererException;
@@ -24,11 +26,19 @@
import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.reporting.MavenReport;
+import org.apache.maven.reporting.MavenMultiPageReport;
import org.apache.maven.reporting.MavenReportException;
+import org.apache.maven.reporting.MavenReport;
import java.io.FileNotFoundException;
+import java.io.IOException;
import java.io.Writer;
+import java.io.File;
+import java.io.FileWriter;
+import java.util.ArrayList;
import java.util.Locale;
+import java.util.List;
+import java.util.Iterator;
/**
* Renders a Maven report.
@@ -53,18 +63,84 @@
this.log = log;
}
+ private static class MySink extends SiteRendererSink
+ {
+ private File outputDir;
+
+ private String outputName;
+
+ public MySink( File outputDir, String outputName, RenderingContext ctx
)
+ {
+ super( ctx );
+ this.outputName = outputName;
+ this.outputDir = outputDir;
+ }
+
+ public String getOutputName()
+ {
+ return outputName;
+ }
+
+ public File getOutputDir()
+ {
+ return outputDir;
+ }
+
+ }
+
+ private static class MySinkFactory implements SinkFactory
+ {
+ private RenderingContext context;
+
+ private List sinks = new ArrayList();
+
+ public MySinkFactory( RenderingContext ctx )
+ {
+ this.context = ctx;
+ }
+
+ public Sink createSink( File outputDir, String outputName )
+ {
+ SiteRendererSink sink = new MySink( outputDir, outputName, context
);
+ sinks.add( sink );
+ return sink;
+ }
+
+ public List sinks()
+ {
+ return sinks;
+ }
+ }
+
+
public void renderDocument( Writer writer, Renderer renderer,
SiteRenderingContext siteRenderingContext )
throws RendererException, FileNotFoundException
{
Locale locale = siteRenderingContext.getLocale();
String localReportName = report.getName( locale );
- log.info( "Generate \"" + localReportName + "\" report." );
+ log.info( "Generating \"" + localReportName + "\" report." );
+
+ MySinkFactory sf = new MySinkFactory( renderingContext );
SiteRendererSink sink = new SiteRendererSink( renderingContext );
try
{
- report.generate( sink, locale );
+ if ( report instanceof MavenMultiPageReport )
+ {
+ ( (MavenMultiPageReport) report ).generate( sink, sf, locale );
+ }
+ else
+ {
+ try
+ {
+ report.generate( sink, locale );
+ }
+ catch ( NoSuchMethodError e )
+ {
+ throw new RendererException( "No method on " +
report.getClass(), e );
+ }
+ }
}
catch ( MavenReportException e )
{
@@ -73,6 +149,28 @@
if ( !report.isExternalReport() )
{
+ try
+ {
+ List sinks = sf.sinks();
+
+ log.debug( "Multipage report: " + sinks.size() + "
subreports");
+
+ for ( Iterator it = sinks.iterator(); it.hasNext(); )
+ {
+ MySink mySink = (MySink) it.next();
+
+ log.debug( " Rendering " + mySink.getOutputName() );
+
+ Writer out = new FileWriter( new File(
mySink.getOutputDir(), mySink.getOutputName() ) );
+
+ renderer.generateDocument( out, mySink,
siteRenderingContext );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RendererException( "Cannot create writer", e );
+ }
+
renderer.generateDocument( writer, sink, siteRenderingContext );
}
}