You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2015/05/03 17:35:45 UTC

svn commit: r1677419 - in /sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal: SlingWebContext.java ThymeleafScriptEngine.java

Author: olli
Date: Sun May  3 15:35:45 2015
New Revision: 1677419

URL: http://svn.apache.org/r1677419
Log:
SLING-4686 use ResourceResolver from ScriptContext/Bindings in SlingWebContext

Modified:
    sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java
    sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java

Modified: sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java?rev=1677419&r1=1677418&r2=1677419&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java (original)
+++ sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/SlingWebContext.java Sun May  3 15:35:45 2015
@@ -35,11 +35,7 @@ import org.thymeleaf.context.VariablesMa
 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
 
     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
     }
 
     @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

Modified: sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java?rev=1677419&r1=1677418&r2=1677419&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java (original)
+++ sling/trunk/contrib/scripting/thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngine.java Sun May  3 15:35:45 2015
@@ -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 exten
         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);