You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2020/02/26 17:13:10 UTC
[sling-org-apache-sling-scripting-bundle-tracker] branch master
updated: SLING-9159 - Switch to the LazyBindings implementation from
org.apache.sling.api
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-bundle-tracker.git
The following commit(s) were added to refs/heads/master by this push:
new 3f9bcad SLING-9159 - Switch to the LazyBindings implementation from org.apache.sling.api
3f9bcad is described below
commit 3f9bcad02e48e4e799903e1ab05c2f43e2e465e6
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed Feb 26 18:12:56 2020 +0100
SLING-9159 - Switch to the LazyBindings implementation from org.apache.sling.api
---
pom.xml | 2 +-
.../bundle/tracker/internal/LazyBindings.java | 78 --------------
.../tracker/internal/ScriptContextProvider.java | 6 +-
.../bundle/tracker/internal/LazyBindingsTest.java | 112 ---------------------
4 files changed, 4 insertions(+), 194 deletions(-)
diff --git a/pom.xml b/pom.xml
index e9b8583..5bf39d4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,7 +114,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.20.0</version>
+ <version>2.21.0</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/LazyBindings.java b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/LazyBindings.java
deleted file mode 100644
index c3c1252..0000000
--- a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/LazyBindings.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you 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.sling.scripting.bundle.tracker.internal;
-
-import java.util.AbstractMap;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Supplier;
-
-import javax.script.SimpleBindings;
-
-class LazyBindings extends SimpleBindings {
-
- private final Map<String, Supplier<Object>> suppliers;
-
- LazyBindings(Map<String, Supplier<Object>> suppliers) {
- this.suppliers = suppliers;
- }
-
- @Override
- public Object get(Object key) {
- if (!super.containsKey(key) && suppliers.containsKey(key)) {
- Object value = suppliers.get(key).get();
- put((String) key, value);
- }
- return super.get(key);
- }
-
- @Override
- public boolean containsKey(Object key) {
- return super.containsKey(key) || suppliers.containsKey(key);
- }
-
- @Override
- public Set<Entry<String, Object>> entrySet() {
- Set<Entry<String, Object>> entrySet = new HashSet<>(super.entrySet());
- for (Map.Entry<String, Supplier<Object>> supplierEntry : suppliers.entrySet()) {
- entrySet.add(new AbstractMap.SimpleEntry<>(supplierEntry.getKey(), supplierEntry.getValue().get()));
- }
- return Collections.unmodifiableSet(entrySet);
- }
-
- @Override
- public Set<String> keySet() {
- Set<String> keySet = new HashSet<>(super.keySet());
- if (!suppliers.isEmpty()) {
- keySet.addAll(suppliers.keySet());
- }
- return Collections.unmodifiableSet(keySet);
- }
-
- @Override
- public Object getOrDefault(Object key, Object defaultValue) {
- if (!super.containsKey(key) && suppliers.containsKey(key)) {
- Object value = suppliers.get(key).get();
- put((String) key, value);
- }
- return super.getOrDefault(key, defaultValue);
- }
-}
diff --git a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/ScriptContextProvider.java b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/ScriptContextProvider.java
index a488598..85b0f98 100644
--- a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/ScriptContextProvider.java
+++ b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/ScriptContextProvider.java
@@ -25,7 +25,6 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import java.util.function.Supplier;
import javax.script.Bindings;
import javax.script.ScriptContext;
@@ -34,13 +33,14 @@ import javax.script.SimpleBindings;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.scripting.LazyBindings;
import org.apache.sling.api.scripting.SlingBindings;
import org.apache.sling.api.scripting.SlingScriptConstants;
import org.apache.sling.scripting.api.BindingsValuesProvider;
import org.apache.sling.scripting.api.BindingsValuesProvidersByContext;
import org.apache.sling.scripting.api.resource.ScriptingResourceResolverProvider;
-import org.apache.sling.scripting.core.ScriptHelper;
import org.apache.sling.scripting.bundle.tracker.BundledRenderUnit;
+import org.apache.sling.scripting.core.ScriptHelper;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
@@ -94,7 +94,7 @@ public class ScriptContextProvider {
bindingsValuesProvider.addBindings(protectedBindings);
}
ScriptContext scriptContext = new BundledScriptContext();
- Map<String, Supplier<Object>> slingBindingsSuppliers = new HashMap<>();
+ Map<String, LazyBindings.Supplier> slingBindingsSuppliers = new HashMap<>();
slingBindingsSuppliers.put(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER,
() -> scriptingResourceResolverProvider.getRequestScopedResourceResolver());
LazyBindings slingScopeBindings = new LazyBindings(Collections.unmodifiableMap(slingBindingsSuppliers));
diff --git a/src/test/java/org/apache/sling/scripting/bundle/tracker/internal/LazyBindingsTest.java b/src/test/java/org/apache/sling/scripting/bundle/tracker/internal/LazyBindingsTest.java
deleted file mode 100644
index 7176ae5..0000000
--- a/src/test/java/org/apache/sling/scripting/bundle/tracker/internal/LazyBindingsTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ~ Licensed to the Apache Software Foundation (ASF) under one
- ~ or more contributor license agreements. See the NOTICE file
- ~ distributed with this work for additional information
- ~ regarding copyright ownership. The ASF licenses this file
- ~ to you 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.sling.scripting.bundle.tracker.internal;
-
-import java.util.AbstractMap;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Supplier;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-public class LazyBindingsTest {
-
- private static final String THE_QUESTION = "the answer";
- private static final int THE_ANSWER = 42;
-
- private Set<String> usedSuppliers;
- private LazyBindings lazyBindings;
-
- @Before
- public void setUp() {
- usedSuppliers = new HashSet<>();
- final Map<String, Supplier<Object>> supplierMap = new HashMap<>();
- supplierMap.put(THE_QUESTION, () -> {
- usedSuppliers.add(THE_QUESTION);
- return THE_ANSWER;
- });
- lazyBindings = new LazyBindings(supplierMap);
- }
-
- @After
- public void tearDown() {
- usedSuppliers = null;
- lazyBindings = null;
- }
-
- @Test
- public void testLazyGet() {
- assertFalse(usedSuppliers.contains(THE_QUESTION));
- assertEquals(THE_ANSWER, lazyBindings.get(THE_QUESTION));
- assertTrue(usedSuppliers.contains(THE_QUESTION));
- assertNull(lazyBindings.get("none"));
- }
-
- @Test
- public void testLazyContainsKey() {
- lazyBindings.put("a", 0);
- assertTrue(lazyBindings.containsKey(THE_QUESTION));
- assertTrue(lazyBindings.containsKey("a"));
- assertFalse(usedSuppliers.contains(THE_QUESTION));
-
- }
-
- @Test
- public void testLazyEntrySet() {
- lazyBindings.put("a", 0);
- Set<Map.Entry<String, Object>> expectedEntrySet = new HashSet<>();
- expectedEntrySet.add(new AbstractMap.SimpleEntry<>(THE_QUESTION, THE_ANSWER));
- expectedEntrySet.add(new AbstractMap.SimpleEntry<>("a", 0));
- assertFalse(usedSuppliers.contains(THE_QUESTION));
- assertEquals(expectedEntrySet, lazyBindings.entrySet());
- assertTrue(usedSuppliers.contains(THE_QUESTION));
- }
-
- @Test
- public void testLazyKeySet() {
- lazyBindings.put("a", 0);
- assertEquals(new HashSet<>(Arrays.asList(THE_QUESTION, "a")), lazyBindings.keySet());
- assertFalse(usedSuppliers.contains(THE_QUESTION));
- }
-
- @Test
- public void testLazyGetOrDefault() {
- lazyBindings.put("a", 0);
- assertEquals(0, lazyBindings.getOrDefault("a", 1));
- assertFalse(usedSuppliers.contains(THE_QUESTION));
- assertEquals(THE_ANSWER, lazyBindings.getOrDefault(THE_QUESTION, THE_ANSWER + 1));
- assertTrue(usedSuppliers.contains(THE_QUESTION));
- assertEquals(1, lazyBindings.getOrDefault("b", 1));
- }
-
-
-
-
-
-}