[MSITE-68] site:run now runs reports and category summary
git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/branches/site-refactor@385825 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java
index 8d79332..ae90e09 100644
--- a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java
+++ b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/AbstractSiteRenderingMojo.java
@@ -24,13 +24,16 @@
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
import org.apache.maven.doxia.site.decoration.DecorationModel;
import org.apache.maven.doxia.site.decoration.Menu;
import org.apache.maven.doxia.site.decoration.MenuItem;
import org.apache.maven.doxia.site.decoration.Skin;
import org.apache.maven.doxia.site.decoration.inheritance.DecorationModelInheritanceAssembler;
import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.RendererException;
import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
@@ -48,6 +51,8 @@
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -642,4 +647,210 @@
menu.addItem( item );
}
}
+
+ protected Map locateReports( List reports, Map documents, Locale locale )
+ {
+ Map reportsByOutputName = new HashMap();
+ for ( Iterator i = reports.iterator(); i.hasNext(); )
+ {
+ MavenReport report = (MavenReport) i.next();
+
+ String outputName = report.getOutputName() + ".html";
+ if ( documents.containsKey( outputName ) )
+ {
+ String displayLanguage = locale.getDisplayLanguage( Locale.ENGLISH );
+
+ getLog().info( "Skipped \"" + report.getName( locale ) + "\" report, file \"" + outputName +
+ "\" already exists for the " + displayLanguage + " version." );
+ i.remove();
+ }
+ else
+ {
+ reportsByOutputName.put( report.getOutputName(), report );
+
+ RenderingContext renderingContext = new RenderingContext( siteDirectory, outputName );
+ ReportDocumentRenderer renderer = new ReportDocumentRenderer( report, renderingContext, getLog() );
+ documents.put( outputName, renderer );
+ }
+ }
+ return reportsByOutputName;
+ }
+
+ protected void populateReportsMenu( DecorationModel decorationModel, Locale locale, Map categories )
+ {
+ Menu menu = decorationModel.getMenuRef( "reports" );
+
+ if ( menu != null )
+ {
+ if ( menu.getName() == null )
+ {
+ menu.setName( i18n.getString( "site-plugin", locale, "report.menu.projectdocumentation" ) );
+ }
+
+ boolean found = false;
+ if ( menu.getItems().isEmpty() )
+ {
+ List categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_INFORMATION );
+ if ( !categoryReports.isEmpty() )
+ {
+ MenuItem item = createCategoryMenu(
+ i18n.getString( "site-plugin", locale, "report.menu.projectinformation" ), "/project-info.html",
+ categoryReports, locale );
+ menu.getItems().add( item );
+ found = true;
+ }
+
+ categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_REPORTS );
+ if ( !categoryReports.isEmpty() )
+ {
+ MenuItem item = createCategoryMenu(
+ i18n.getString( "site-plugin", locale, "report.menu.projectreports" ), "/project-reports.html",
+ categoryReports, locale );
+ menu.getItems().add( item );
+ found = true;
+ }
+ }
+ if ( !found )
+ {
+ decorationModel.removeMenuRef( "reports" );
+ }
+ }
+ }
+
+ private MenuItem createCategoryMenu( String name, String href, List categoryReports, Locale locale )
+ {
+ MenuItem item = new MenuItem();
+ item.setName( name );
+ item.setCollapse( true );
+ item.setHref( href );
+
+ Collections.sort( categoryReports, new ReportComparator( locale ) );
+
+ for ( Iterator k = categoryReports.iterator(); k.hasNext(); )
+ {
+ MavenReport report = (MavenReport) k.next();
+
+ MenuItem subitem = new MenuItem();
+ subitem.setName( report.getName( locale ) );
+ subitem.setHref( report.getOutputName() + ".html" );
+ item.getItems().add( subitem );
+ }
+
+ return item;
+ }
+
+ protected void populateReportItems( DecorationModel decorationModel, Locale locale, Map reportsByOutputName )
+ {
+ for ( Iterator i = decorationModel.getMenus().iterator(); i.hasNext(); )
+ {
+ Menu menu = (Menu) i.next();
+
+ populateItemRefs( menu.getItems(), locale, reportsByOutputName );
+ }
+ }
+
+ private void populateItemRefs( List items, Locale locale, Map reportsByOutputName )
+ {
+ for ( Iterator i = items.iterator(); i.hasNext(); )
+ {
+ MenuItem item = (MenuItem) i.next();
+
+ if ( item.getRef() != null )
+ {
+ if ( reportsByOutputName.containsKey( item.getRef() ) )
+ {
+ MavenReport report = (MavenReport) reportsByOutputName.get( item.getRef() );
+
+ if ( item.getName() == null )
+ {
+ item.setName( report.getName( locale ) );
+ }
+
+ if ( item.getHref() == null || item.getHref().length() == 0 )
+ {
+ item.setHref( report.getOutputName() + ".html" );
+ }
+ }
+ else
+ {
+ getLog().warn( "Unrecognised reference: '" + item.getRef() + "'" );
+ i.remove();
+ }
+ }
+ populateItemRefs( item.getItems(), locale, reportsByOutputName );
+ }
+ }
+
+ protected Map categoriseReports( Collection reports )
+ {
+ Map categories = new HashMap();
+ for ( Iterator i = reports.iterator(); i.hasNext(); )
+ {
+ MavenReport report = (MavenReport) i.next();
+ List categoryReports = (List) categories.get( report.getCategoryName() );
+ if ( categoryReports == null )
+ {
+ categoryReports = new ArrayList();
+ categories.put( report.getCategoryName(), categoryReports );
+ }
+ categoryReports.add( report );
+ }
+ return categories;
+ }
+
+ protected Map locateDocuments( SiteRenderingContext context, List reports, Locale locale )
+ throws IOException, RendererException
+ {
+ Map documents = siteRenderer.locateDocumentFiles( context );
+
+ Map reportsByOutputName = locateReports( reports, documents, locale );
+
+ // TODO: I want to get rid of categories eventually. There's no way to add your own in a fully i18n manner
+ Map categories = categoriseReports( reportsByOutputName.values() );
+
+ populateReportsMenu( context.getDecoration(), locale, categories );
+ populateReportItems( context.getDecoration(), locale, reportsByOutputName );
+
+ if ( categories.containsKey( MavenReport.CATEGORY_PROJECT_INFORMATION ) )
+ {
+ List categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_INFORMATION );
+
+ RenderingContext renderingContext = new RenderingContext( siteDirectory, "project-info.html" );
+ String title = i18n.getString( "site-plugin", locale, "report.information.title" );
+ String desc1 = i18n.getString( "site-plugin", locale, "report.information.description1" );
+ String desc2 = i18n.getString( "site-plugin", locale, "report.information.description2" );
+ DocumentRenderer renderer =
+ new CategorySummaryDocumentRenderer( renderingContext, title, desc1, desc2, i18n, categoryReports );
+
+ if ( !documents.containsKey( renderer.getOutputName() ) )
+ {
+ documents.put( renderer.getOutputName(), renderer );
+ }
+ else
+ {
+ getLog().info( "Category summary '" + renderer.getOutputName() + "' skipped; already exists" );
+ }
+ }
+
+ if ( categories.containsKey( MavenReport.CATEGORY_PROJECT_REPORTS ) )
+ {
+ List categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_REPORTS );
+ RenderingContext renderingContext = new RenderingContext( siteDirectory, "project-reports.html" );
+ String title = i18n.getString( "site-plugin", locale, "report.project.title" );
+ String desc1 = i18n.getString( "site-plugin", locale, "report.project.description1" );
+ String desc2 = i18n.getString( "site-plugin", locale, "report.project.description2" );
+ DocumentRenderer renderer =
+ new CategorySummaryDocumentRenderer( renderingContext, title, desc1, desc2, i18n, categoryReports );
+
+ if ( !documents.containsKey( renderer.getOutputName() ) )
+ {
+ documents.put( renderer.getOutputName(), renderer );
+ }
+ else
+ {
+ getLog().info( "Category summary '" + renderer.getOutputName() + "' skipped; already exists" );
+ }
+ }
+ return documents;
+ }
}
diff --git a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/CategorySummaryDocumentRenderer.java b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/CategorySummaryDocumentRenderer.java
new file mode 100644
index 0000000..1b40a9a
--- /dev/null
+++ b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/CategorySummaryDocumentRenderer.java
@@ -0,0 +1,161 @@
+package org.apache.maven.plugins.site;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.RendererException;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
+import org.apache.maven.reporting.MavenReport;
+import org.codehaus.plexus.i18n.I18N;
+
+import java.io.FileNotFoundException;
+import java.io.Writer;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * Renders a Maven report.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class CategorySummaryDocumentRenderer
+ implements DocumentRenderer
+{
+ private RenderingContext renderingContext;
+
+ private String title;
+
+ private String desc1;
+
+ private String desc2;
+
+ private I18N i18n;
+
+ private List categoryReports;
+
+ public CategorySummaryDocumentRenderer( RenderingContext renderingContext, String title, String desc1, String desc2,
+ I18N i18n, List categoryReports )
+ {
+ this.renderingContext = renderingContext;
+ this.title = title;
+ this.desc1 = desc1;
+ this.desc2 = desc2;
+ this.i18n = i18n;
+ this.categoryReports = Collections.unmodifiableList( categoryReports );
+ }
+
+ public void renderDocument( Writer writer, Renderer renderer, SiteRenderingContext siteRenderingContext )
+ throws RendererException, FileNotFoundException
+ {
+ SiteRendererSink sink = new SiteRendererSink( renderingContext );
+
+ sink.head();
+
+ sink.title();
+
+ sink.text( title );
+
+ sink.title_();
+
+ sink.head_();
+
+ sink.body();
+
+ sink.section1();
+ sink.sectionTitle1();
+ sink.text( title );
+ sink.sectionTitle1_();
+
+ sink.paragraph();
+ sink.text( desc1 + " " );
+ sink.link( "http://maven.apache.org" );
+ sink.text( "Maven" );
+ sink.link_();
+ sink.text( " " + desc2 );
+ sink.paragraph_();
+
+ sink.section2();
+ sink.sectionTitle2();
+ Locale locale = siteRenderingContext.getLocale();
+ sink.text( i18n.getString( "site-plugin", locale, "report.category.sectionTitle" ) );
+ sink.sectionTitle2_();
+
+ sink.table();
+
+ String name = i18n.getString( "site-plugin", locale, "report.category.column.document" );
+ String description = i18n.getString( "site-plugin", locale, "report.category.column.description" );
+
+ sink.tableRow();
+
+ sink.tableHeaderCell();
+
+ sink.text( name );
+
+ sink.tableHeaderCell_();
+
+ sink.tableHeaderCell();
+
+ sink.text( description );
+
+ sink.tableHeaderCell_();
+
+ sink.tableRow_();
+
+ if ( categoryReports != null )
+ {
+ for ( Iterator i1 = categoryReports.iterator(); i1.hasNext(); )
+ {
+ MavenReport report = (MavenReport) i1.next();
+
+ sink.tableRow();
+ sink.tableCell();
+ sink.link( report.getOutputName() + ".html" );
+ sink.text( report.getName( locale ) );
+ sink.link_();
+ sink.tableCell_();
+ sink.tableCell();
+ sink.text( report.getDescription( locale ) );
+ sink.tableCell_();
+ sink.tableRow_();
+ }
+ }
+
+ sink.table_();
+
+ sink.section2_();
+
+ sink.section1_();
+
+ sink.body_();
+
+ sink.flush();
+
+ sink.close();
+
+ renderer.generateDocument( writer, sink, siteRenderingContext );
+ }
+
+ public String getOutputName()
+ {
+ return renderingContext.getOutputName();
+ }
+}
diff --git a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
new file mode 100644
index 0000000..dc699a0
--- /dev/null
+++ b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/ReportDocumentRenderer.java
@@ -0,0 +1,84 @@
+package org.apache.maven.plugins.site;
+
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
+import org.apache.maven.doxia.siterenderer.Renderer;
+import org.apache.maven.doxia.siterenderer.RendererException;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
+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.MavenReportException;
+
+import java.io.FileNotFoundException;
+import java.io.Writer;
+import java.util.Locale;
+
+/**
+ * Renders a Maven report.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class ReportDocumentRenderer
+ implements DocumentRenderer
+{
+ private MavenReport report;
+
+ private RenderingContext renderingContext;
+
+ private Log log;
+
+ public ReportDocumentRenderer( MavenReport report, RenderingContext renderingContext, Log log )
+ {
+ this.report = report;
+
+ this.renderingContext = renderingContext;
+
+ this.log = log;
+ }
+
+ 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." );
+
+ SiteRendererSink sink = new SiteRendererSink( renderingContext );
+
+ try
+ {
+ report.generate( sink, locale );
+ }
+ catch ( MavenReportException e )
+ {
+ throw new RendererException( "Error rendering Maven report: " + e.getMessage(), e );
+ }
+
+ if ( !report.isExternalReport() )
+ {
+ renderer.generateDocument( writer, sink, siteRenderingContext );
+ }
+ }
+
+ public String getOutputName()
+ {
+ return renderingContext.getOutputName();
+ }
+}
diff --git a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
index 4852fcc..5307f45 100644
--- a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
+++ b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java
@@ -16,26 +16,15 @@
* limitations under the License.
*/
-import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
-import org.apache.maven.doxia.site.decoration.DecorationModel;
-import org.apache.maven.doxia.site.decoration.Menu;
-import org.apache.maven.doxia.site.decoration.MenuItem;
import org.apache.maven.doxia.siterenderer.RendererException;
import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
-import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.reporting.MavenReport;
-import org.apache.maven.reporting.MavenReportException;
import java.io.File;
-import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -104,10 +93,6 @@
renderLocale( locale, filteredReports );
}
}
- catch ( MavenReportException e )
- {
- throw new MojoExecutionException( "Error during report generation", e );
- }
catch ( RendererException e )
{
throw new MojoExecutionException( "Error during page generation", e );
@@ -119,316 +104,24 @@
}
private void renderLocale( Locale locale, List reports )
- throws IOException, RendererException, MavenReportException, MojoFailureException, MojoExecutionException
+ throws IOException, RendererException, MojoFailureException, MojoExecutionException
{
- File outputDirectory = getOutputDirectory( locale );
-
SiteRenderingContext context = createSiteRenderingContext( locale );
- Map documents = siteRenderer.locateDocumentFiles( context );
+ Map documents = locateDocuments( context, reports, locale );
- Map reportsByOutputName = new HashMap();
+ File outputDirectory = getOutputDirectory( locale );
+
+ // For external reports
for ( Iterator i = reports.iterator(); i.hasNext(); )
{
MavenReport report = (MavenReport) i.next();
-
- reportsByOutputName.put( report.getOutputName(), report );
-
- String outputName = report.getOutputName() + ".html";
- if ( documents.containsKey( outputName ) )
- {
- String displayLanguage = locale.getDisplayLanguage( Locale.ENGLISH );
-
- getLog().info( "Skipped \"" + report.getName( locale ) + "\" report, file \"" + outputName +
- "\" already exists for the " + displayLanguage + " version." );
- i.remove();
- }
- }
-
- // TODO: I want to get rid of categories eventually. There's no way to add your own in a fully i18n manner
- Map categories = categoriseReports( reportsByOutputName.values() );
-
- populateReportsMenu( context.getDecoration(), locale, categories );
- populateReportItems( context.getDecoration(), locale, reportsByOutputName );
-
- if ( categories.containsKey( MavenReport.CATEGORY_PROJECT_INFORMATION ) )
- {
- List categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_INFORMATION );
- writeSummaryPage( categoryReports, locale, "project-info.html", context, outputDirectory,
- i18n.getString( "site-plugin", locale, "report.information.title" ),
- i18n.getString( "site-plugin", locale, "report.information.description1" ),
- i18n.getString( "site-plugin", locale, "report.information.description2" ) );
- }
-
- if ( categories.containsKey( MavenReport.CATEGORY_PROJECT_REPORTS ) )
- {
- List categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_REPORTS );
- writeSummaryPage( categoryReports, locale, "project-reports.html", context, outputDirectory,
- i18n.getString( "site-plugin", locale, "report.project.title" ),
- i18n.getString( "site-plugin", locale, "report.project.description1" ),
- i18n.getString( "site-plugin", locale, "report.project.description2" ) );
- }
-
- renderDocuments( documents, reportsByOutputName.values(), outputDirectory, locale, context );
- }
-
- private void renderDocuments( Map documents, Collection reports, File outputDirectory, Locale locale,
- SiteRenderingContext context )
- throws RendererException, IOException, MavenReportException
- {
- for ( Iterator i = reports.iterator(); i.hasNext(); )
- {
- MavenReport report = (MavenReport) i.next();
-
- String outputName = report.getOutputName() + ".html";
-
- String localReportName = report.getName( locale );
- getLog().info( "Generate \"" + localReportName + "\" report." );
-
report.setReportOutputDirectory( outputDirectory );
-
- SiteRendererSink sink = siteRenderer.createSink( new RenderingContext( siteDirectory, outputName ) );
-
- report.generate( sink, locale );
-
- if ( !report.isExternalReport() )
- {
- File outputFile = new File( outputDirectory, outputName );
-
- if ( !outputFile.getParentFile().exists() )
- {
- outputFile.getParentFile().mkdirs();
- }
-
- siteRenderer.generateDocument(
- new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ), sink, context );
- }
}
siteRenderer.render( documents.values(), context, outputDirectory, outputEncoding );
}
- private void writeSummaryPage( List categoryReports, Locale locale, String outputName, SiteRenderingContext context,
- File outputDirectory, String title, String desc1, String desc2 )
- throws RendererException, IOException
- {
- SiteRendererSink sink = siteRenderer.createSink( new RenderingContext( siteDirectory, outputName ) );
-
- sink.head();
-
- sink.title();
-
- sink.text( title );
-
- sink.title_();
-
- sink.head_();
-
- sink.body();
-
- sink.section1();
- sink.sectionTitle1();
- sink.text( title );
- sink.sectionTitle1_();
-
- sink.paragraph();
- sink.text( desc1 + " " );
- sink.link( "http://maven.apache.org" );
- sink.text( "Maven" );
- sink.link_();
- sink.text( " " + desc2 );
- sink.paragraph_();
-
- sink.section2();
- sink.sectionTitle2();
- sink.text( i18n.getString( "site-plugin", locale, "report.category.sectionTitle" ) );
- sink.sectionTitle2_();
-
- sink.table();
-
- String name = i18n.getString( "site-plugin", locale, "report.category.column.document" );
- String description = i18n.getString( "site-plugin", locale, "report.category.column.description" );
-
- sink.tableRow();
-
- sink.tableHeaderCell();
-
- sink.text( name );
-
- sink.tableHeaderCell_();
-
- sink.tableHeaderCell();
-
- sink.text( description );
-
- sink.tableHeaderCell_();
-
- sink.tableRow_();
-
- if ( categoryReports != null )
- {
- for ( Iterator i1 = categoryReports.iterator(); i1.hasNext(); )
- {
- MavenReport report = (MavenReport) i1.next();
-
- sink.tableRow();
- sink.tableCell();
- sink.link( report.getOutputName() + ".html" );
- sink.text( report.getName( locale ) );
- sink.link_();
- sink.tableCell_();
- sink.tableCell();
- sink.text( report.getDescription( locale ) );
- sink.tableCell_();
- sink.tableRow_();
- }
- }
-
- sink.table_();
-
- sink.section2_();
-
- sink.section1_();
-
- sink.body_();
-
- sink.flush();
-
- sink.close();
-
- File outputFile = new File( outputDirectory, outputName );
-
- if ( !outputFile.getParentFile().exists() )
- {
- outputFile.getParentFile().mkdirs();
- }
-
- siteRenderer.generateDocument( new OutputStreamWriter( new FileOutputStream( outputFile ), outputEncoding ),
- sink, context );
- }
-
- private void populateReportsMenu( DecorationModel decorationModel, Locale locale, Map categories )
- {
- Menu menu = decorationModel.getMenuRef( "reports" );
-
- if ( menu != null )
- {
- if ( menu.getName() == null )
- {
- menu.setName( i18n.getString( "site-plugin", locale, "report.menu.projectdocumentation" ) );
- }
-
- boolean found = false;
- if ( menu.getItems().isEmpty() )
- {
- List categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_INFORMATION );
- if ( !categoryReports.isEmpty() )
- {
- MenuItem item = createCategoryMenu(
- i18n.getString( "site-plugin", locale, "report.menu.projectinformation" ), "/project-info.html",
- categoryReports, locale );
- menu.getItems().add( item );
- found = true;
- }
-
- categoryReports = (List) categories.get( MavenReport.CATEGORY_PROJECT_REPORTS );
- if ( !categoryReports.isEmpty() )
- {
- MenuItem item = createCategoryMenu(
- i18n.getString( "site-plugin", locale, "report.menu.projectreports" ), "/project-reports.html",
- categoryReports, locale );
- menu.getItems().add( item );
- found = true;
- }
- }
- if ( !found )
- {
- decorationModel.removeMenuRef( "reports" );
- }
- }
- }
-
- private MenuItem createCategoryMenu( String name, String href, List categoryReports, Locale locale )
- {
- MenuItem item = new MenuItem();
- item.setName( name );
- item.setCollapse( true );
- item.setHref( href );
-
- Collections.sort( categoryReports, new ReportComparator( locale ) );
-
- for ( Iterator k = categoryReports.iterator(); k.hasNext(); )
- {
- MavenReport report = (MavenReport) k.next();
-
- MenuItem subitem = new MenuItem();
- subitem.setName( report.getName( locale ) );
- subitem.setHref( report.getOutputName() + ".html" );
- item.getItems().add( subitem );
- }
-
- return item;
- }
-
- private Map categoriseReports( Collection reports )
- {
- Map categories = new HashMap();
- for ( Iterator i = reports.iterator(); i.hasNext(); )
- {
- MavenReport report = (MavenReport) i.next();
- List categoryReports = (List) categories.get( report.getCategoryName() );
- if ( categoryReports == null )
- {
- categoryReports = new ArrayList();
- categories.put( report.getCategoryName(), categoryReports );
- }
- categoryReports.add( report );
- }
- return categories;
- }
-
- private void populateReportItems( DecorationModel decorationModel, Locale locale, Map reportsByOutputName )
- {
- for ( Iterator i = decorationModel.getMenus().iterator(); i.hasNext(); )
- {
- Menu menu = (Menu) i.next();
-
- populateItemRefs( menu.getItems(), locale, reportsByOutputName );
- }
- }
-
- private void populateItemRefs( List items, Locale locale, Map reportsByOutputName )
- {
- for ( Iterator i = items.iterator(); i.hasNext(); )
- {
- MenuItem item = (MenuItem) i.next();
-
- if ( item.getRef() != null )
- {
- if ( reportsByOutputName.containsKey( item.getRef() ) )
- {
- MavenReport report = (MavenReport) reportsByOutputName.get( item.getRef() );
-
- if ( item.getName() == null )
- {
- item.setName( report.getName( locale ) );
- }
-
- if ( item.getHref() == null || item.getHref().length() == 0 )
- {
- item.setHref( report.getOutputName() + ".html" );
- }
- }
- else
- {
- getLog().warn( "Unrecognised reference: '" + item.getRef() + "'" );
- i.remove();
- }
- }
- populateItemRefs( item.getItems(), locale, reportsByOutputName );
- }
- }
-
private File getOutputDirectory( Locale locale )
{
File file;
diff --git a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java
index 3bbb962..88319ff 100644
--- a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java
+++ b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteRunMojo.java
@@ -134,7 +134,6 @@
WebAppContext webapp = new WebAppContext();
webapp.setContextPath( "/" );
webapp.setResourceBase( tempWebappDirectory.getAbsolutePath() );
- webapp.setAttribute( "siteDirectory", siteDirectory );
webapp.setAttribute( "siteRenderer", siteRenderer );
List filteredReports = filterReports( reports );
@@ -148,10 +147,12 @@
try
{
// TODO
- SiteRenderingContext context = createSiteRenderingContext( Locale.getDefault() );
+ Locale locale = Locale.getDefault();
+ SiteRenderingContext context = createSiteRenderingContext( locale );
webapp.setAttribute( "context", context );
- Map documents = siteRenderer.locateDocumentFiles( context );
+ Map documents = locateDocuments( context, filteredReports, locale );
+
webapp.setAttribute( "documents", documents );
siteRenderer.copyResources( context, new File( siteDirectory, "resources" ), tempWebappDirectory );
diff --git a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java
index 5921f0b..c4d1f0c 100644
--- a/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java
+++ b/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/webapp/DoxiaFilter.java
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext;
+import org.apache.maven.doxia.siterenderer.DocumentRenderer;
import org.apache.maven.doxia.siterenderer.Renderer;
import org.apache.maven.doxia.siterenderer.RendererException;
import org.apache.maven.doxia.siterenderer.SiteRenderingContext;
@@ -29,7 +29,6 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
-import java.io.File;
import java.io.IOException;
import java.util.Map;
@@ -41,8 +40,6 @@
public class DoxiaFilter
implements Filter
{
- private File siteDirectory;
-
private Renderer siteRenderer;
private SiteRenderingContext context;
@@ -53,7 +50,6 @@
throws ServletException
{
ServletContext servletContext = filterConfig.getServletContext();
- siteDirectory = (File) servletContext.getAttribute( "siteDirectory" );
siteRenderer = (Renderer) servletContext.getAttribute( "siteRenderer" );
context = (SiteRenderingContext) servletContext.getAttribute( "context" );
documents = (Map) servletContext.getAttribute( "documents" );
@@ -72,8 +68,8 @@
try
{
- siteRenderer.renderDocument( servletResponse.getWriter(), (RenderingContext) documents.get( path ),
- context );
+ DocumentRenderer renderer = (DocumentRenderer) documents.get( path );
+ renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context );
}
catch ( RendererException e )
{