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;
     }


Reply via email to