From bc035197632fb3b49c441be2b6b6a62d6a3d811c Mon Sep 17 00:00:00 2001 From: Michael Osipov Date: Thu, 18 Apr 2024 22:54:31 +0200 Subject: [PATCH] Magic --- pom.xml | 4 +- .../render/AbstractSiteRenderingMojo.java | 9 +- .../maven/plugins/site/render/SiteMojo.java | 87 +++++++++++-------- .../maven/plugins/site/run/DoxiaBean.java | 15 +--- .../maven/plugins/site/run/DoxiaFilter.java | 22 ----- .../maven/plugins/site/run/SiteRunMojo.java | 12 +-- 6 files changed, 62 insertions(+), 87 deletions(-) diff --git a/pom.xml b/pom.xml index 2d9b24e7..b9f49b47 100644 --- a/pom.xml +++ b/pom.xml @@ -198,8 +198,8 @@ under the License. 8 9.4.53.v20231009 - 2.0.0-M8 - 2.0.0-M16 + 2.0.0-M10 + 2.0.0-M18-SNAPSHOT 3.5.3 1.7.36 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 bd264d45..7a1e3521 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; @@ -132,32 +133,16 @@ private void renderLocale( getLog().info("Validation is switched on, xml input documents will be validated!"); } - // 1.1 locate editable Doxia documents first + // 1. locate all Doxia documents first Map documents = locateDocuments(context, reports, locale); - // 1.2 copy resources + // 2. and copy resources siteRenderer.copyResources(context, outputDirectory); - // 1.3 render editable Doxia documents first - List nonDoxiaDocuments = renderDoxiaDocuments(documents, context, outputDirectory, false); + // 3. and finally render Doxia documents + List nonDoxiaDocuments = renderDoxiaDocuments(documents.values(), context, outputDirectory); - context.getSiteDirectories().clear(); - if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - context.addSiteDirectory(new File(generatedSiteDirectory, locale.toString())); - } else { - context.addSiteDirectory(generatedSiteDirectory); - } - - // 2.1 locate generated (non-editable) Doxia documents - Map generatedDocuments = - siteRenderer.locateDocumentFiles(context, false /* not editable */); - - // 2.2 copy generated resources also - siteRenderer.copyResources(context, outputDirectory); - // 2.3 render generated (non-editable) Doxia documents - renderDoxiaDocuments(generatedDocuments, context, outputDirectory, true); - - // 3 then non-Doxia documents (e.g. reports) + // 4. then non-Doxia documents (e.g. reports) renderNonDoxiaDocuments(nonDoxiaDocuments, context, outputDirectory); } @@ -168,33 +153,43 @@ private void renderLocale( * @return the sublist of documents that are not Doxia source files */ private List renderDoxiaDocuments( - Map documents, + Collection documents, SiteRenderingContext context, - File outputDirectory, - boolean generated) + 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); } @@ -203,7 +198,7 @@ private List renderDoxiaDocuments( if (doxiaDocuments.size() > 0) { MessageBuilder mb = buffer(); mb.a("Rendering "); - mb.strong(doxiaDocuments.size() + (generated ? " generated" : "") + " Doxia document" + mb.strong(doxiaDocuments.size() + " Doxia document" + (doxiaDocuments.size() > 1 ? "s" : "")); mb.a(": "); @@ -219,7 +214,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; @@ -231,7 +248,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..01eaef4a 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,15 @@ 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) { + Map documents) { this.context = context; this.documents = documents; - this.generatedSiteContext = generatedSiteContext; } public SiteRenderingContext getContext() { @@ -65,12 +60,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);