You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2015/01/26 15:27:43 UTC

svn commit: r1654811 - in /sling/trunk/contrib/scripting/sightly/engine/src: main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/ main/java/org/apache/sling/scripting/...

Author: fmeschbe
Date: Mon Jan 26 14:27:42 2015
New Revision: 1654811

URL: http://svn.apache.org/r1654811
Log:
SLING-4349 Extend RenderContext to provide access to the ServletResolver resource resolver

Applying slightly modified patch by Radu Cotescu (thanks a lot)

(Change is to not wrap the ResourceResolover since this is not
the task of this feature here. Rather the ScriptResolver providing
the ResourceResolver in the ScriptContext should wrap it in the
first place to prevent closing)

Added:
    sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/
    sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/
    sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImplTest.java   (with props)
Modified:
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/PojoUseProvider.java
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java
    sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/render/RenderContext.java

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/PojoUseProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/PojoUseProvider.java?rev=1654811&r1=1654810&r2=1654811&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/PojoUseProvider.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/PojoUseProvider.java Mon Jan 26 14:27:42 2015
@@ -33,7 +33,6 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.scripting.sightly.ResourceResolution;
 import org.apache.sling.scripting.sightly.impl.compiler.SightlyJavaCompilerService;
-import org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl;
 import org.apache.sling.scripting.sightly.pojo.Use;
 import org.apache.sling.scripting.sightly.render.RenderContext;
 import org.apache.sling.scripting.sightly.use.ProviderOutcome;
@@ -82,7 +81,7 @@ public class PojoUseProvider implements
         Bindings bindings = UseProviderUtils.merge(globalBindings, arguments);
         SlingScriptHelper sling = UseProviderUtils.getHelper(bindings);
         try {
-            ResourceResolver adminResolver = RenderContextImpl.getScriptResourceResolver(renderContext);
+            ResourceResolver adminResolver = renderContext.getScriptResourceResolver();
             Resource resource = ResourceResolution.getResourceForRequest(adminResolver, sling.getRequest());
             Object result = sightlyJavaCompilerService.getInstance(adminResolver, resource, identifier);
             if (result instanceof Use) {

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java?rev=1654811&r1=1654810&r2=1654811&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/RenderUnitProvider.java Mon Jan 26 14:27:42 2015
@@ -76,9 +76,8 @@ public class RenderUnitProvider implemen
     }
 
     private Resource locateResource(Bindings bindings, String script, RenderContext renderContext) {
-        ResourceResolver adminResolver = RenderContextImpl.getScriptResourceResolver(renderContext);
         SlingHttpServletRequest request = (SlingHttpServletRequest) bindings.get(SlingBindings.REQUEST);
-        Resource resource = ResourceResolution.getResourceForRequest(adminResolver, request);
+        Resource resource = ResourceResolution.getResourceForRequest(renderContext.getScriptResourceResolver(), request);
         return ResourceResolution.getResourceFromSearchPath(resource, script);
     }
 }

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java?rev=1654811&r1=1654810&r2=1654811&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/extension/use/ScriptUseProvider.java Mon Jan 26 14:27:42 2015
@@ -32,7 +32,6 @@ import org.apache.sling.api.scripting.Sl
 import org.apache.sling.api.scripting.SlingScript;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.scripting.sightly.impl.engine.SightlyScriptEngineFactory;
-import org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl;
 import org.apache.sling.scripting.sightly.render.RenderContext;
 import org.apache.sling.scripting.sightly.use.ProviderOutcome;
 import org.apache.sling.scripting.sightly.use.UseProvider;
@@ -77,11 +76,7 @@ public class ScriptUseProvider implement
             return ProviderOutcome.failure();
         }
         SlingScriptHelper sling = (SlingScriptHelper) bindings.get(SlingBindings.SLING);
-        ResourceResolver adminResolver = RenderContextImpl.getScriptResourceResolver(renderContext);
-        if (adminResolver == null) {
-            log.warn("Cannot obtain administrative resource resolver for " + scriptName);
-            return ProviderOutcome.failure();
-        }
+        ResourceResolver adminResolver = renderContext.getScriptResourceResolver();
         Resource scriptResource = UseProviderUtils.locateScriptResource(adminResolver, sling, scriptName);
         if (scriptResource == null) {
             log.debug("Path does not match an existing resource: {}", scriptName);

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java?rev=1654811&r1=1654810&r2=1654811&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImpl.java Mon Jan 26 14:27:42 2015
@@ -33,7 +33,6 @@ import java.util.Map;
 import java.util.Set;
 
 import javax.script.Bindings;
-
 import org.apache.commons.lang.StringUtils;
 import org.apache.sling.api.adapter.Adaptable;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -66,14 +65,7 @@ public class RenderContextImpl implement
         this.scriptResourceResolver = scriptResourceResolver;
     }
 
-    public static ResourceResolver getScriptResourceResolver(RenderContext renderContext) {
-        if (renderContext instanceof RenderContextImpl) {
-            return ((RenderContextImpl) renderContext).getScriptResourceResolver();
-        }
-
-        throw new SightlyException("Cannot retrieve Script ResourceResovler from RenderContext " + renderContext);
-    }
-
+    @Override
     public ResourceResolver getScriptResourceResolver() {
         return scriptResourceResolver;
     }
@@ -450,5 +442,4 @@ public class RenderContextImpl implement
         }
         return null;
     }
-
 }

Modified: sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/render/RenderContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/render/RenderContext.java?rev=1654811&r1=1654810&r2=1654811&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/render/RenderContext.java (original)
+++ sling/trunk/contrib/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/render/RenderContext.java Mon Jan 26 14:27:42 2015
@@ -20,7 +20,11 @@ package org.apache.sling.scripting.sight
 
 import javax.script.Bindings;
 
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.servlets.ServletResolver;
+import org.apache.sling.scripting.sightly.extension.RuntimeExtension;
 import org.apache.sling.scripting.sightly.impl.engine.runtime.RenderUnit;
+import org.apache.sling.scripting.sightly.use.UseProvider;
 
 import aQute.bnd.annotation.ProviderType;
 
@@ -45,5 +49,26 @@ public interface RenderContext {
      * @return the {@link RuntimeExtension}'s result
      */
     Object call(String functionName, Object... arguments);
-    
+
+    /**
+     * Returns the {@link ResourceResolver} that was used for resolving the
+     * currently evaluated script. This resolver is the same resolver used by
+     * the {@link ServletResolver} and thus should be used <i>only</i> for
+     * script resolution.
+     * <p>
+     * This {@code ResourceResolver} must not be closed.
+     * <p>
+     * If a {@link RuntimeExtension} or a {@link UseProvider} need to resolve
+     * content, then the {@link ResourceResolver} of the current request should
+     * be used. This can be retrieved by using the following call:
+     *
+     * <pre>
+     * ResourceResolver resolver = (ResourceResolver) renderContext.getBindings().get(SlingBindings.REQUEST).getResourceResolver();
+     * </pre>
+     *
+     * @return the resource resolver used to resolve the currently evaluated
+     *         script
+     */
+    ResourceResolver getScriptResourceResolver();
+
 }

Added: sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImplTest.java?rev=1654811&view=auto
==============================================================================
--- sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImplTest.java (added)
+++ sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImplTest.java Mon Jan 26 14:27:42 2015
@@ -0,0 +1,64 @@
+/*******************************************************************************
+ * 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.sightly.impl.engine.runtime;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.script.Bindings;
+import javax.script.SimpleBindings;
+
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.scripting.sightly.extension.RuntimeExtension;
+import org.apache.sling.scripting.sightly.impl.engine.runtime.RenderContextImpl;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import static org.junit.Assert.*;
+
+@RunWith(MockitoJUnitRunner.class)
+public class RenderContextImplTest {
+
+    private RenderContextImpl renderContext;
+
+    @Mock
+    private ResourceResolver resolver;
+
+    @Before
+    public void setUp() throws Exception {
+        Bindings bindings = new SimpleBindings();
+        Map<String, RuntimeExtension> extensionsMap = new HashMap<String, RuntimeExtension>();
+        renderContext = new RenderContextImpl(bindings, extensionsMap, resolver);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        renderContext = null;
+    }
+
+    @Test
+    public void testGetScriptResourceResolver() throws Exception {
+        ResourceResolver scriptResolver = renderContext.getScriptResourceResolver();
+        assertNotNull("Expected a non-null resource resolver.", scriptResolver);
+    }
+}

Propchange: sling/trunk/contrib/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/runtime/RenderContextImplTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain