/* * Copyright 2013 Martin Kouba * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.trimou.engine.config; import java.util.Map; import org.trimou.Mustache; import org.trimou.engine.MustacheEngineBuilder; import org.trimou.engine.convert.ValueConverter; import org.trimou.engine.listener.MustacheListener; import org.trimou.engine.priority.WithPriority; import org.trimou.engine.resolver.Resolver; import org.trimou.handlebars.Helper; /** * Configuration extensions are automatically loaded during the engine * initialization, provided the ServiceLoader mechanism is not disabled. * <p> * Extensions with higher priority are registered first. * * @author Martin Kouba * @see MustacheEngineBuilder#omitServiceLoaderConfigurationExtensions() */ public interface ConfigurationExtension extends WithPriority { int DEFAULT_PRIORITY = 10; /** * Allows to register additional configuration components, e.g. * {@link Resolver} and {@link MustacheListener} instances. * * @param builder */ void register(ConfigurationExtensionBuilder builder); @Override default int getPriority() { return DEFAULT_PRIORITY; } /** * * @author Martin Kouba */ interface ConfigurationExtensionBuilder { /** * Adds a value resolver. * * @param resolver * @return self */ ConfigurationExtensionBuilder addResolver(Resolver resolver); /** * Adds a {@link Mustache} listener. Extension listeners are always * registered after listeners added via * {@link MustacheEngineBuilder#addMustacheListener(MustacheListener)}. * Further ordering is not defined. * * @param listener * @return self */ ConfigurationExtensionBuilder addMustacheListener( MustacheListener listener); /** * Adds a value (e.g. Lambda) that is available during execution of all * templates. * * @param name * @param value * @return self */ ConfigurationExtensionBuilder addGlobalData(String name, Object value); /** * Register a helper instance. * * @param name * @param helper * @return self * @throws IllegalArgumentException * if a helper with the same name is already registered * @see ConfigurationExtensions#registerHelper(ConfigurationExtensionBuilder, * String, Helper) */ ConfigurationExtensionBuilder registerHelper(String name, Helper helper); /** * Register a helper instance. * * @param name * @param helper * @param overwrite * @return self */ ConfigurationExtensionBuilder registerHelper(String name, Helper helper, boolean overwrite); /** * Register all the helper instances. * * @param helpers * @return self * @throws IllegalArgumentException * if a helper with the same name is already registered * @see ConfigurationExtensions#registerHelpers(ConfigurationExtensionBuilder, * Map) */ ConfigurationExtensionBuilder registerHelpers( Map<String, Helper> helpers); /** * Register all the helper instances. * * @param helpers * @return self */ ConfigurationExtensionBuilder registerHelpers( Map<String, Helper> helpers, boolean overwrite); /** * Adds a value converter. * * @param converter * @return self * @since 2.1 */ ConfigurationExtensionBuilder addValueConverter(ValueConverter converter); } }