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 2017/03/04 12:05:18 UTC

svn commit: r1785470 - in /sling/trunk/contrib/scripting/freemarker: ./ src/main/java/org/apache/sling/scripting/freemarker/internal/ src/test/java/org/apache/sling/scripting/freemarker/it/tests/ src/test/resources/apps/freemarker/page/adaptto/

Author: olli
Date: Sat Mar  4 12:05:18 2017
New Revision: 1785470

URL: http://svn.apache.org/viewvc?rev=1785470&view=rev
Log:
SLING-6604 Provide adaptTo as TemplateMethodModel

Added:
    sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java
Modified:
    sling/trunk/contrib/scripting/freemarker/pom.xml
    sling/trunk/contrib/scripting/freemarker/src/test/java/org/apache/sling/scripting/freemarker/it/tests/AdaptToModelIT.java
    sling/trunk/contrib/scripting/freemarker/src/test/resources/apps/freemarker/page/adaptto/html.ftl

Modified: sling/trunk/contrib/scripting/freemarker/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/pom.xml?rev=1785470&r1=1785469&r2=1785470&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/pom.xml (original)
+++ sling/trunk/contrib/scripting/freemarker/pom.xml Sat Mar  4 12:05:18 2017
@@ -171,6 +171,12 @@
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.commons.classloader</artifactId>
+      <version>1.3.8</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.sling</groupId>
       <artifactId>org.apache.sling.commons.osgi</artifactId>
       <version>2.4.0</version>
       <scope>provided</scope>

Added: sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java?rev=1785470&view=auto
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java (added)
+++ sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/AdaptToMethod.java Sat Mar  4 12:05:18 2017
@@ -0,0 +1,65 @@
+/*
+ * 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.freemarker.internal;
+
+import java.util.List;
+
+import freemarker.template.TemplateMethodModelEx;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+import freemarker.template.utility.DeepUnwrap;
+import org.apache.sling.api.adapter.AdapterManager;
+import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Reference;
+
+@Component(
+    service = {
+        TemplateModel.class
+    },
+    property = {
+        "name=adaptTo"
+    }
+)
+public class AdaptToMethod implements TemplateMethodModelEx {
+
+    @Reference
+    private AdapterManager adapterManager;
+
+    @Reference
+    private DynamicClassLoaderManager dynamicClassLoaderManager;
+
+    public AdaptToMethod() {
+    }
+
+    @Override
+    public Object exec(final List arguments) throws TemplateModelException {
+        if (arguments.size() != 2) {
+            throw new TemplateModelException("Wrong number of arguments");
+        }
+        try {
+            final String classname = arguments.get(1).toString();
+            final Class<?> clazz = dynamicClassLoaderManager.getDynamicClassLoader().loadClass(classname);
+            final TemplateModel templateModel = (TemplateModel) arguments.get(0);
+            final Object adaptable = DeepUnwrap.unwrap(templateModel);
+            return adapterManager.getAdapter(adaptable, clazz);
+        } catch (Exception e) {
+            throw new TemplateModelException(e);
+        }
+    }
+
+}

Modified: sling/trunk/contrib/scripting/freemarker/src/test/java/org/apache/sling/scripting/freemarker/it/tests/AdaptToModelIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/test/java/org/apache/sling/scripting/freemarker/it/tests/AdaptToModelIT.java?rev=1785470&r1=1785469&r2=1785470&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/test/java/org/apache/sling/scripting/freemarker/it/tests/AdaptToModelIT.java (original)
+++ sling/trunk/contrib/scripting/freemarker/src/test/java/org/apache/sling/scripting/freemarker/it/tests/AdaptToModelIT.java Sat Mar  4 12:05:18 2017
@@ -27,7 +27,6 @@ import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Configuration;
@@ -68,13 +67,11 @@ public class AdaptToModelIT extends Free
     }
 
     @Test
-    @Ignore
     public void testTitle() {
         assertThat(document.title(), is("Sling Models adaptTo()"));
     }
 
     @Test
-    @Ignore
     public void testPageName() {
         final Element name = document.getElementById("name");
         assertThat(name.text(), is("adaptto"));

Modified: sling/trunk/contrib/scripting/freemarker/src/test/resources/apps/freemarker/page/adaptto/html.ftl
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/test/resources/apps/freemarker/page/adaptto/html.ftl?rev=1785470&r1=1785469&r2=1785470&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/test/resources/apps/freemarker/page/adaptto/html.ftl (original)
+++ sling/trunk/contrib/scripting/freemarker/src/test/resources/apps/freemarker/page/adaptto/html.ftl Sat Mar  4 12:05:18 2017
@@ -17,13 +17,13 @@
     specific language governing permissions and limitations
     under the License.
 -->
-<#assign page = request.adaptTo(statics["org.apache.sling.scripting.freemarker.it.app.Page"].class)>
+<#assign page = adaptTo(request, "org.apache.sling.scripting.freemarker.it.app.Page")>
 <html>
 <head>
   <meta charset="UTF-8"/>
-  <title>${page.title!''?html}</title>
+  <title>${page.title!'title'?html}</title>
 </head>
 <body>
-<span id="name">${page.name!''?html}</span>
+<span id="name">${page.name!'name'?html}</span>
 </body>
 </html>