This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch open-issues in repository https://gitbox.apache.org/repos/asf/maven-site-plugin.git
commit 39d5e3635329932ed113c99adfe90d3b2c5940f1 Author: Michael Osipov <[email protected]> AuthorDate: Sun Apr 16 00:24:30 2023 +0200 [MSITE-958] Rewrite sitemap generator to a rendender --- src/it/projects/MSITE-856/verify.bsh | 35 ----- src/it/projects/site-sd-lang/pom.xml | 1 + src/it/projects/site-sd-lang/src/site/site.xml | 1 + .../projects/site-sd-lang/src/site/site_de_AT.xml | 1 + .../projects/site-sd-lang/src/site/site_de_DE.xml | 1 + src/it/projects/site-sd-lang/src/site/site_fr.xml | 1 + .../site/render/AbstractSiteRenderingMojo.java | 28 ++++ .../apache/maven/plugins/site/render/SiteMojo.java | 14 -- .../{SiteMap.java => SitemapDocumentRenderer.java} | 156 +++++++++++---------- 9 files changed, 113 insertions(+), 125 deletions(-) diff --git a/src/it/projects/MSITE-856/verify.bsh b/src/it/projects/MSITE-856/verify.bsh index 07844732..4ee0e12d 100644 --- a/src/it/projects/MSITE-856/verify.bsh +++ b/src/it/projects/MSITE-856/verify.bsh @@ -22,41 +22,6 @@ import org.codehaus.plexus.util.*; try { - final File generatedSiteDirectory = new File( basedir, "target/generated-site" ); - if ( !generatedSiteDirectory.isDirectory() ) - { - System.err.println( "generated-site is missing or not a directory." ); - return false; - } - - File sitemapXdocFile = new File( generatedSiteDirectory, "xdoc/sitemap.xml" ); - if ( !sitemapXdocFile.isFile() ) - { - System.err.println( "no sitemap.xml!" ); - return false; - } - - String content = FileUtils.fileRead( sitemapXdocFile, "UTF-8" ); - if ( !content.contains( "<li>My first item</li>" ) ) - { - System.err.println( "\"<li>My first item</li>\" not found in sitemap.xml!" ); - return false; - } - - File sitemapGermanXdocFile = new File( generatedSiteDirectory, "de/xdoc/sitemap.xml" ); - if ( !sitemapGermanXdocFile.isFile() ) - { - System.err.println( "no German sitemap.xml!" ); - return false; - } - - content = FileUtils.fileRead( sitemapGermanXdocFile, "UTF-8" ); - if ( !content.contains( "<li>Mein erstes Element</li>" ) ) - { - System.err.println( "\"<li>Mein erstes Element</li>\" not found in German sitemap.xml!" ); - return false; - } - final File siteDirectory = new File( basedir, "target/site" ); if ( !siteDirectory.isDirectory() ) { diff --git a/src/it/projects/site-sd-lang/pom.xml b/src/it/projects/site-sd-lang/pom.xml index 27937e90..26441c98 100755 --- a/src/it/projects/site-sd-lang/pom.xml +++ b/src/it/projects/site-sd-lang/pom.xml @@ -51,6 +51,7 @@ under the License. <version>@project.version@</version> <configuration> <locales>default,en,fr,de,de_DE,de_AT,zh_TW,eo_EU</locales> + <generateSitemap>true</generateSitemap> </configuration> </plugin> </plugins> diff --git a/src/it/projects/site-sd-lang/src/site/site.xml b/src/it/projects/site-sd-lang/src/site/site.xml index 8dd66a1e..8faa7f9c 100644 --- a/src/it/projects/site-sd-lang/src/site/site.xml +++ b/src/it/projects/site-sd-lang/src/site/site.xml @@ -32,6 +32,7 @@ under the License. <item name="Accueil" href="index.html" /> <item name="Contacts" href="contact.html" /> <item name="Retour" href="../index.html" /> + <item name="Sitemap" href="sitemap.html" /> </menu> <menu name="Doc"> <item name="specs" href="doc.html" /> diff --git a/src/it/projects/site-sd-lang/src/site/site_de_AT.xml b/src/it/projects/site-sd-lang/src/site/site_de_AT.xml index b211abdd..f21304d0 100644 --- a/src/it/projects/site-sd-lang/src/site/site_de_AT.xml +++ b/src/it/projects/site-sd-lang/src/site/site_de_AT.xml @@ -32,6 +32,7 @@ under the License. <menu name="${project.name}"> <item name="Einstieg" href="index.html" /> <item name="J�nner" href="jan.html" /> + <item name="Navigations�bersicht" href="sitemap.html" /> </menu> <menu ref="reports"/> </body> diff --git a/src/it/projects/site-sd-lang/src/site/site_de_DE.xml b/src/it/projects/site-sd-lang/src/site/site_de_DE.xml index 60f5822b..8952db43 100644 --- a/src/it/projects/site-sd-lang/src/site/site_de_DE.xml +++ b/src/it/projects/site-sd-lang/src/site/site_de_DE.xml @@ -32,6 +32,7 @@ under the License. <menu name="${project.name}"> <item name="Einstieg" href="index.html" /> <item name="Januar" href="jan.html" /> + <item name="Navigations�bersicht" href="sitemap.html" /> </menu> <menu ref="reports"/> </body> diff --git a/src/it/projects/site-sd-lang/src/site/site_fr.xml b/src/it/projects/site-sd-lang/src/site/site_fr.xml index f24d2b3e..55dc932f 100644 --- a/src/it/projects/site-sd-lang/src/site/site_fr.xml +++ b/src/it/projects/site-sd-lang/src/site/site_fr.xml @@ -33,6 +33,7 @@ under the License. <item name="Accueil" href="index.html" /> <item name="Contacts" href="contact.html" /> <item name="Retour" href="../index.html" /> + <item name="Sitemap" href="sitemap.html" /> </menu> <menu name="Doc"> <item name="specs" href="doc.html" /> diff --git a/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java b/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java index 7ce91550..efa1d98e 100644 --- a/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java +++ b/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java @@ -142,6 +142,14 @@ public abstract class AbstractSiteRenderingMojo extends AbstractSiteDescriptorMo @Parameter(property = "generateProjectInfo", defaultValue = "true") private boolean generateProjectInfo; + /** + * Generate a sitemap. The result will be a "sitemap.html" file at the site root. + * + * @since 2.1 + */ + @Parameter(property = "generateSitemap", defaultValue = "false") + private boolean generateSitemap; + /** * Specifies the input encoding. * @@ -455,6 +463,26 @@ public abstract class AbstractSiteRenderingMojo extends AbstractSiteDescriptorMo getLog().info("Skipped \"" + title + "\" report; file \"" + filename + "\" already exists."); } } + + if (generateSitemap) { + MojoExecution subMojoExecution = + new MojoExecution(mojoExecution.getPlugin(), "sitemap", mojoExecution.getExecutionId()); + DocumentRenderingContext docRenderingContext = new DocumentRenderingContext( + siteDirectory, + subMojoExecution.getGoal(), + subMojoExecution.getPlugin().getId() + ':' + subMojoExecution.getGoal()); + String title = i18n.getString("site-plugin", locale, "site.sitemap.title"); + DocumentRenderer docRenderer = new SitemapDocumentRenderer( + subMojoExecution, docRenderingContext, title, context.getSiteModel(), i18n, getLog()); + + String filename = docRenderer.getOutputName(); + if (!documents.containsKey(filename)) { + documents.put(filename, docRenderer); + } else { + getLog().info("Skipped \"" + title + "\" report; file \"" + filename + "\" already exists."); + } + } + return documents; } diff --git a/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java b/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java index 5725e026..6325b795 100644 --- a/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java +++ b/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java @@ -71,14 +71,6 @@ public class SiteMojo extends AbstractSiteRenderingMojo { @Parameter(property = "generateReports", defaultValue = "true") private boolean generateReports; - /** - * Generate a sitemap. The result will be a "sitemap.html" file at the site root. - * - * @since 2.1 - */ - @Parameter(property = "generateSitemap", defaultValue = "false") - private boolean generateSitemap; - /** * Whether to validate xml input documents. If set to true, <strong>all</strong> input documents in xml format (in * particular xdoc and fml) will be validated and any error will lead to a build failure. @@ -170,12 +162,6 @@ public class SiteMojo extends AbstractSiteRenderingMojo { // 2. then non-Doxia documents (e.g., reports) renderNonDoxiaDocuments(nonDoxiaDocuments, context, outputDir); - if (generateSitemap) { - getLog().info("Generating Sitemap"); - - new SiteMap(getOutputEncoding(), i18n).generate(context.getSiteModel(), generatedSiteDirectory, locale); - } - // 3. Generated docs must be (re-)done afterwards as they are often generated by reports context.getSiteDirectories().clear(); if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { diff --git a/src/main/java/org/apache/maven/plugins/site/render/SiteMap.java b/src/main/java/org/apache/maven/plugins/site/render/SitemapDocumentRenderer.java similarity index 52% rename from src/main/java/org/apache/maven/plugins/site/render/SiteMap.java rename to src/main/java/org/apache/maven/plugins/site/render/SitemapDocumentRenderer.java index afcce6bd..d08a210a 100644 --- a/src/main/java/org/apache/maven/plugins/site/render/SiteMap.java +++ b/src/main/java/org/apache/maven/plugins/site/render/SitemapDocumentRenderer.java @@ -18,111 +18,87 @@ */ package org.apache.maven.plugins.site.render; -import java.io.File; -import java.io.IOException; +import java.io.FileNotFoundException; +import java.io.Writer; import java.util.List; import java.util.Locale; -import org.apache.maven.doxia.module.xdoc.XdocSinkFactory; +import org.apache.commons.lang3.StringUtils; import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.site.Menu; import org.apache.maven.doxia.site.MenuItem; import org.apache.maven.doxia.site.SiteModel; -import org.apache.maven.doxia.tools.SiteTool; +import org.apache.maven.doxia.siterenderer.DocumentRenderingContext; +import org.apache.maven.doxia.siterenderer.RendererException; +import org.apache.maven.doxia.siterenderer.SiteRenderer; +import org.apache.maven.doxia.siterenderer.SiteRenderingContext; +import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink; +import org.apache.maven.plugin.MojoExecution; +import org.apache.maven.plugin.logging.Log; import org.codehaus.plexus.i18n.I18N; +import static org.apache.maven.shared.utils.logging.MessageUtils.buffer; + /** - * Generate a sitemap. + * Renders a sitemap report. * * @author ltheussl * * @since 2.1 */ -public class SiteMap { +public class SitemapDocumentRenderer implements SitePluginReportDocumentRenderer { + private DocumentRenderingContext docRenderingContext; - private String encoding; - private I18N i18n; + private final String reportMojoInfo; - /** - * Constructor sets default values. - * - * @param encoding the default encoding to use when writing the output file. - * @param i18n the default I18N for translations. - */ - public SiteMap(String encoding, I18N i18n) { - this.encoding = encoding; - this.i18n = i18n; - } + String title; - /** - * Get the value of i18n. - * - * @return the value of i18n. - */ - public I18N getI18n() { - return i18n; - } + private SiteModel siteModel; - /** - * Set the value of i18n. - * - * @param i18n new value of i18n. - */ - public void setI18n(I18N i18n) { - this.i18n = i18n; - } + private I18N i18n; - /** - * Get the encoding to use when writing the output file. - * - * @return the value of encoding. - */ - public String getEncoding() { - return encoding; + private final Log log; + + public SitemapDocumentRenderer( + MojoExecution mojoExecution, + DocumentRenderingContext docRenderingContext, + String title, + SiteModel siteModel, + I18N i18n, + Log log) { + this.docRenderingContext = docRenderingContext; + this.reportMojoInfo = mojoExecution.getPlugin().getArtifactId() + + ':' + + mojoExecution.getPlugin().getVersion() + + ':' + + mojoExecution.getGoal(); + this.title = title; + this.siteModel = siteModel; + this.i18n = i18n; + this.log = log; } - /** - * Set the encoding to use when writing the output file. - * - * @param enc new value of encoding. - */ - public void setEncoding(String enc) { - this.encoding = enc; - } + public void renderDocument(Writer writer, SiteRenderer siteRenderer, SiteRenderingContext siteRenderingContext) + throws RendererException, FileNotFoundException { + Locale locale = siteRenderingContext.getLocale(); - /** - * Generates a sitemap.xml in targetDir/(locale/)?xdoc/. - * This is a valid xdoc document that can be processed by a Doxia parser. - * The file lists all the menus and menu items of the SiteModel in expanded form. - * - * @param siteModel the SiteModel to extract the menus from. - * @param targetDir the target output directory. The file will be created in targetDir/(locale/)?xdoc/. - * @param locale the Locale for the result. - * - * @throws IOException if the file cannot be ceated. - */ - public void generate(SiteModel siteModel, File targetDir, Locale locale) throws IOException { - File outputDir; - if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - outputDir = new File(new File(targetDir, locale.toString()), "xdoc"); - } else { - outputDir = new File(targetDir, "xdoc"); - } - Sink sink = new XdocSinkFactory().createSink(outputDir, "sitemap.xml", encoding); + String msg = "Generating \"" + buffer().strong(title) + "\" report"; + // CHECKSTYLE_OFF: MagicNumber + log.info((StringUtils.rightPad(msg, 40) + buffer().strong(" --- ").mojo(reportMojoInfo))); + // CHECKSTYLE_ON: MagicNumber - try { - extract(siteModel, sink, locale); - } finally { - sink.close(); - } - } + SiteRendererSink sink = new SiteRendererSink(docRenderingContext); - private void extract(SiteModel siteModel, Sink sink, Locale locale) { sink.head(); + sink.title(); - sink.text(i18n.getString("site-plugin", locale, "site.sitemap.title")); + + sink.text(title); + sink.title_(); + sink.head_(); + sink.body(); sink.section1(); @@ -147,7 +123,14 @@ public class SiteMap { } sink.section1_(); + sink.body_(); + + sink.flush(); + + sink.close(); + + siteRenderer.mergeDocumentIntoSite(writer, sink, siteRenderingContext); } private static void extractItems(List<MenuItem> items, Sink sink) { @@ -178,4 +161,25 @@ public class SiteMap { private static String relativePath(String href) { return href.startsWith("/") ? "." + href : href; } + + public String getOutputName() { + return docRenderingContext.getOutputName(); + } + + public DocumentRenderingContext getRenderingContext() { + return docRenderingContext; + } + + public boolean isOverwrite() { + return true; + } + + public boolean isExternalReport() { + return false; + } + + @Override + public String getReportMojoInfo() { + return reportMojoInfo; + } }
