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

thiagohp pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tapestry-5.git


The following commit(s) were added to refs/heads/master by this push:
     new 8aa367f30 TAP5-2803: more ES module callback and contribution API 
tweaks
8aa367f30 is described below

commit 8aa367f300f7ace38b98d5b03733e8dd015445dc
Author: Thiago H. de Paula Figueiredo <[email protected]>
AuthorDate: Sat Nov 15 14:45:47 2025 -0300

    TAP5-2803: more ES module callback and contribution API tweaks
---
 .../services/javascript/EsModuleManagerImpl.java   |   1 +
 .../apache/tapestry5/modules/JavaScriptModule.java |   4 +-
 .../javascript/EsModuleConfigurationCallback.java  |  20 +++-
 .../services/javascript/EsModuleManager.java       |  57 ---------
 .../javascript/EsModuleManagerContribution.java    | 131 +++++++++++++++++++++
 .../integration/app1/pages/EsModuleDemo.java       |  10 +-
 .../integration/app1/services/AppModule.java       |  21 ++--
 .../javascript/EsModuleManagerImplTest.java        |   1 +
 8 files changed, 167 insertions(+), 78 deletions(-)

diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
index 6c5f17a47..465640c8d 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImpl.java
@@ -41,6 +41,7 @@ import 
org.apache.tapestry5.services.assets.StreamableResourceSource;
 import org.apache.tapestry5.services.javascript.EsModuleConfigurationCallback;
 import org.apache.tapestry5.services.javascript.EsModuleInitialization;
 import org.apache.tapestry5.services.javascript.EsModuleManager;
+import org.apache.tapestry5.services.javascript.EsModuleManagerContribution;
 import org.apache.tapestry5.services.javascript.ImportPlacement;
 import org.apache.tapestry5.services.javascript.JavaScriptStack;
 
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
index c39c9ef55..e0dc50695 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/modules/JavaScriptModule.java
@@ -69,7 +69,7 @@ import org.apache.tapestry5.services.compatibility.Trait;
 import org.apache.tapestry5.services.javascript.AMDWrapper;
 import org.apache.tapestry5.services.javascript.EsModuleConfigurationCallback;
 import org.apache.tapestry5.services.javascript.EsModuleManager;
-import 
org.apache.tapestry5.services.javascript.EsModuleManager.EsModuleManagerContribution;
+import org.apache.tapestry5.services.javascript.EsModuleManagerContribution;
 import org.apache.tapestry5.services.javascript.EsShim;
 import org.apache.tapestry5.services.javascript.EsShimManager;
 import org.apache.tapestry5.services.javascript.ExtensibleJavaScriptStack;
@@ -651,7 +651,7 @@ public class JavaScriptModule
     {
         for (String moduleName : esShimManager.getShims().keySet())
         {
-            configuration.add(moduleName, EsModuleManager.toBaseContribution(
+            configuration.add(moduleName, EsModuleManagerContribution.base(
                     c -> EsModuleConfigurationCallback.setImport(c, 
moduleName, esShimManager.getUrl(moduleName))));
         }
     }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleConfigurationCallback.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleConfigurationCallback.java
index 229169060..2910f5f00 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleConfigurationCallback.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleConfigurationCallback.java
@@ -19,7 +19,7 @@ import org.apache.tapestry5.json.JSONObject;
  * import map to be generated by the {@linkplain ModuleManager} service at 2 
different times:
  * <ol>
  *     <li>
- *          During webapp, based on on contributions to {@linkplain 
EsModuleManager}.
+ *          During startup, based on on contributions to {@linkplain 
EsModuleManager}.
  *          These are considered global callbacks, since they affect the base
  *          import map used in all requests.
  *     </li>
@@ -29,6 +29,11 @@ import org.apache.tapestry5.json.JSONObject;
  *          a per-request basis by using the 
  *          {@linkplain 
JavaScriptSupport#addEsModuleConfigurationCallback(EsModuleConfigurationCallback)}
 method.
  *     </li>
+ *     <li>
+ *          After the callbacks added in the request are invoked, the
+ *          global per-request ones contributed to {@linkplain 
EsModuleManager} are invoked
+ *          in all requests.
+ *     </li>
  * </ol>
  *
  * @see 
JavaScriptSupport#addEsModuleConfigurationCallback(EsModuleConfigurationCallback)
@@ -55,9 +60,20 @@ public interface EsModuleConfigurationCallback
      * @param id the module id.
      * @param url the module URL.
      */
-    public static void setImport(JSONObject object, String id, String url) 
+    static void setImport(JSONObject object, String id, String url) 
     {
         object.in(IMPORTS_ATTRIBUTE).put(id, url);
     }
     
+    /**
+     * Utility method to create a callback to set or override one module and 
its URL.
+     * @param id the module id.
+     * @param url the module URL.
+     * @return an {@code EsModuleConfigurationCallback} isntace.
+     */
+    static EsModuleConfigurationCallback create(String id, String url)
+    {
+        return (o) -> setImport(o, id, url);
+    }
+    
 }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManager.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManager.java
index 502cf7287..ac46d3817 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManager.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManager.java
@@ -17,7 +17,6 @@ import java.util.List;
 import org.apache.tapestry5.dom.Element;
 import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
 import org.apache.tapestry5.json.JSONArray;
-import 
org.apache.tapestry5.services.javascript.EsModuleManager.EsModuleManagerContribution;
 
 /**
  * Responsible for managing access to the ES modules. This service's 
distributed
@@ -69,61 +68,5 @@ public interface EsModuleManager
      * module initializations.
      */
     void writeInitialization(Element body, List<String> libraryURLs, 
List<JSONArray> inits);
-    
-    /**
-     * Creates a global per-request contribution (one that contributes a 
callback used 
-     * in all requests after the callbacks added through 
-     * {@linkplain 
JavaScriptSupport#addEsModuleConfigurationCallback(EsModuleConfigurationCallback)}
 
-     * were called).
-     * @param callback an {@linkplain EsModuleConfigurationCallback} instance.
-     * @return a corresponding {@linkplain EsModuleManagerContribution}.
-     */
-    static EsModuleManagerContribution 
toGlobalPerRequestContribution(EsModuleConfigurationCallback callback)
-    {
-        return new EsModuleManagerContribution(callback, false);
-    }
-
-    /**
-     * Creates a base contribution (one that contributes a callback used 
-     * when creating the base import map to be used for all requests).
-     * @param callback an {@linkplain EsModuleConfigurationCallback} instance.
-     * @return a corresponding {@linkplain EsModuleManagerContribution}.
-     */
-    static EsModuleManagerContribution 
toBaseContribution(EsModuleConfigurationCallback callback)
-    {
-        return new EsModuleManagerContribution(callback, true);
-    }
-
-    /**
-     * Encapsulates a contribution to {@linkplain EsModuleManager}.
-     *
-     * @since 5.10.0
-     * @see EsModuleManager
-     * @see EsModuleConfigurationCallback
-     */
-    public final class EsModuleManagerContribution
-    {
-        private final EsModuleConfigurationCallback callback;
-        
-        private final boolean isBase;
-        
-        private EsModuleManagerContribution(EsModuleConfigurationCallback 
callback, boolean isBase) 
-        {
-            super();
-            this.callback = callback;
-            this.isBase = isBase;
-        }
-        
-        public EsModuleConfigurationCallback getCallback() 
-        {
-            return callback;
-        }
-        
-        public boolean isBase() 
-        {
-            return isBase;
-        }
-        
-    }
 
 }
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManagerContribution.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManagerContribution.java
new file mode 100644
index 000000000..6997f6c68
--- /dev/null
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/services/javascript/EsModuleManagerContribution.java
@@ -0,0 +1,131 @@
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.services.javascript;
+
+import org.apache.tapestry5.commons.OrderedConfiguration;
+
+/**
+ * Encapsulates a contribution to {@linkplain EsModuleManager}.
+ * Contributions can be of 2 types: base, one that contributes a callback 
+ * used when creating the base import map to be used for all requests;
+ * and global per-request, one that contributes a callback used 
+ * in all requests after the callbacks added through 
+ * {@linkplain 
JavaScriptSupport#addEsModuleConfigurationCallback(EsModuleConfigurationCallback)}
 
+ * were called).
+ *
+ * @since 5.10.0
+ * @see EsModuleManager
+ * @see EsModuleConfigurationCallback
+ */
+public final class EsModuleManagerContribution
+{
+    private final EsModuleConfigurationCallback callback;
+    
+    private final boolean isBase;
+    
+    private EsModuleManagerContribution(EsModuleConfigurationCallback 
callback, boolean isBase) 
+    {
+        super();
+        this.callback = callback;
+        this.isBase = isBase;
+    }
+    
+    public EsModuleConfigurationCallback getCallback() 
+    {
+        return callback;
+    }
+    
+    public boolean isBase() 
+    {
+        return isBase;
+    }
+
+    /**
+     * Creates a base contribution given a callback.
+     * @param callback an {@linkplain EsModuleConfigurationCallback} instance.
+     * @return a corresponding {@linkplain EsModuleManagerContribution}.
+     */
+    public static EsModuleManagerContribution 
base(EsModuleConfigurationCallback callback)
+    {
+        return new EsModuleManagerContribution(callback, true);
+    }
+    
+    /**
+     * Creates a base contribution which sets or overrides 
+     * one module and its URL.
+     * @param id the module id.
+     * @param url the module URL.
+     * @see EsModuleConfigurationCallback#create(String, String).
+     */
+    public static EsModuleManagerContribution base(String id, String url)
+    {
+        return new EsModuleManagerContribution(
+                EsModuleConfigurationCallback.create(id, url), true);
+    }
+
+    /**
+     * Creates a global per-request contribution given a callback.
+     * @param callback an {@linkplain EsModuleConfigurationCallback} instance.
+     * @return a corresponding {@linkplain EsModuleManagerContribution}.
+     */
+    public static EsModuleManagerContribution 
globalPerRequest(EsModuleConfigurationCallback callback)
+    {
+        return new EsModuleManagerContribution(callback, false);
+    }
+    
+    /**
+     * Contributes a base contribution which sets or overrides 
+     * one module and its URL.
+     * @param configuration an {@code 
OrderedConfiguration<EsModuleManagerContribution>}.
+     * @param id the module id.
+     * @param url the module URL.
+     * @see EsModuleConfigurationCallback#create(String, String)
+     */
+    public static void base(
+            OrderedConfiguration<EsModuleManagerContribution> configuration,
+            String id, 
+            String url)
+    {
+        configuration.add(id, base(id, url));
+    }
+    
+    /**
+     * Creates a global per-request contribution which sets or overrides 
+     * one module and its URL.
+     * @param id the module id.
+     * @param url the module URL.
+     * @see EsModuleConfigurationCallback#create(String, String).
+     */
+    public static EsModuleManagerContribution globalPerRequest(String id, 
String url)
+    {
+        return new EsModuleManagerContribution(
+                EsModuleConfigurationCallback.create(id, url), false);
+    }
+    
+    /**
+     * Contributes a global per-thread contribution which sets or overrides 
+     * one module and its URL.
+     * @param configuration an {@code 
OrderedConfiguration<EsModuleManagerContribution>}.
+     * @param id the module id.
+     * @param url the module URL.
+     * @see EsModuleConfigurationCallback#create(String, String)
+     */
+    public static void globalPerRequest(
+            OrderedConfiguration<EsModuleManagerContribution> configuration,
+            String id, 
+            String url)
+    {
+        configuration.add(id, globalPerRequest(id, url));
+    }
+    
+}
\ No newline at end of file
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
index f58e2c674..072207e8c 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/pages/EsModuleDemo.java
@@ -12,6 +12,8 @@
 
 package org.apache.tapestry5.integration.app1.pages;
 
+import static 
org.apache.tapestry5.services.javascript.EsModuleConfigurationCallback.create;
+
 import org.apache.tapestry5.annotations.Import;
 import org.apache.tapestry5.annotations.Property;
 import org.apache.tapestry5.annotations.SetupRender;
@@ -19,7 +21,6 @@ import 
org.apache.tapestry5.integration.app1.services.AppModule;
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.apache.tapestry5.json.JSONArray;
 import org.apache.tapestry5.json.JSONObject;
-import org.apache.tapestry5.services.javascript.EsModuleConfigurationCallback;
 import org.apache.tapestry5.services.javascript.ImportPlacement;
 import org.apache.tapestry5.services.javascript.JavaScriptSupport;
 
@@ -75,13 +76,12 @@ public class EsModuleDemo
         if (overrideEsModuleImportAgain != null && overrideEsModuleImportAgain)
         {
             javaScriptSupport.addEsModuleConfigurationCallback(
-                    o -> EsModuleConfigurationCallback.setImport(o, 
-                            AppModule.OVERRIDDEN_ES_MODULE_ID, 
REQUEST_OVERRIDEN_MODULE_URL));
+                    create(AppModule.OVERRIDDEN_ES_MODULE_ID, 
+                            REQUEST_OVERRIDEN_MODULE_URL));
         }
         
         javaScriptSupport.addEsModuleConfigurationCallback(
-                o -> EsModuleConfigurationCallback.setImport(o, 
-                        AppModule.OVERRIDDEN_GLOBALLY_ES_MODULE_ID, 
+                create(AppModule.OVERRIDDEN_GLOBALLY_ES_MODULE_ID, 
                             
AppModule.OVERRIDDEN_GLOBALLY_ES_MODULE_ORIGINAL_URL));
         
     }
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
index bbdbccdc5..332f7644f 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/integration/app1/services/AppModule.java
@@ -60,8 +60,7 @@ import org.apache.tapestry5.services.LibraryMapping;
 import org.apache.tapestry5.services.ResourceDigestGenerator;
 import org.apache.tapestry5.services.ValueEncoderFactory;
 import org.apache.tapestry5.services.ValueLabelProvider;
-import org.apache.tapestry5.services.javascript.EsModuleManager;
-import 
org.apache.tapestry5.services.javascript.EsModuleManager.EsModuleManagerContribution;
+import org.apache.tapestry5.services.javascript.EsModuleManagerContribution;
 import org.apache.tapestry5.services.pageload.PageCachingReferenceTypeService;
 import org.apache.tapestry5.services.pageload.PagePreloader;
 import org.apache.tapestry5.services.pageload.PreloaderMode;
@@ -511,11 +510,11 @@ public class AppModule
         final String overrideId = "OverrideCallback";
         
         configuration.add(overrideId, 
-                EsModuleManager.toBaseContribution(o -> setImport(o, 
OVERRIDDEN_ES_MODULE_ID, OVERRIDDEN_ES_MODULE_NEW_URL)),
+                EsModuleManagerContribution.base(OVERRIDDEN_ES_MODULE_ID, 
OVERRIDDEN_ES_MODULE_NEW_URL),
                 "after:" + originalId);
         
         configuration.add(originalId, 
-                EsModuleManager.toBaseContribution(
+                EsModuleManagerContribution.base(
                     o -> { 
                         setImport(o, NON_OVERRIDDEN_ES_MODULE_ID, 
NON_OVERRIDDEN_ES_MODULE_URL);
                         setImport(o, OVERRIDDEN_ES_MODULE_ID, 
OVERRIDDEN_ES_MODULE_ORIGINAL_URL);
@@ -526,18 +525,16 @@ public class AppModule
                 .toClientURL();
         
         configuration.add("Outside META-INF", 
-                EsModuleManager.toBaseContribution(o -> setImport(o, 
"outside-metainf", outsideMetaInfAssetUrl)));
+                EsModuleManagerContribution.base("outside-metainf", 
outsideMetaInfAssetUrl));
 
-        configuration.add("External URL", EsModuleManager.toBaseContribution(
-                o -> setImport(o, "external/url", 
"https://example.com/module.js";)));
+        configuration.add("External URL", EsModuleManagerContribution.base(
+                "external/url", "https://example.com/module.js";));
         
         configuration.add("Globally per-request overriden", 
-                EsModuleManager.toGlobalPerRequestContribution(
-                    o -> setImport(o, 
-                            OVERRIDDEN_GLOBALLY_ES_MODULE_ID,
-                            OVERRIDDEN_GLOBALLY_ES_MODULE_NEW_URL)));
+                EsModuleManagerContribution.globalPerRequest(
+                        OVERRIDDEN_GLOBALLY_ES_MODULE_ID,
+                        OVERRIDDEN_GLOBALLY_ES_MODULE_NEW_URL));
         
-
     }
 
 }
diff --git 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
index 055dcac92..5fb723fe2 100644
--- 
a/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
+++ 
b/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/javascript/EsModuleManagerImplTest.java
@@ -43,6 +43,7 @@ public class EsModuleManagerImplTest
         assertEquals(convert(new JSONArray(), false), "");
     }
     
+    @SuppressWarnings("deprecation")
     @Test
     public void test_one_argument()
     {

Reply via email to