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));
-    }
-
-
-
-
-
-}