All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.pebbletemplates.pebble.loader.Loader Maven / Gradle / Ivy

The newest version!
/*
 * This file is part of Pebble.
 * 

* Copyright (c) 2014 by Mitchell Bösecke *

* For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ package io.pebbletemplates.pebble.loader; import io.pebbletemplates.pebble.PebbleEngine; import java.io.Reader; /** * Interface used to find templates for Pebble. Different implementations can use different * techniques for finding templates such as looking on the classpath, looking in a database, using a * servlet context, etc. * * @author mbosecke */ public interface Loader { /** * The reader which will be used by Pebble to read the contents of the template. * * @param cacheKey the cache key to use to load create the reader. * @return A reader object, or {@code null} if the template does not exist */ Reader getReader(T cacheKey); /** * A method for end users to change the charset used by the loader. * * @param charset Character set used by the loader when building a reader object */ void setCharset(String charset); /** * Optional prefix to help find templates, ex "/WEB-INF/templates/" or "database_schema." * * @param prefix Prefix to help find templates */ void setPrefix(String prefix); /** * Optional suffix to help find templates, ex ".html", ".peb" * * @param suffix Suffix to attach to template names */ void setSuffix(String suffix); /** * Resolves the given {@code relativePath} based on the given {@code anchorPath}. * *

* A path is considered as relative when it starts either with '..' or '.' and followed either by * a '/' or '\\' otherwise the assumption is that the provided path is an absolute path. * * @param relativePath the relative path which should be resolved. * @param anchorPath the anchor path based on which the relative path should be resolved on. * @return the resolved path or {@code null} when the path could not be resolved. */ String resolveRelativePath(String relativePath, String anchorPath); /** * This method resolves the given template name to a unique object which can be used as the key * within the {@link PebbleEngine#getTemplateCache()}. The returned object will be passed with * {@link #getReader(Object)}. * *

* The resolve method can eventually add information to the cache key from the context (e.g. user * session information, servlet request etc.). * *

* As a concrete example if the loader loads a template created by a user form the database the * template name itself is not uniquely identify the template. The identification of the template * requires also the user which created the template. Hence for the key the user id and the * template name should be used. So the cache key is enhanced by some contextual information. * *

* The implementor of the method can add as many additional contextual information to the returned * object. However the following things needs to be considered: *

    *
  • This method will be called on each * {@link PebbleEngine#getTemplate(String)}. Hence the implementation needs to be fast and * eventually use some caching for the lookup process.
  • *
  • The returned object is used within a cache and hence needs to * implement {@link Object#equals(Object)} and {@link Object#hashCode()}.
  • *
  • The object is kept in memory and hence it should not be to memory * heavy.
  • *
* *

* Depending on this implementation the {@link PebbleEngine#getTemplateCache()} should be tuned in * a way it can operate optimal. E.g. when the number of potential templates is infinite the cache * should evict some templates at some point in time otherwise the stability of the memory is not * given anymore. * * @param templateName The name of the template * @return Returns the cache key */ T createCacheKey(String templateName); boolean resourceExists(String templateName); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy