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/12/29 10:57:02 UTC
[sling-org-apache-sling-scripting-groovy] branch master updated:
SLING-7338 Make Groovy GStringTemplateEngine available as service
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-groovy.git
The following commit(s) were added to refs/heads/master by this push:
new d4b6999 SLING-7338 Make Groovy GStringTemplateEngine available as service
d4b6999 is described below
commit d4b6999fc85bf20816f0a81eea7af725deb9aeed
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Fri Dec 29 11:56:56 2017 +0100
SLING-7338 Make Groovy GStringTemplateEngine available as service
---
.../scripting/groovy/internal/GspScriptEngine.java | 13 +++---
.../groovy/internal/GspScriptEngineFactory.java | 49 +++++++++++++++++++++-
.../scripting/groovy/it/GroovyTestSupport.java | 4 ++
3 files changed, 56 insertions(+), 10 deletions(-)
diff --git a/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngine.java b/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngine.java
index b7ddf20..bb2f94e 100644
--- a/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngine.java
+++ b/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngine.java
@@ -22,13 +22,10 @@ import java.io.Writer;
import javax.script.Bindings;
import javax.script.ScriptContext;
-import javax.script.ScriptEngineFactory;
import javax.script.ScriptException;
import groovy.lang.Writable;
-import groovy.text.GStringTemplateEngine;
import groovy.text.Template;
-import groovy.text.TemplateEngine;
import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
/**
@@ -36,17 +33,17 @@ import org.apache.sling.scripting.api.AbstractSlingScriptEngine;
*/
public class GspScriptEngine extends AbstractSlingScriptEngine {
- private final TemplateEngine templateEngine;
+ private final GspScriptEngineFactory gspScriptEngineFactory;
- public GspScriptEngine(final ScriptEngineFactory scriptEngineFactory, final ClassLoader classLoader) {
- super(scriptEngineFactory);
- this.templateEngine = new GStringTemplateEngine(classLoader);
+ public GspScriptEngine(final GspScriptEngineFactory gspScriptEngineFactory) {
+ super(gspScriptEngineFactory);
+ this.gspScriptEngineFactory = gspScriptEngineFactory;
}
public Object eval(final Reader reader, final ScriptContext scriptContext) throws ScriptException {
Template template;
try {
- template = templateEngine.createTemplate(reader);
+ template = gspScriptEngineFactory.getTemplateEngine().createTemplate(reader);
} catch (IOException | ClassNotFoundException e) {
throw new ScriptException("Unable to compile GSP script: " + e.getMessage());
}
diff --git a/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngineFactory.java b/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngineFactory.java
index 1d245c0..82bc85c 100644
--- a/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngineFactory.java
+++ b/src/main/java/org/apache/sling/scripting/groovy/internal/GspScriptEngineFactory.java
@@ -16,12 +16,20 @@
*/
package org.apache.sling.scripting.groovy.internal;
+import java.util.Dictionary;
+import java.util.Hashtable;
+
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
+import groovy.text.GStringTemplateEngine;
+import groovy.text.TemplateEngine;
import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
import org.apache.sling.scripting.api.AbstractScriptEngineFactory;
import org.codehaus.groovy.util.ReleaseInfo;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceRegistration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
@@ -51,16 +59,25 @@ public class GspScriptEngineFactory extends AbstractScriptEngineFactory {
private GspScriptEngineFactoryConfiguration configuration;
+ private BundleContext bundleContext;
+
+ private TemplateEngine templateEngine;
+
+ private ServiceRegistration<TemplateEngine> serviceRegistration;
+
private final Logger logger = LoggerFactory.getLogger(GspScriptEngineFactory.class);
public GspScriptEngineFactory() {
}
@Activate
- private void activate(final GspScriptEngineFactoryConfiguration configuration) {
+ private void activate(final GspScriptEngineFactoryConfiguration configuration, final BundleContext bundleContext) {
logger.debug("activating");
this.configuration = configuration;
+ this.bundleContext = bundleContext;
configure(configuration);
+ templateEngine = new GStringTemplateEngine(dynamicClassLoaderManager.getDynamicClassLoader());
+ registerTemplateEngine();
}
@Modified
@@ -73,6 +90,9 @@ public class GspScriptEngineFactory extends AbstractScriptEngineFactory {
@Deactivate
private void deactivate() {
logger.debug("deactivating");
+ unregisterTemplateEngine();
+ templateEngine = null;
+ bundleContext = null;
}
private void configure(final GspScriptEngineFactoryConfiguration configuration) {
@@ -81,16 +101,41 @@ public class GspScriptEngineFactory extends AbstractScriptEngineFactory {
setNames(configuration.names());
}
+ @Override
public String getLanguageName() {
return "Groovy Server Pages";
}
+ @Override
public String getLanguageVersion() {
return ReleaseInfo.getVersion();
}
+ @Override
public ScriptEngine getScriptEngine() {
- return new GspScriptEngine(this, dynamicClassLoaderManager.getDynamicClassLoader());
+ return new GspScriptEngine(this);
+ }
+
+ private void registerTemplateEngine() {
+ if (templateEngine == null) {
+ return;
+ }
+ final Dictionary<String, String> properties = new Hashtable<>();
+ properties.put(Constants.SERVICE_DESCRIPTION, "Groovy's GStringTemplateEngine");
+ properties.put(Constants.SERVICE_VENDOR, "The Apache Software Foundation");
+ logger.info("registering {} as service {} with properties {}", templateEngine, TemplateEngine.class.getName(), properties);
+ serviceRegistration = bundleContext.registerService(TemplateEngine.class, templateEngine, properties);
+ }
+
+ private void unregisterTemplateEngine() {
+ if (serviceRegistration != null) {
+ serviceRegistration.unregister();
+ serviceRegistration = null;
+ }
+ }
+
+ TemplateEngine getTemplateEngine() {
+ return templateEngine;
}
}
diff --git a/src/test/java/org/apache/sling/scripting/groovy/it/GroovyTestSupport.java b/src/test/java/org/apache/sling/scripting/groovy/it/GroovyTestSupport.java
index 8aad7f5..bd29f5b 100644
--- a/src/test/java/org/apache/sling/scripting/groovy/it/GroovyTestSupport.java
+++ b/src/test/java/org/apache/sling/scripting/groovy/it/GroovyTestSupport.java
@@ -22,6 +22,7 @@ import javax.inject.Inject;
import javax.script.ScriptEngineFactory;
import aQute.bnd.osgi.Constants;
+import groovy.text.TemplateEngine;
import org.apache.sling.api.servlets.ServletResolver;
import org.apache.sling.auth.core.AuthenticationSupport;
import org.apache.sling.engine.SlingRequestProcessor;
@@ -58,6 +59,9 @@ public class GroovyTestSupport extends TestSupport {
@Filter(value = "(names=gsp)")
protected ScriptEngineFactory scriptEngineFactory;
+ @Inject
+ protected TemplateEngine templateEngine;
+
public Option baseConfiguration() {
return composite(
super.baseConfiguration(),
--
To stop receiving notification emails like this one, please contact
['"commits@sling.apache.org" <co...@sling.apache.org>'].