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 2024/04/19 16:54:57 UTC

(maven-doxia-sitetools) 01/01: [DOXIASITETOOLS-336] Make SiteRenderingContext#siteDirectories editable aware

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

michaelo pushed a commit to branch DOXIASITETOOLS-336
in repository https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git

commit 0b3684af60437163fefeb58d32fbd538793bbfaf
Author: Michael Osipov <mi...@apache.org>
AuthorDate: Thu Apr 18 22:52:35 2024 +0200

    [DOXIASITETOOLS-336] Make SiteRenderingContext#siteDirectories editable aware
---
 .../doxia/siterenderer/DefaultSiteRenderer.java    | 26 +++++++++++----------
 .../maven/doxia/siterenderer/SiteRenderer.java     | 17 +++++++++++---
 .../doxia/siterenderer/SiteRenderingContext.java   | 27 ++++++++++++++++++----
 .../siterenderer/DefaultSiteRendererTest.java      |  3 ++-
 4 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
index 8880371..fdb11d9 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/DefaultSiteRenderer.java
@@ -66,6 +66,7 @@ import org.apache.maven.doxia.parser.module.ParserModuleManager;
 import org.apache.maven.doxia.site.SiteModel;
 import org.apache.maven.doxia.site.skin.SkinModel;
 import org.apache.maven.doxia.site.skin.io.xpp3.SkinXpp3Reader;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext.SiteDirectory;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
 import org.apache.maven.doxia.util.XmlValidator;
 import org.apache.velocity.Template;
@@ -146,29 +147,30 @@ public class DefaultSiteRenderer implements Renderer {
     // SiteRenderer implementation
     // ----------------------------------------------------------------------
 
+    /** {@inheritDoc} */
     public Map<String, DocumentRenderer> locateDocumentFiles(SiteRenderingContext siteRenderingContext)
             throws IOException, RendererException {
-        return locateDocumentFiles(siteRenderingContext, false);
-    }
-
-    /** {@inheritDoc} */
-    public Map<String, DocumentRenderer> locateDocumentFiles(
-            SiteRenderingContext siteRenderingContext, boolean editable) throws IOException, RendererException {
         Map<String, DocumentRenderer> files = new LinkedHashMap<>();
         Map<String, String> moduleExcludes = siteRenderingContext.getModuleExcludes();
 
         // look in every site directory (in general src/site or target/generated-site)
-        for (File siteDirectory : siteRenderingContext.getSiteDirectories()) {
-            if (siteDirectory.exists()) {
+        for (SiteDirectory siteDirectory : siteRenderingContext.getSiteDirectories()) {
+            File siteDirectoryPath = siteDirectory.getPath();
+            if (siteDirectoryPath.exists()) {
                 Collection<ParserModule> modules = parserModuleManager.getParserModules();
                 // use every Doxia parser module
                 for (ParserModule module : modules) {
-                    File moduleBasedir = new File(siteDirectory, module.getSourceDirectory());
+                    File moduleBasedir = new File(siteDirectoryPath, module.getSourceDirectory());
 
                     String excludes = (moduleExcludes == null) ? null : moduleExcludes.get(module.getParserId());
 
                     addModuleFiles(
-                            siteRenderingContext.getRootDirectory(), moduleBasedir, module, excludes, files, editable);
+                            siteRenderingContext.getRootDirectory(),
+                            moduleBasedir,
+                            module,
+                            excludes,
+                            files,
+                            siteDirectory.isEditable());
                 }
             }
         }
@@ -764,8 +766,8 @@ public class DefaultSiteRenderer implements Renderer {
         }
 
         // Copy extra site resources
-        for (File siteDirectory : siteRenderingContext.getSiteDirectories()) {
-            File resourcesDirectory = new File(siteDirectory, "resources");
+        for (SiteDirectory siteDirectory : siteRenderingContext.getSiteDirectories()) {
+            File resourcesDirectory = new File(siteDirectory.getPath(), "resources");
 
             if (resourcesDirectory != null && resourcesDirectory.exists()) {
                 copyDirectory(resourcesDirectory, outputDirectory);
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderer.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderer.java
index 7945b7f..df05f50 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderer.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderer.java
@@ -91,15 +91,26 @@ public interface SiteRenderer {
      * Locate Doxia document source files in the site source context.
      *
      * @param siteRenderingContext the SiteRenderingContext to use
-     * @param editable Doxia document renderer as editable? (should not set editable if generated Doxia source)
      * @return the Doxia document renderers in a Map keyed by output file name.
      * @throws IOException if it bombs.
      * @throws RendererException if it bombs.
-     * @since 1.8
+     * @since 2.0.0
      */
-    Map<String, DocumentRenderer> locateDocumentFiles(SiteRenderingContext siteRenderingContext, boolean editable)
+    Map<String, DocumentRenderer> locateDocumentFiles(SiteRenderingContext siteRenderingContext)
             throws IOException, RendererException;
 
+    /**
+     * @see #locateDocumentFiles(SiteRenderingContext)
+     * @deprecated {@code editable} parameter is ignored since {@link SiteRenderingContext#getSiteDirectories()}
+     *             contain this information on a per-directory basis now.
+     * @since 1.8
+     */
+    @Deprecated
+    default Map<String, DocumentRenderer> locateDocumentFiles(
+            SiteRenderingContext siteRenderingContext, boolean editable) throws IOException, RendererException {
+        return locateDocumentFiles(siteRenderingContext);
+    }
+
     /**
      * Render a document written in a Doxia markup language. This method is an internal method, used by
      * {@link DoxiaDocumentRenderer}.
diff --git a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
index 12733d0..f340fdc 100644
--- a/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
+++ b/doxia-site-renderer/src/main/java/org/apache/maven/doxia/siterenderer/SiteRenderingContext.java
@@ -38,6 +38,25 @@ import org.codehaus.plexus.util.WriterFactory;
  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
  */
 public class SiteRenderingContext {
+
+    public static class SiteDirectory {
+        private File path;
+        private boolean editable;
+
+        public SiteDirectory(File path, boolean editable) {
+            this.path = path;
+            this.editable = editable;
+        }
+
+        public File getPath() {
+            return path;
+        }
+
+        public boolean isEditable() {
+            return editable;
+        }
+    }
+
     private String inputEncoding = ReaderFactory.FILE_ENCODING;
 
     private String outputEncoding = WriterFactory.UTF_8;
@@ -62,7 +81,7 @@ public class SiteRenderingContext {
 
     private File rootDirectory;
 
-    private List<File> siteDirectories = new ArrayList<>();
+    private List<SiteDirectory> siteDirectories = new ArrayList<>();
 
     private Map<String, String> moduleExcludes;
 
@@ -260,9 +279,9 @@ public class SiteRenderingContext {
      * Add a site directory, expected to have a Doxia Site layout, ie one directory per Doxia parser module containing
      * files with parser extension. Typical values are <code>src/site</code> or <code>target/generated-site</code>.
      *
-     * @param siteDirectory a {@link java.io.File} object.
+     * @param siteDirectory a {@link SiteDirectory} object.
      */
-    public void addSiteDirectory(File siteDirectory) {
+    public void addSiteDirectory(SiteDirectory siteDirectory) {
         this.siteDirectories.add(siteDirectory);
     }
 
@@ -271,7 +290,7 @@ public class SiteRenderingContext {
      *
      * @return List of site directories files.
      */
-    public List<File> getSiteDirectories() {
+    public List<SiteDirectory> getSiteDirectories() {
         return siteDirectories;
     }
 
diff --git a/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java b/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
index 6762d50..8a2c04e 100644
--- a/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
+++ b/doxia-site-renderer/src/test/java/org/apache/maven/doxia/siterenderer/DefaultSiteRendererTest.java
@@ -46,6 +46,7 @@ import org.apache.maven.doxia.parser.ParseException;
 import org.apache.maven.doxia.sink.Sink;
 import org.apache.maven.doxia.site.SiteModel;
 import org.apache.maven.doxia.site.io.xpp3.SiteXpp3Reader;
+import org.apache.maven.doxia.siterenderer.SiteRenderingContext.SiteDirectory;
 import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink;
 import org.apache.maven.doxia.xsd.AbstractXmlValidator;
 import org.codehaus.plexus.PlexusContainer;
@@ -330,7 +331,7 @@ public class DefaultSiteRendererTest {
         skin.setFile(skinFile);
         SiteRenderingContext siteRenderingContext =
                 siteRenderer.createContextForSkin(skin, attributes, siteModel, "defaultTitle", Locale.ROOT);
-        siteRenderingContext.addSiteDirectory(getTestFile(siteDir));
+        siteRenderingContext.addSiteDirectory(new SiteDirectory(getTestFile(siteDir), true));
         siteRenderingContext.setValidate(validate);
 
         return siteRenderingContext;