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