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

Reply via email to