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()
{