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

org.avaje.website.generator.TemplateRender Maven / Gradle / Ivy

There is a newer version: 2.2.2
Show newest version
package org.avaje.website.generator;

import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.util.Collections;
import java.util.Map;

import org.avaje.freemarker.ConfigurationBuilder;
import org.avaje.freemarker.layout.InheritLayoutTemplateLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import freemarker.cache.FileTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.SimpleHash;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
 * Service that provides freemarker template rendering.
 */
public class TemplateRender {

  private static final Logger log = LoggerFactory.getLogger(TemplateRender.class);

  private final Configuration configuration;

  /**
   * Construct with devMode so using template exception handler.
   */
  public TemplateRender(File inputDir) {
    this(inputDir, true, 0);
  }
  
  /**
   * Construct specifying dev mode and updateDelay.
   */
  public TemplateRender(File inputDir, boolean devMode, int updateDelay) {

    ConfigurationBuilder builder = new ConfigurationBuilder();
 
    builder.setUseExceptionHandler(devMode);
    if (!devMode) {
      builder.setTemplateUpdateDelay(updateDelay);
    }

    try {
      FileTemplateLoader fileTemplate = new FileTemplateLoader(inputDir);

      SyntaxHighlighter filter = new SyntaxHighlighter();
      InheritLayoutTemplateLoader templateLoader = new InheritLayoutTemplateLoader(fileTemplate, filter);

      builder.setTemplateLoader(templateLoader);

      this.configuration = builder.build();
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  /**
   * Render the template with the given model to the writer.
   */
  public void render(String templateName, Map model, Writer writer) throws IOException {

    Template template;
    try {

      template = configuration.getTemplate(templateName);

    } catch (IOException e) {
      throw new IOException("Error loading template: " + templateName, e);
    }

    try {
      
      if (model == null) {
        model = Collections.emptyMap();
      }
      
      SimpleHash wrappedModel = new SimpleHash(model);
      template.process(wrappedModel, writer);

    } catch (TemplateException e) {
      log.error("Error processing template: " + templateName, e);
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy