Author: olli
Date: Fri May 13 12:28:13 2016
New Revision: 1743664
URL: http://svn.apache.org/viewvc?rev=1743664&view=rev
Log:
SLING-5075 Upgrade Thymeleaf to 3.0
add support for ILinkBuilder and IDecoupledTemplateLogicResolver services
Modified:
sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.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=1743664&r1=1743663&r2=1743664&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
Fri May 13 12:28:13 2016
@@ -47,8 +47,10 @@ import org.thymeleaf.ITemplateEngine;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.cache.ICacheManager;
import org.thymeleaf.dialect.IDialect;
+import org.thymeleaf.linkbuilder.ILinkBuilder;
import org.thymeleaf.messageresolver.IMessageResolver;
import org.thymeleaf.standard.StandardDialect;
+import
org.thymeleaf.templateparser.markup.decoupled.IDecoupledTemplateLogicResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
@Component(
@@ -89,6 +91,23 @@ public final class ThymeleafScriptEngine
private List<IDialect> dialects;
@Reference(
+ cardinality = ReferenceCardinality.MULTIPLE,
+ policy = ReferencePolicy.DYNAMIC,
+ bind = "addLinkBuilder",
+ unbind = "removeLinkBuilder"
+ )
+ private List<ILinkBuilder> linkBuilders;
+
+ @Reference(
+ cardinality = ReferenceCardinality.OPTIONAL,
+ policy = ReferencePolicy.DYNAMIC,
+ policyOption = ReferencePolicyOption.GREEDY,
+ bind = "setDecoupledTemplateLogicResolver",
+ unbind = "unsetDecoupledTemplateLogicResolver"
+ )
+ private volatile IDecoupledTemplateLogicResolver
decoupledTemplateLogicResolver;
+
+ @Reference(
cardinality = ReferenceCardinality.OPTIONAL,
policy = ReferencePolicy.DYNAMIC,
policyOption = ReferencePolicyOption.GREEDY,
@@ -164,6 +183,42 @@ public final class ThymeleafScriptEngine
}
}
+ protected void addLinkBuilder(final ILinkBuilder linkBuilder) {
+ synchronized (lock) {
+ logger.debug("adding link builder '{}'", linkBuilder.getName());
+ if (templateEngine == null || templateEngine.isInitialized()) {
+ serviceTemplateEngine();
+ } else {
+ templateEngine.addLinkBuilder(linkBuilder);
+ }
+ }
+ }
+
+ protected void removeLinkBuilder(final ILinkBuilder linkBuilder) {
+ synchronized (lock) {
+ logger.debug("removing link builder '{}'", linkBuilder.getName());
+ serviceTemplateEngine();
+ }
+ }
+
+ protected void setDecoupledTemplateLogicResolver(final
IDecoupledTemplateLogicResolver decoupledTemplateLogicResolver) {
+ synchronized (lock) {
+ logger.debug("setting decoupled template logic resolver '{}'",
decoupledTemplateLogicResolver.getClass().getName());
+ if (templateEngine == null || templateEngine.isInitialized()) {
+ serviceTemplateEngine();
+ } else {
+
templateEngine.setDecoupledTemplateLogicResolver(decoupledTemplateLogicResolver);
+ }
+ }
+ }
+
+ protected void unsetDecoupledTemplateLogicResolver(final
IDecoupledTemplateLogicResolver decoupledTemplateLogicResolver) {
+ synchronized (lock) {
+ logger.debug("unsetting decoupled template logic resolver '{}'",
decoupledTemplateLogicResolver.getClass().getName());
+ serviceTemplateEngine();
+ }
+ }
+
protected void setCacheManager(final ICacheManager cacheManager) {
synchronized (lock) {
logger.debug("setting cache manager '{}'",
cacheManager.getClass().getName());
@@ -253,12 +308,19 @@ public final class ThymeleafScriptEngine
final Set<IMessageResolver> messageResolvers = new
HashSet<>(this.messageResolvers);
templateEngine.setMessageResolvers(messageResolvers);
}
+ if (this.linkBuilders != null) {
+ final Set<ILinkBuilder> linkBuilders = new
HashSet<>(this.linkBuilders);
+ templateEngine.setLinkBuilders(linkBuilders);
+ }
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) {
+
templateEngine.setDecoupledTemplateLogicResolver(decoupledTemplateLogicResolver);
+ }
templateEngine.setCacheManager(cacheManager);
this.templateEngine = templateEngine;
}