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


Reply via email to