You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by mi...@apache.org on 2023/04/16 09:16:55 UTC

[maven-site-plugin] branch SitemapRenderer updated (3d8fd9bb -> 6e53f952)

This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a change to branch SitemapRenderer
in repository https://gitbox.apache.org/repos/asf/maven-site-plugin.git


 discard 3d8fd9bb asfdasf
     new 6e53f952 [MSITE-958] Rewrite sitemap generator to a rendender

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (3d8fd9bb)
            \
             N -- N -- N   refs/heads/SitemapRenderer (6e53f952)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:


[maven-site-plugin] 01/01: [MSITE-958] Rewrite sitemap generator to a rendender

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch SitemapRenderer
in repository https://gitbox.apache.org/repos/asf/maven-site-plugin.git

commit 6e53f952b2755145cc1a1c279ab5372941b5b9ae
Author: Michael Osipov <mi...@apache.org>
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     |  29 ++++
 .../apache/maven/plugins/site/render/SiteMojo.java |  14 --
 .../{SiteMap.java => SitemapDocumentRenderer.java} | 156 +++++++++++----------
 9 files changed, 114 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 bfce47d8..e5dc8ada 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.
      *
@@ -457,6 +465,27 @@ public abstract class AbstractSiteRenderingMojo extends AbstractSiteDescriptorMo
                         + "\" 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 + "\" site-plugin-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 41c81b92..b1477eed 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..7880efb0 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) + "\" site-plugin-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;
+    }
 }