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


Reply via email to