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 <[email protected]> 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) {
