You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by jo...@apache.org on 2022/02/04 08:54:53 UTC

[sling-org-apache-sling-caconfig-impl] 01/01: SLING-11114 Use a LazySupplier for the caconfig binding

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

joerghoh pushed a commit to branch improvement/SLING-11114-use-LazySupplier
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-caconfig-impl.git

commit 09e601e2dca07e210a3d9f45ec5f21fe4d00cdf7
Author: Joerg Hoh <jh...@adobe.com>
AuthorDate: Fri Feb 4 09:53:21 2022 +0100

    SLING-11114 Use a LazySupplier for the caconfig binding
---
 pom.xml                                            | 14 ++++++++++++-
 .../impl/ConfigurationBindingsValueProvider.java   | 24 ++++++++++++++++------
 2 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index 307c67c..52ff6e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.16.4</version>
+            <version>2.21.0</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -204,6 +204,18 @@
             <version>4.1.0</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.util.converter</artifactId>
+            <version>1.0.8</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>org.osgi.util.function</artifactId>
+            <version>1.2.0</version>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies>
 
diff --git a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
index cf75502..5424177 100644
--- a/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
+++ b/src/main/java/org/apache/sling/caconfig/impl/ConfigurationBindingsValueProvider.java
@@ -28,6 +28,7 @@ import javax.script.Bindings;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.LazyBindings;
 import org.apache.sling.caconfig.ConfigurationBuilder;
 import org.apache.sling.caconfig.management.multiplexer.ConfigurationInjectResourceDetectionStrategyMultiplexer;
 import org.apache.sling.caconfig.management.multiplexer.ConfigurationMetadataProviderMultiplexer;
@@ -82,14 +83,25 @@ public class ConfigurationBindingsValueProvider implements BindingsValuesProvide
         if (!enabled) {
             return;
         }
+        if (bindings instanceof LazyBindings) {
+            // it's ok if the Supplier returns null, because Bindings.get(key) is allowed to return null
+            // both when the key is not available and when the value is null.
+            bindings.put(BINDING_VARIABLE, (LazyBindings.Supplier)() -> {
+                Resource resource = detectResourceForInjection(bindings);
+                if (resource == null) {
+                    return null;
+                }
+                return new ConfigMap(resource, configMetadataProvider);
+            });
+        } else { // resolve directly
+            Resource resource = detectResourceForInjection(bindings);
+            if (resource == null) {
+                return;
+            }
 
-        Resource resource = detectResourceForInjection(bindings);
-        if (resource == null) {
-            return;
+            Map<String,Object> configMap = new ConfigMap(resource, configMetadataProvider);
+            bindings.put(BINDING_VARIABLE, configMap);
         }
-
-        Map<String,Object> configMap = new ConfigMap(resource, configMetadataProvider);
-        bindings.put(BINDING_VARIABLE, configMap);
     }
 
     private Resource detectResourceForInjection(Bindings bindings) {