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 2019/11/14 15:05:41 UTC

[sling-org-apache-sling-scripting-core] branch master updated: SLING-8737 - Add support for lazily-evaluated bindings

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-core.git


The following commit(s) were added to refs/heads/master by this push:
     new 13a7367  SLING-8737 - Add support for lazily-evaluated bindings
13a7367 is described below

commit 13a7367388664d9f7e4035045add5c92412027e2
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Fri Nov 8 18:41:40 2019 +0100

    SLING-8737 - Add support for lazily-evaluated bindings
    
    * switched to the LazyBindings implementation
    * needs several releases for the IT to pass, since the servlets.resolver and resourceresolver
    also depend on the api module
---
 pom.xml                                            | 22 ++++++++++++++++++++--
 .../scripting/core/impl/DefaultSlingScript.java    |  6 +++---
 .../core/impl/helper/ProtectedBindings.java        |  8 +++++++-
 .../sling/scripting/core/it/HtmlScriptingIT.java   | 14 ++++++++++++--
 .../core/it/ScriptingCoreTestSupport.java          | 22 +++++++++++++++-------
 5 files changed, 57 insertions(+), 15 deletions(-)

diff --git a/pom.xml b/pom.xml
index a8b5e70..268ebe2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
     </parent>
 
     <artifactId>org.apache.sling.scripting.core</artifactId>
-    <version>2.0.61-SNAPSHOT</version>
+    <version>2.1.0-SNAPSHOT</version>
 
     <name>Apache Sling Scripting Core</name>
     <description>
@@ -113,7 +113,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.16.0</version>
+            <version>2.21.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -296,5 +296,23 @@
             <version>${org.ops4j.pax.exam.version}</version>
             <scope>test</scope>
         </dependency>
+
+        <!--
+        temporary until a new release of org.apache.sling.testing.paxexam will provide:
+            * o.a.s.resourceresolver >= 1.6.16
+            * o.a.s.servlets.resolver >= 2.5.8
+         -->
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.resourceresolver</artifactId>
+            <version>1.6.15-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.servlets.resolver</artifactId>
+            <version>2.5.7-SNAPSHOT</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
index d6f5f2c..519080d 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java
@@ -53,7 +53,6 @@ import javax.script.Invocable;
 import javax.script.ScriptContext;
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
-import javax.script.SimpleBindings;
 import javax.servlet.Servlet;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
@@ -69,6 +68,7 @@ import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceWrapper;
 import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.api.scripting.LazyBindings;
 import org.apache.sling.api.scripting.ScriptEvaluationException;
 import org.apache.sling.api.scripting.SlingBindings;
 import org.apache.sling.api.scripting.SlingScript;
@@ -209,7 +209,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
                 private Writer writer = (Writer) b.get(OUT);
                 private Writer errorWriter = new LogWriter((Logger) b.get(LOG));
                 private Reader reader = (Reader)b.get(READER);
-                private Bindings slingScope = new SimpleBindings();
+                private Bindings slingScope = new LazyBindings();
 
 
                 /**
@@ -631,7 +631,7 @@ class DefaultSlingScript implements SlingScript, Servlet, ServletConfig {
 
     Bindings verifySlingBindings(final SlingBindings slingBindings) throws IOException {
 
-    	final Bindings bindings = new SimpleBindings();
+        final Bindings bindings = new LazyBindings();
 
         final SlingHttpServletRequest request = slingBindings.getRequest();
 
diff --git a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
index a789a68..c117b37 100644
--- a/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
+++ b/src/main/java/org/apache/sling/scripting/core/impl/helper/ProtectedBindings.java
@@ -25,7 +25,10 @@ import java.util.Set;
 
 import javax.script.Bindings;
 
-public class ProtectedBindings implements Bindings {
+import org.apache.sling.api.scripting.LazyBindings;
+import org.jetbrains.annotations.NotNull;
+
+public class ProtectedBindings extends LazyBindings implements Bindings {
 
     private final Bindings wrapped;
     private final Set<String> protectedKeys;
@@ -90,6 +93,7 @@ public class ProtectedBindings implements Bindings {
      *
      * @return an unmodifiable Set view of the map
      */
+    @NotNull
     public Set<Entry<String, Object>> entrySet() {
         return Collections.unmodifiableSet(wrapped.entrySet());
     }
@@ -107,6 +111,7 @@ public class ProtectedBindings implements Bindings {
      *
      * @return an unmodifiable Set view of the map's keys
      */
+    @NotNull
     public Set<String> keySet() {
         return Collections.unmodifiableSet(wrapped.keySet());
     }
@@ -124,6 +129,7 @@ public class ProtectedBindings implements Bindings {
      *
      * @return an unmodifiable Collection view of the map's values
      */
+    @NotNull
     public Collection<Object> values() {
         return Collections.unmodifiableCollection(wrapped.values());
     }
diff --git a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
index 9714fb2..5f7f4e3 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/HtmlScriptingIT.java
@@ -28,6 +28,7 @@ import org.apache.sling.api.servlets.ServletResolver;
 import org.apache.sling.resource.presence.ResourcePresence;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
@@ -43,8 +44,10 @@ import org.osgi.service.http.HttpService;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingSightly;
 import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingThymeleaf;
+import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
 import static org.hamcrest.Matchers.is;
 import static org.junit.Assert.assertThat;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
 import static org.ops4j.pax.exam.CoreOptions.options;
 import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
 
@@ -83,6 +86,11 @@ public class HtmlScriptingIT extends ScriptingCoreTestSupport {
     @Filter(value = "(path=/content/scripting)")
     private ResourcePresence scripting;
 
+    private Option slingResourceResolver =
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").version(versionResolver);
+    private Option slingServletsResolver =
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version(versionResolver);
+
     @Configuration
     public Option[] configuration() {
         final String workingDirectory = workingDirectory();
@@ -99,8 +107,10 @@ public class HtmlScriptingIT extends ScriptingCoreTestSupport {
                 .asOption(),
             factoryConfiguration("org.apache.sling.resource.presence.internal.ResourcePresenter")
                 .put("path", "/content/scripting")
-                .asOption()
-        ), scriptingCore);
+                .asOption(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.resourceresolver").versionAsInProject(),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").versionAsInProject()
+        ), scriptingCore, slingApi, slingResourceResolver, slingServletsResolver);
     }
 
     @ProbeBuilder
diff --git a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
index d65d977..975d68c 100644
--- a/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
+++ b/src/test/java/org/apache/sling/scripting/core/it/ScriptingCoreTestSupport.java
@@ -40,14 +40,20 @@ public class ScriptingCoreTestSupport extends TestSupport {
 
     final int httpPort = findFreePort();
 
-    final Option scriptingCore = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver.getVersion("org.apache.sling", "org.apache.sling.scripting.core"));
+    final Option scriptingCore = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.core").version(versionResolver);
+    final Option slingApi = mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").version(versionResolver);
+    final Option osgiConverter = mavenBundle().groupId("org.osgi").artifactId("org.osgi.util.converter").version("1.0.0");
+
+
 
     public ModifiableCompositeOption baseConfiguration() {
         final Option slingScripting = slingScripting().remove(scriptingCore);
         return composite(
             super.baseConfiguration(),
             // Sling Scripting
-            slingScripting,
+            composite(remove(new Option[] {slingScripting}, slingApi)),
+            mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.api").versionAsInProject(),
+            osgiConverter,
             newConfiguration("org.apache.felix.http")
                 .put("org.osgi.service.http.port", httpPort)
                 .asOption(),
@@ -82,12 +88,14 @@ public class ScriptingCoreTestSupport extends TestSupport {
         return expanded;
     }
 
-    static Option[] remove(final Option[] options, final Option option) {
+    static Option[] remove(final Option[] options, final Option ... toRemove) {
         final List<Option> expanded = expand(options);
-        if (option instanceof CompositeOption) {
-            expanded.removeAll(Arrays.asList(((CompositeOption) option).getOptions()));
-        } else {
-            expanded.removeAll(Collections.singleton(option));
+        for (Option toRemoveOption : toRemove) {
+            if (toRemoveOption instanceof CompositeOption) {
+                expanded.removeAll(Arrays.asList(((CompositeOption) toRemoveOption).getOptions()));
+            } else {
+                expanded.removeAll(Collections.singleton(toRemoveOption));
+            }
         }
         return expanded.toArray(new Option[0]);
     }