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

com.morpheusdata.views.DynamicTemplateLoader Maven / Gradle / Ivy

package com.morpheusdata.views;

import com.github.jknack.handlebars.io.TemplateLoader;
import com.github.jknack.handlebars.io.TemplateSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;

/**
 * Based on {@link com.github.jknack.handlebars.io.CompositeTemplateLoader}
 * Provides a way to delegate template lookups to all registered plugins
 */
public class DynamicTemplateLoader implements TemplateLoader {

	/**
	 * The logging system.
	 */
	private static final Logger logger = LoggerFactory.getLogger(com.github.jknack.handlebars.io.CompositeTemplateLoader.class);

	/**
	 * The template loader list.
	 */
	private List delegates;

	/**
	 * Creates a new {@link com.github.jknack.handlebars.io.CompositeTemplateLoader}.
	 *
	 * @param loaders The template loader chain. At least two loaders must be provided.
	 */
	public DynamicTemplateLoader(final TemplateLoader... loaders) {
		this.delegates = Arrays.asList(loaders);
	}

	@Override
	public TemplateSource sourceAt(final String location) throws IOException {
		for (TemplateLoader delegate : delegates) {
			try {
				return delegate.sourceAt(location);
			} catch (IOException ex) {
				// try next loader in the chain.
				logger.trace("Unable to resolve: {}, trying next loader in the chain.", location);
			}
		}
		throw new FileNotFoundException(location);
	}

	@Override
	public String resolve(final String location) {
		for (TemplateLoader delegate : delegates) {
			try {
				delegate.sourceAt(location);
				return delegate.resolve(location);
			} catch (IOException ex) {
				// try next loader in the chain.
				logger.trace("Unable to resolve: {}, trying next loader in the chain.", location);
			}
		}
		throw new IllegalStateException("Can't resolve: '" + location + "'");
	}

	@Override
	public String getPrefix() {
		throw new UnsupportedOperationException();
	}

	@Override
	public String getSuffix() {
		throw new UnsupportedOperationException();
	}

	@Override
	public void setPrefix(final String prefix) {
		throw new UnsupportedOperationException();
	}

	@Override
	public void setSuffix(final String suffix) {
		throw new UnsupportedOperationException();
	}

	@Override
	public void setCharset(final Charset charset) {
		for (TemplateLoader delegate : delegates) {
			delegate.setCharset(charset);
		}
	}

	@Override
	public Charset getCharset() {
		throw new UnsupportedOperationException();
	}

	/**
	 * Returns the delegates template loaders.
	 *
	 * @return The delegates template loaders.
	 */
	public Iterable getTemplateLoaders() {
		return delegates;
	}

	public void addTemplateLoader(TemplateLoader loader) {
		delegates.add(loader);
	}

	public void removeTemplateLoader(TemplateLoader loader) {
		delegates.remove(loader);
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy