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:17:14 UTC
[maven-site-plugin] branch open-issues updated: [MSITE-958] Rewrite sitemap generator to a rendender
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
The following commit(s) were added to refs/heads/open-issues by this push:
new 128374c4 [MSITE-958] Rewrite sitemap generator to a rendender
128374c4 is described below
commit 128374c4ca91f89177737aee03b4ecb2f6f9d3b8
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;
+ }
}