You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:13:02 UTC

[sling-org-apache-sling-scripting-thymeleaf] 19/27: SLING-4686 use ResourceResolver from ScriptContext/Bindings in SlingWebContext

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.scripting.thymeleaf-0.0.6
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-thymeleaf.git

commit e8ad0e0b9529cddd2f3b39dadd0ed7388dd0d51c
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Sun May 3 15:35:45 2015 +0000

    SLING-4686 use ResourceResolver from ScriptContext/Bindings in SlingWebContext
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/contrib/scripting/thymeleaf@1677419 13f79535-47bb-0310-9956-ffa450edef68
---
 .../thymeleaf/internal/SlingWebContext.java        | 41 ++++++++++++----------
 .../thymeleaf/internal/ThymeleafScriptEngine.java  | 15 ++++++--
 2 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java
index 9520858..88cbf49 100644
--- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java
+++ b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java
@@ -35,11 +35,7 @@ import org.thymeleaf.context.VariablesMap;
 import org.thymeleaf.context.WebContextExecutionInfo;
 import org.thymeleaf.util.Validate;
 
-public class SlingWebContext implements SlingContext, IWebContext {
-
-    private final Locale locale;
-
-    private final VariablesMap<String, Object> variables = new VariablesMap<String, Object>();
+public final class SlingWebContext implements SlingContext, IWebContext {
 
     private final SlingHttpServletRequest servletRequest;
 
@@ -47,10 +43,17 @@ public class SlingWebContext implements SlingContext, IWebContext {
 
     private final ServletContext servletContext;
 
-    public SlingWebContext(final SlingHttpServletRequest servletRequest, final SlingHttpServletResponse servletResponse, final ServletContext servletContext, final Locale locale, final Map<String, ?> variables) {
+    private final ResourceResolver resourceResolver;
+
+    private final Locale locale;
+
+    private final VariablesMap<String, Object> variables = new VariablesMap<String, Object>();
+
+    public SlingWebContext(final SlingHttpServletRequest servletRequest, final SlingHttpServletResponse servletResponse, final ServletContext servletContext, final ResourceResolver resourceResolver, final Locale locale, final Map<String, ?> variables) {
         this.servletRequest = servletRequest;
         this.servletResponse = servletResponse;
         this.servletContext = servletContext;
+        this.resourceResolver = resourceResolver;
         this.locale = locale;
         this.variables.putAll(variables);
     }
@@ -76,38 +79,38 @@ public class SlingWebContext implements SlingContext, IWebContext {
     }
 
     @Override
-    public VariablesMap<String, String[]> getRequestParameters() {
-        throw new UnsupportedOperationException("Deprecated method is not supported.");
+    public ResourceResolver getResourceResolver() {
+        return resourceResolver;
     }
 
     @Override
-    public VariablesMap<String, Object> getRequestAttributes() {
-        throw new UnsupportedOperationException("Deprecated method is not supported.");
+    public Locale getLocale() {
+        return locale;
     }
 
     @Override
-    public VariablesMap<String, Object> getSessionAttributes() {
-        throw new UnsupportedOperationException("Deprecated method is not supported.");
+    public VariablesMap<String, Object> getVariables() {
+        return variables;
     }
 
     @Override
-    public VariablesMap<String, Object> getApplicationAttributes() {
+    public VariablesMap<String, String[]> getRequestParameters() {
         throw new UnsupportedOperationException("Deprecated method is not supported.");
     }
 
     @Override
-    public ResourceResolver getResourceResolver() {
-        return servletRequest.getResourceResolver();
+    public VariablesMap<String, Object> getRequestAttributes() {
+        throw new UnsupportedOperationException("Deprecated method is not supported.");
     }
 
     @Override
-    public VariablesMap<String, Object> getVariables() {
-        return variables;
+    public VariablesMap<String, Object> getSessionAttributes() {
+        throw new UnsupportedOperationException("Deprecated method is not supported.");
     }
 
     @Override
-    public Locale getLocale() {
-        return locale;
+    public VariablesMap<String, Object> getApplicationAttributes() {
+        throw new UnsupportedOperationException("Deprecated method is not supported.");
     }
 
     @Override
diff --git a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java
index 1761946..055e80e 100644
--- a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java
@@ -19,6 +19,7 @@
 package org.apache.sling.scripting.thymeleaf.internal;
 
 import java.io.Reader;
+import java.io.Writer;
 import java.util.Locale;
 
 import javax.script.Bindings;
@@ -28,14 +29,16 @@ import javax.servlet.ServletContext;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.scripting.SlingBindings;
+import org.apache.sling.api.scripting.SlingScriptConstants;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.thymeleaf.context.IContext;
 
-public class ThymeleafScriptEngine extends AbstractSlingScriptEngine {
+public final class ThymeleafScriptEngine extends AbstractSlingScriptEngine {
 
     private final ThymeleafScriptEngineFactory thymeleafScriptEngineFactory;
 
@@ -59,12 +62,18 @@ public class ThymeleafScriptEngine extends AbstractSlingScriptEngine {
         final SlingHttpServletResponse response = helper.getResponse();
         final ServletContext servletContext = null; // only used by Thymeleaf's ServletContextResourceResolver
 
+        ResourceResolver resourceResolver = (ResourceResolver) scriptContext.getAttribute(SlingScriptConstants.ATTR_SCRIPT_RESOURCE_RESOLVER, SlingScriptConstants.SLING_SCOPE);
+        if (resourceResolver == null) {
+            resourceResolver = helper.getScript().getScriptResource().getResourceResolver();
+        }
         final Locale locale = helper.getResponse().getLocale();
+
         final String scriptName = helper.getScript().getScriptResource().getPath();
+        final Writer writer = scriptContext.getWriter();
 
         try {
-            final IContext context = new SlingWebContext(request, response, servletContext, locale, bindings);
-            thymeleafScriptEngineFactory.getTemplateEngine().process(scriptName, context, scriptContext.getWriter());
+            final IContext context = new SlingWebContext(request, response, servletContext, resourceResolver, locale, bindings);
+            thymeleafScriptEngineFactory.getTemplateEngine().process(scriptName, context, writer);
         } catch (Exception e) {
             logger.error("Failure rendering Thymeleaf template '{}': {}", scriptName, e.getMessage());
             throw new ScriptException(e);

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.