From b3a063b17f2a2a15b02b179b84103e0bf6330c87 Mon Sep 17 00:00:00 2001 From: Michael Osipov Date: Thu, 18 Apr 2024 21:02:42 +0200 Subject: [PATCH] [MSITE-1006] MSITE-723 causes duplicate document rendering and log output This closes #183 --- .../render/AbstractSiteRenderingMojo.java | 9 +- .../maven/plugins/site/render/SiteMojo.java | 93 ++++++++++--------- .../maven/plugins/site/run/DoxiaBean.java | 17 +--- .../maven/plugins/site/run/DoxiaFilter.java | 22 ----- .../maven/plugins/site/run/SiteRunMojo.java | 12 +-- 5 files changed, 59 insertions(+), 94 deletions(-) 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 8906cbc8..c74ab234 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 @@ -40,6 +40,7 @@ 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.SiteRenderingContext.SiteDirectory; import org.apache.maven.doxia.tools.SiteTool; import org.apache.maven.doxia.tools.SiteToolException; import org.apache.maven.execution.MavenSession; @@ -312,9 +313,11 @@ protected SiteRenderingContext createSiteRenderingContext(Locale locale) // Generate static site context.setRootDirectory(project.getBasedir()); if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - context.addSiteDirectory(new File(siteDirectory, locale.toString())); + context.addSiteDirectory(new SiteDirectory(new File(siteDirectory, locale.toString()), true)); + context.addSiteDirectory(new SiteDirectory(new File(generatedSiteDirectory, locale.toString()), false)); } else { - context.addSiteDirectory(siteDirectory); + context.addSiteDirectory(new SiteDirectory(siteDirectory, true)); + context.addSiteDirectory(new SiteDirectory(generatedSiteDirectory, false)); } if (moduleExcludes != null) { @@ -425,7 +428,7 @@ protected Map> categoriseReports(Collection locateDocuments( SiteRenderingContext context, List reports, Locale locale) throws IOException, RendererException { - Map documents = siteRenderer.locateDocumentFiles(context, true); + Map documents = siteRenderer.locateDocumentFiles(context); Map reportsByOutputName = locateReports(reports, documents, locale); 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 7b261ac7..f6431abc 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 @@ -21,6 +21,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -114,7 +115,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { // issue caused by report, not really by Doxia Site Renderer throw new MojoExecutionException(e.getMessage(), e.getCause()); } - throw new MojoExecutionException("Failed to render reports", e); + throw new MojoExecutionException("Failed to render site", e); } catch (IOException e) { throw new MojoExecutionException("Error during site generation", e); } @@ -125,12 +126,6 @@ private void renderLocale( throws IOException, RendererException, MojoFailureException, MojoExecutionException { SiteRenderingContext context = createSiteRenderingContext(locale); context.addSiteLocales(supportedLocales); - if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - context.addSiteDirectory(new File(generatedSiteDirectory, locale.toString())); - } else { - context.addSiteDirectory(generatedSiteDirectory); - } - context.setInputEncoding(getInputEncoding()); context.setOutputEncoding(getOutputEncoding()); context.setValidate(validate); @@ -138,32 +133,17 @@ private void renderLocale( getLog().info("Validation is switched on, xml input documents will be validated!"); } + // locate all Doxia documents first Map documents = locateDocuments(context, reports, locale); // copy resources siteRenderer.copyResources(context, outputDirectory); - // 1. render Doxia documents first - List nonDoxiaDocuments = renderDoxiaDocuments(documents, context, outputDirectory, false); + // and finally render Doxia documents + List nonDoxiaDocuments = renderDoxiaDocuments(documents.values(), context, outputDirectory); - // 2. then non-Doxia documents (e.g., reports) + // then non-Doxia documents (e.g. reports) renderNonDoxiaDocuments(nonDoxiaDocuments, context, outputDirectory); - - // 3. Generated docs must be (re-)done afterwards as they are often generated by reports - context.getSiteDirectories().clear(); - if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - context.addSiteDirectory(new File(generatedSiteDirectory, locale.toString())); - } else { - context.addSiteDirectory(generatedSiteDirectory); - } - - Map generatedDocuments = - siteRenderer.locateDocumentFiles(context, false /* not editable */); - - renderDoxiaDocuments(generatedDocuments, context, outputDirectory, true); - - // copy generated resources also - siteRenderer.copyResources(context, outputDirectory); } /** @@ -173,33 +153,41 @@ private void renderLocale( * @return the sublist of documents that are not Doxia source files */ private List renderDoxiaDocuments( - Map documents, - SiteRenderingContext context, - File outputDirectory, - boolean generated) + Collection documents, SiteRenderingContext context, File outputDirectory) throws RendererException, IOException { - Map doxiaDocuments = new TreeMap<>(); + List doxiaDocuments = new ArrayList<>(); + List generatedDoxiaDocuments = new ArrayList<>(); List nonDoxiaDocuments = new ArrayList<>(); Map counts = new TreeMap<>(); + Map generatedCounts = new TreeMap<>(); - for (Map.Entry entry : documents.entrySet()) { - DocumentRenderer doc = entry.getValue(); - + for (DocumentRenderer doc : documents) { if (doc instanceof DoxiaDocumentRenderer) { - doxiaDocuments.put(entry.getKey(), doc); - DoxiaDocumentRenderer doxia = (DoxiaDocumentRenderer) doc; + boolean editable = doxia.getRenderingContext().isEditable(); + + if (editable) { + doxiaDocuments.add(doc); + } else { + generatedDoxiaDocuments.add(doc); + } // count documents per parserId String parserId = doxia.getRenderingContext().getParserId(); - Integer count = counts.get(parserId); + Map actualCounts; + if (editable) { + actualCounts = counts; + } else { + actualCounts = generatedCounts; + } + Integer count = actualCounts.get(parserId); if (count == null) { count = 1; } else { count++; } - counts.put(parserId, count); + actualCounts.put(parserId, count); } else { nonDoxiaDocuments.add(doc); } @@ -208,8 +196,7 @@ private List renderDoxiaDocuments( if (doxiaDocuments.size() > 0) { MessageBuilder mb = buffer(); mb.a("Rendering "); - mb.strong(doxiaDocuments.size() + (generated ? " generated" : "") + " Doxia document" - + (doxiaDocuments.size() > 1 ? "s" : "")); + mb.strong(doxiaDocuments.size() + " Doxia document" + (doxiaDocuments.size() > 1 ? "s" : "")); mb.a(": "); boolean first = true; @@ -224,7 +211,29 @@ private List renderDoxiaDocuments( getLog().info(mb.toString()); - siteRenderer.render(doxiaDocuments.values(), context, outputDirectory); + siteRenderer.render(doxiaDocuments, context, outputDirectory); + } + + if (generatedDoxiaDocuments.size() > 0) { + MessageBuilder mb = buffer(); + mb.a("Rendering "); + mb.strong(generatedDoxiaDocuments.size() + " generated Doxia document" + + (generatedDoxiaDocuments.size() > 1 ? "s" : "")); + mb.a(": "); + + boolean first = true; + for (Map.Entry entry : generatedCounts.entrySet()) { + if (first) { + first = false; + } else { + mb.a(", "); + } + mb.strong(entry.getValue() + " " + entry.getKey()); + } + + getLog().info(mb.toString()); + + siteRenderer.render(generatedDoxiaDocuments, context, outputDirectory); } return nonDoxiaDocuments; @@ -236,7 +245,7 @@ private List renderDoxiaDocuments( * @param documents a collection of documents containing non-Doxia source files */ private void renderNonDoxiaDocuments( - List documents, SiteRenderingContext context, File outputDirectory) + Collection documents, SiteRenderingContext context, File outputDirectory) throws RendererException, IOException { Map counts = new TreeMap<>(); diff --git a/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java b/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java index 34f97a9f..505ca28f 100644 --- a/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java +++ b/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java @@ -34,20 +34,13 @@ public class DoxiaBean { private Map documents; - private SiteRenderingContext generatedSiteContext; - /** * @param context context * @param documents documents - * @param generatedSiteContext context of generated content */ - public DoxiaBean( - SiteRenderingContext context, - Map documents, - SiteRenderingContext generatedSiteContext) { + public DoxiaBean(SiteRenderingContext context, Map documents) { this.context = context; this.documents = documents; - this.generatedSiteContext = generatedSiteContext; } public SiteRenderingContext getContext() { @@ -65,12 +58,4 @@ public Map getDocuments() { public void setDocuments(Map documents) { this.documents = documents; } - - public SiteRenderingContext getGeneratedSiteContext() { - return generatedSiteContext; - } - - public void setGeneratedSiteContext(SiteRenderingContext generatedSiteContext) { - this.generatedSiteContext = generatedSiteContext; - } } diff --git a/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java b/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java index 508744b3..9fce1cc3 100644 --- a/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java +++ b/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java @@ -108,7 +108,6 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo // Handle locale request SiteRenderingContext context; Map documents; - SiteRenderingContext generatedSiteContext; String localeWanted = ""; for (Locale locale : localesList) { @@ -132,7 +131,6 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo } context = doxiaBean.getContext(); documents = doxiaBean.getDocuments(); - generatedSiteContext = doxiaBean.getGeneratedSiteContext(); // ---------------------------------------------------------------------- // Handle report and documents @@ -164,26 +162,6 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo } catch (RendererException e) { throw new ServletException(e); } - } else if (generatedSiteContext != null) { - try { - Map locateDocuments = - siteRenderer.locateDocumentFiles(generatedSiteContext, false); - - if (locateDocuments.containsKey(path)) { - DocumentRenderer docRenderer = locateDocuments.get(path); - logDocumentRenderer(path, localeWanted, docRenderer); - String outputName = docRenderer.getOutputName(); - String contentType = MimeTypes.getDefaultMimeByExtension(outputName); - if (contentType != null) { - servletResponse.setContentType(contentType); - } - docRenderer.renderDocument(servletResponse.getWriter(), siteRenderer, generatedSiteContext); - - return; - } - } catch (RendererException e) { - throw new ServletException(e); - } } filterChain.doFilter(servletRequest, servletResponse); diff --git a/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java b/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java index f5430e00..266909c4 100644 --- a/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java +++ b/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java @@ -133,21 +133,11 @@ private WebAppContext createWebApplication() throws MojoExecutionException { i18nContext.setInputEncoding(getInputEncoding()); i18nContext.setOutputEncoding(getOutputEncoding()); - SiteRenderingContext i18nGeneratedSiteContext = createSiteRenderingContext(locale); - i18nGeneratedSiteContext.setInputEncoding(getInputEncoding()); - i18nGeneratedSiteContext.setOutputEncoding(getOutputEncoding()); - i18nGeneratedSiteContext.getSiteDirectories().clear(); - File outputDirectory = getOutputDirectory(locale); List reports = getReports(outputDirectory); Map i18nDocuments = locateDocuments(i18nContext, reports, locale); - if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - i18nGeneratedSiteContext.addSiteDirectory(new File(generatedSiteDirectory, locale.toString())); - } else { - i18nGeneratedSiteContext.addSiteDirectory(generatedSiteDirectory); - } - DoxiaBean doxiaBean = new DoxiaBean(i18nContext, i18nDocuments, i18nGeneratedSiteContext); + DoxiaBean doxiaBean = new DoxiaBean(i18nContext, i18nDocuments); if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { i18nDoxiaContexts.put(locale.toString(), doxiaBean);