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]>.
