org.thymeleaf.cache.ICacheManager Maven / Gradle / Ivy
Show all versions of org.everit.osgi.bundles.org.thymeleaf.thymeleaf Show documentation
/*
* =============================================================================
*
* Copyright (c) 2011-2013, The THYMELEAF team (http://www.thymeleaf.org)
*
* 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.thymeleaf.cache;
import java.util.List;
import java.util.Properties;
import org.thymeleaf.Template;
import org.thymeleaf.dom.Node;
/**
*
* Common interface for all cache manager implementations.
*
*
* This class is in charge of providing the corresponding cache objects to
* the template engine. Every call to each of the getXCache()
* methods must always return the XCache object (i.e. only one cache object
* should be ever created for each type of cache, and returned every time it
* is requested).
*
*
* Four caches are predefined:
*
*
* - A template cache, used for storing parsed templates referenced
* by their template name.
* - A fragment cache, used for storing the parsed DOM tree correspondence
* of fragments: pieces of template code that need to be parsed before being
* added to the template tree, like for example messages coming from
* .properties files with HTML tags that are included in results using
* th:utext processors.
* - A message cache, used for storing messages (usually from internationalization
* files) referenced by template name and locale (like "home_gl_ES").
* - An expression cache, used for storing expression evaluation artifacts
* (for example, {@link org.thymeleaf.standard.expression.Expression} parsed trees,
* OGNL/Spring EL parsed trees, etc). Given that this cache can usually store objects
* of different classes (referenced by their String representation), prefixes are
* normally applied to the String keys in order to being able to differentiate these
* differente classes when retrieving cache entries.
*
*
* Only these four caches are needed by the template engine when the standard dialects
* are being used, but users might want to define new dialects and use new types of caches,
* which can be provided by the cache manager using the {@link #getSpecificCache(String)}
* method.
*
*
* Any of these methods could return null, in which case the engine will consider that
* no cache must be applied for that specific function.
*
*
* @author Daniel Fernández
*
* @since 2.0.0
*
*/
public interface ICacheManager {
/**
*
* Returns the cache of parsed templates. Keys are the template names,
* as specified at the {@link org.thymeleaf.TemplateEngine#process(String, org.thymeleaf.context.IContext)}
* method.
*
*
* @return the cache of parsed templates.
*/
public ICache getTemplateCache();
/**
*
* Returns the cache of template code fragments. These fragments are pieces of
* template code that need to be parsed before adding them to the template DOM
* being processed.
*
*
* Typical examples of these fragments are externalized/internationalized messages like:
*
*
* home.header=Welcome to the <i>fruit market</i>!
*
*
* ...which are used in templates like th:utext="#{home.header}", and therefore
* need parsing in order to be converted to a DOM subtree (because that "<i>" should
* be a DOM element by itself).
*
*
* Keys in this cache are the String representation of fragments themselves along with
* the template mode used for such parsing (like
* "{HTML5}Welcome to the <i>fruit market</i>"), and values
* are the list of DOM {@link Node}s that correspond to parsing each fragment.
*
*
* Important: this fragments are not related to th:fragment processors.
*
*
* @return the cache of parsed template code fragments
*/
public ICache> getFragmentCache();
/**
*
* Returns the cache used for externalized/internationalized messages.
*
*
* This cache uses as keys the template names (as specified at
* {@link org.thymeleaf.TemplateEngine#process(String, org.thymeleaf.context.IContext)})
* along with the locale the messages refer to (like "main_gl_ES"), and
* as values the Properties object containing the messages.
*
*
* @return the message cache
*/
public ICache getMessageCache();
/**
*
* Returns the cache of expression evaluation artifacts.
*
*
* This cache is meant to store artifacts of diverse nature needed along the
* process of parsing and executing expressions in the several languages
* available: Standard expressions, OGNL expressions, Spring EL expressions...
*
*
* Parsing these expressions usually results in some kind of syntax tree object
* that represents the expression, and this is what this cache usually stores.
*
*
* Keys are the expressions themselves (their String representation), along with
* a prefix that is normally used for identifying the nature of the object being
* cached (for example "{OGNL}person.name").
*
*
* @return the cache of expression artifacts
*/
public ICache getExpressionCache();
/**
*
* Returns a specific (non-default) cache, by its name.
*
*
* User-defined dialects might make use of additional caches (besides template,
* fragment, message and expression) defined at custom-made
* implementations of this interface, and they should use this method
* to retrieve them by their name.
*
*
* @param name the name of the needed cache
* @return the required cache
*/
public ICache getSpecificCache(final String name);
/**
*
* Returns a list with the names of all the specific caches
* managed by this implementation.
*
*
* Might return null if no specific caches are managed.
*
*
* @return a list with all the names of the "specific caches"
* @since 2.0.16
*/
public List getAllSpecificCacheNames();
/**
*
* Clears all the caches managed by this cache manager instance.
*
*
* This method is mainly intended for use from external tools that
* might need to clean all caches completely, without having to worry
* about implementation details.
*
*
* @since 2.0.16
*/
public void clearAllCaches();
}