This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag 
org.apache.sling.scripting.thymeleaf-1.0.0
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-thymeleaf.git

commit c630101796f65f8d4cef048e998ec8b37dcaf6d5
Author: Oliver Lietz <[email protected]>
AuthorDate: Sun May 15 18:43:18 2016 +0000

    SLING-5075 Upgrade Thymeleaf to 3.0
    
    add support for IEngineContextFactory services and make use of standards 
configurable
    
    git-svn-id: 
https://svn.apache.org/repos/asf/sling/trunk/contrib/scripting/org.apache.sling.scripting.thymeleaf@1743948
 13f79535-47bb-0310-9956-ffa450edef68
---
 .../internal/ThymeleafScriptEngineFactory.java     | 65 ++++++++++++++++++++--
 .../ThymeleafScriptEngineFactoryConfiguration.java | 36 ++++++++++++
 2 files changed, 97 insertions(+), 4 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
 
b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
index 2f58531..6d7d228 100644
--- 
a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
+++ 
b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactory.java
@@ -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 ThymeleafScriptEngineFactory extends 
AbstractScriptEngineFact
     )
     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 ThymeleafScriptEngineFactory extends 
AbstractScriptEngineFact
         }
     }
 
+    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 ThymeleafScriptEngineFactory extends 
AbstractScriptEngineFact
     @Modified
     private void modified(final ThymeleafScriptEngineFactoryConfiguration 
configuration) {
         logger.debug("modified");
+        this.configuration = configuration;
         configure(configuration);
     }
 
@@ -300,28 +334,51 @@ public final class ThymeleafScriptEngineFactory extends 
AbstractScriptEngineFact
         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;
     }
 
diff --git 
a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
 
b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
index ae2b367..783afff 100644
--- 
a/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
+++ 
b/src/main/java/org/apache/sling/scripting/thymeleaf/internal/ThymeleafScriptEngineFactoryConfiguration.java
@@ -57,4 +57,40 @@ import 
org.osgi.service.metatype.annotations.ObjectClassDefinition;
         "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;
+
 }

-- 
To stop receiving notification emails like this one, please contact
"[email protected]" <[email protected]>.

Reply via email to