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 11:48:58 UTC
svn commit: r1785468 - in /sling/trunk/contrib/scripting/freemarker: ./
src/main/java/org/apache/sling/scripting/freemarker/internal/
Author: olli
Date: Sat Mar 4 11:48:57 2017
New Revision: 1785468
URL: http://svn.apache.org/viewvc?rev=1785468&view=rev
Log:
SLING-6606 Use TemplateModels provided as OSGi services
Modified:
sling/trunk/contrib/scripting/freemarker/pom.xml
sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java
sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java
Modified: sling/trunk/contrib/scripting/freemarker/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/pom.xml?rev=1785468&r1=1785467&r2=1785468&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/pom.xml (original)
+++ sling/trunk/contrib/scripting/freemarker/pom.xml Sat Mar 4 11:48:57 2017
@@ -171,6 +171,12 @@
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.osgi</artifactId>
+ <version>2.4.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.engine</artifactId>
<version>2.6.6</version>
<scope>test</scope>
Modified: sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java?rev=1785468&r1=1785467&r2=1785468&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java (original)
+++ sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngine.java Sat Mar 4 11:48:57 2017
@@ -50,8 +50,11 @@ public class FreemarkerScriptEngine exte
private final TemplateHashModel statics;
- public FreemarkerScriptEngine(ScriptEngineFactory factory) {
- super(factory);
+ private final FreemarkerScriptEngineFactory freemarkerScriptEngineFactory;
+
+ public FreemarkerScriptEngine(final FreemarkerScriptEngineFactory freemarkerScriptEngineFactory) {
+ super(freemarkerScriptEngineFactory);
+ this.freemarkerScriptEngineFactory = freemarkerScriptEngineFactory;
configuration = new Configuration(version);
configuration.setDefaultEncoding(StandardCharsets.UTF_8.name());
beansWrapper = new BeansWrapper(version);
@@ -77,6 +80,7 @@ public class FreemarkerScriptEngine exte
try {
Template tmpl = new Template(scriptName, reader, configuration);
bindings.put("statics", statics);
+ freemarkerScriptEngineFactory.getTemplateModels().forEach(bindings::put);
tmpl.process(bindings, scriptContext.getWriter());
} catch (Throwable t) {
log.error("Failure running Freemarker script.", t);
Modified: sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java?rev=1785468&r1=1785467&r2=1785468&view=diff
==============================================================================
--- sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java (original)
+++ sling/trunk/contrib/scripting/freemarker/src/main/java/org/apache/sling/scripting/freemarker/internal/FreemarkerScriptEngineFactory.java Sat Mar 4 11:48:57 2017
@@ -20,13 +20,19 @@ package org.apache.sling.scripting.freem
import java.io.IOException;
import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Properties;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
+import freemarker.template.TemplateModel;
+import org.apache.sling.commons.osgi.SortingServiceTracker;
import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
+import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
@@ -77,6 +83,10 @@ public class FreemarkerScriptEngineFacto
*/
private final String languageVersion;
+ private BundleContext bundleContext;
+
+ private SortingServiceTracker<TemplateModel> templateModelTracker;
+
private final Logger logger = LoggerFactory.getLogger(FreemarkerScriptEngineFactory.class);
public FreemarkerScriptEngineFactory() {
@@ -111,9 +121,12 @@ public class FreemarkerScriptEngineFacto
}
@Activate
- private void activate(final FreemarkerScriptEngineFactoryConfiguration configuration) {
+ private void activate(final FreemarkerScriptEngineFactoryConfiguration configuration, final BundleContext bundleContext) {
logger.debug("activate");
configure(configuration);
+ this.bundleContext = bundleContext;
+ templateModelTracker = new SortingServiceTracker<>(bundleContext, TemplateModel.class.getName());
+ templateModelTracker.open();
}
@Modified
@@ -125,6 +138,9 @@ public class FreemarkerScriptEngineFacto
@Deactivate
private void deactivate() {
logger.debug("deactivate");
+ templateModelTracker.close();
+ templateModelTracker = null;
+ bundleContext = null;
}
private void configure(final FreemarkerScriptEngineFactoryConfiguration configuration) {
@@ -144,4 +160,13 @@ public class FreemarkerScriptEngineFacto
public String getLanguageVersion() {
return languageVersion;
}
+
+ Map<String, TemplateModel> getTemplateModels() {
+ final Map<String, TemplateModel> models = new HashMap<>();
+ for (final ServiceReference<TemplateModel> serviceReference : templateModelTracker.getSortedServiceReferences()) {
+ models.put(serviceReference.getProperty("name").toString(), bundleContext.getService(serviceReference));
+ }
+ return models;
+ }
+
}