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 2018/01/02 10:28:23 UTC

[sling-org-apache-sling-scripting-freemarker] 03/06: SLING-7339 Use namespace for template models

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

olli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-freemarker.git

commit 1cea7cd8e59fd92fcee5b7b82bcd218054bc095a
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Sat Dec 30 21:48:23 2017 +0100

    SLING-7339 Use namespace for template models
---
 pom.xml                                                   |  7 +++++++
 .../scripting/freemarker/internal/AdaptToMethod.java      |  1 +
 .../internal/FreemarkerScriptEngineFactory.java           | 15 ++++++++++++---
 src/test/resources/apps/freemarker/page/adaptto/html.ftl  |  2 +-
 4 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 9af06ec..a6ddf20 100644
--- a/pom.xml
+++ b/pom.xml
@@ -144,6 +144,13 @@
       <artifactId>org.osgi.service.metatype.annotations</artifactId>
       <scope>provided</scope>
     </dependency>
+    <!-- Apache Commons -->
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.7</version>
+      <scope>provided</scope>
+    </dependency>
     <!-- Apache Felix -->
     <dependency>
       <groupId>org.apache.felix</groupId>
diff --git a/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java b/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java
index 0537fbb..b9c46cc 100644
--- a/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java
+++ b/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java
@@ -32,6 +32,7 @@ import org.osgi.service.component.annotations.Reference;
         TemplateModel.class
     },
     property = {
+        "namespace=sling",
         "name=adaptTo"
     }
 )
diff --git a/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java b/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java
index 597717e..ef11ede 100644
--- a/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java
+++ b/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.scripting.freemarker.internal;
 
+import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -26,6 +27,7 @@ import javax.script.ScriptEngineFactory;
 
 import freemarker.template.Configuration;
 import freemarker.template.TemplateModel;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.commons.osgi.SortingServiceTracker;
 import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
 import org.osgi.framework.BundleContext;
@@ -104,10 +106,17 @@ public class FreemarkerScriptEngineFactory extends AbstractScriptEngineFactory {
         return Configuration.getVersion().toString();
     }
 
-    Map<String, TemplateModel> getTemplateModels() {
-        final Map<String, TemplateModel> models = new HashMap<>();
+    Map<String, Map<String, TemplateModel>> getTemplateModels() {
+        final Map<String, Map<String, TemplateModel>> models = new HashMap<>();
         for (final ServiceReference<TemplateModel> serviceReference : templateModelTracker.getSortedServiceReferences()) {
-            models.put(serviceReference.getProperty("name").toString(), bundleContext.getService(serviceReference));
+            final String namespace = (String) serviceReference.getProperty("namespace");
+            final String name = (String) serviceReference.getProperty("name");
+            if (StringUtils.isNotBlank(namespace) && StringUtils.isNotBlank(name)) {
+                if (!models.containsKey(namespace)) {
+                    models.put(namespace, new HashMap<>());
+                }
+                models.get(namespace).put(name, bundleContext.getService(serviceReference));
+            }
         }
         return models;
     }
diff --git a/src/test/resources/apps/freemarker/page/adaptto/html.ftl b/src/test/resources/apps/freemarker/page/adaptto/html.ftl
index eba6919..10ce5c0 100644
--- a/src/test/resources/apps/freemarker/page/adaptto/html.ftl
+++ b/src/test/resources/apps/freemarker/page/adaptto/html.ftl
@@ -17,7 +17,7 @@
     specific language governing permissions and limitations
     under the License.
 -->
-<#assign page = adaptTo(request, "org.apache.sling.scripting.freemarker.it.app.Page")>
+<#assign page = sling.adaptTo(request, "org.apache.sling.scripting.freemarker.it.app.Page")>
 <html>
 <head>
   <meta charset="UTF-8"/>

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