Author: olli
Date: Sun May 15 18:43:18 2016
New Revision: 1743948
URL: http://svn.apache.org/viewvc?rev=1743948&view=rev
Log:
SLING-5075 Upgrade Thymeleaf to 3.0
add support for IEngineContextFactory services and make use of standards
configurable
Modified:
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
Modified:
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java?rev=1743948&r1=1743947&r2=1743948&view=diff
==============================================================================
---
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
(original)
+++
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
Sun May 15 18:43:18 2016
@@ -46,9 +46,12 @@ import org.slf4j.LoggerFactory;
import org.thymeleaf.ITemplateEngine;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.cache.ICacheManager;
+import org.thymeleaf.context.IEngineContextFactory;
import org.thymeleaf.dialect.IDialect;
import org.thymeleaf.linkbuilder.ILinkBuilder;
+import org.thymeleaf.linkbuilder.StandardLinkBuilder;
import org.thymeleaf.messageresolver.IMessageResolver;
+import org.thymeleaf.messageresolver.StandardMessageResolver;
import org.thymeleaf.standard.StandardDialect;
import
org.thymeleaf.templateparser.markup.decoupled.IDecoupledTemplateLogicResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
@@ -116,6 +119,17 @@ public final class ThymeleafScriptEngine
)
private volatile ICacheManager cacheManager;
+ @Reference(
+ cardinality = ReferenceCardinality.OPTIONAL,
+ policy = ReferencePolicy.DYNAMIC,
+ policyOption = ReferencePolicyOption.GREEDY,
+ bind = "setEngineContextFactory",
+ unbind = "unsetEngineContextFactory"
+ )
+ private volatile IEngineContextFactory engineContextFactory;
+
+ private ThymeleafScriptEngineFactoryConfiguration configuration;
+
private BundleContext bundleContext;
private TemplateEngine templateEngine;
@@ -237,9 +251,28 @@ public final class ThymeleafScriptEngine
}
}
+ protected void setEngineContextFactory(final IEngineContextFactory
engineContextFactory) {
+ synchronized (lock) {
+ logger.debug("setting engine context factory '{}'",
engineContextFactory.getClass().getName());
+ if (templateEngine == null || templateEngine.isInitialized()) {
+ serviceTemplateEngine();
+ } else {
+ templateEngine.setEngineContextFactory(engineContextFactory);
+ }
+ }
+ }
+
+ protected void unsetEngineContextFactory(final IEngineContextFactory
engineContextFactory) {
+ synchronized (lock) {
+ logger.debug("unsetting engine context factory '{}'",
engineContextFactory.getClass().getName());
+ serviceTemplateEngine();
+ }
+ }
+
@Activate
private void activate(final ThymeleafScriptEngineFactoryConfiguration
configuration, final BundleContext bundleContext) {
logger.debug("activate");
+ this.configuration = configuration;
this.bundleContext = bundleContext;
configure(configuration);
setupTemplateEngine();
@@ -249,6 +282,7 @@ public final class ThymeleafScriptEngine
@Modified
private void modified(final ThymeleafScriptEngineFactoryConfiguration
configuration) {
logger.debug("modified");
+ this.configuration = configuration;
configure(configuration);
}
@@ -300,28 +334,51 @@ public final class ThymeleafScriptEngine
templateEngine = null;
// setup template engine
final TemplateEngine templateEngine = new TemplateEngine();
+ // Template Resolvers
if (this.templateResolvers != null) {
final Set<ITemplateResolver> templateResolvers = new
HashSet<>(this.templateResolvers);
templateEngine.setTemplateResolvers(templateResolvers);
}
+ // Message Resolvers
if (this.messageResolvers != null) {
final Set<IMessageResolver> messageResolvers = new
HashSet<>(this.messageResolvers);
templateEngine.setMessageResolvers(messageResolvers);
}
+ if (configuration.useStandardMessageResolver()) {
+ final IMessageResolver standardMessageResolver = new
StandardMessageResolver();
+ templateEngine.addMessageResolver(standardMessageResolver);
+ }
+ // Link Builders
if (this.linkBuilders != null) {
final Set<ILinkBuilder> linkBuilders = new
HashSet<>(this.linkBuilders);
templateEngine.setLinkBuilders(linkBuilders);
}
+ if (configuration.useStandardLinkBuilder()) {
+ final ILinkBuilder standardLinkBuilder = new StandardLinkBuilder();
+ templateEngine.addLinkBuilder(standardLinkBuilder);
+ }
+ // Dialects
if (this.dialects != null) {
final Set<IDialect> dialects = new HashSet<>(this.dialects);
templateEngine.setDialects(dialects);
}
- final IDialect standardDialect = new StandardDialect();
- templateEngine.addDialect(standardDialect);
- if (decoupledTemplateLogicResolver != null) {
+ if (configuration.useStandardDialect()) {
+ final IDialect standardDialect = new StandardDialect();
+ templateEngine.addDialect(standardDialect);
+ }
+ // Decoupled Template Logic Resolver
+ if (!configuration.useStandardDecoupledTemplateLogicResolver()) {
templateEngine.setDecoupledTemplateLogicResolver(decoupledTemplateLogicResolver);
}
- templateEngine.setCacheManager(cacheManager);
+ // Cache Manager
+ if (!configuration.useStandardCacheManager()) {
+ templateEngine.setCacheManager(cacheManager);
+ }
+ // Engine Context Factory
+ if (!configuration.useStandardEngineContextFactory()) {
+ templateEngine.setEngineContextFactory(engineContextFactory);
+ }
+ //
this.templateEngine = templateEngine;
}
Modified:
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
URL:
http://svn.apache.org/viewvc/sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java?rev=1743948&r1=1743947&r2=1743948&view=diff
==============================================================================
---
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
(original)
+++
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
Sun May 15 18:43:18 2016
@@ -57,4 +57,40 @@ import org.osgi.service.metatype.annotat
"thymeleaf"
};
+ @AttributeDefinition(
+ name = "use standard message resolver",
+ description = "" // TODO
+ )
+ boolean useStandardMessageResolver() default true;
+
+ @AttributeDefinition(
+ name = "use standard link builder",
+ description = "" // TODO
+ )
+ boolean useStandardLinkBuilder() default true;
+
+ @AttributeDefinition(
+ name = "use standard dialect",
+ description = "" // TODO
+ )
+ boolean useStandardDialect() default true;
+
+ @AttributeDefinition(
+ name = "use standard decoupled template logic resolver",
+ description = "" // TODO
+ )
+ boolean useStandardDecoupledTemplateLogicResolver() default true;
+
+ @AttributeDefinition(
+ name = "use standard cache manager",
+ description = "" // TODO
+ )
+ boolean useStandardCacheManager() default true;
+
+ @AttributeDefinition(
+ name = "use standard engine context factory",
+ description = "" // TODO
+ )
+ boolean useStandardEngineContextFactory() default true;
+
}