com.devonfw.cobigen.tempeng.freemarker.FreeMarkerTemplateEngine Maven / Gradle / Ivy
package com.devonfw.cobigen.tempeng.freemarker;
import java.io.Writer;
import java.nio.file.Path;
import java.util.Map;
import com.devonfw.cobigen.api.annotation.Name;
import com.devonfw.cobigen.api.exception.CobiGenRuntimeException;
import com.devonfw.cobigen.api.extension.TextTemplate;
import com.devonfw.cobigen.api.extension.TextTemplateEngine;
import com.devonfw.cobigen.tempeng.freemarker.constant.FreemarkerMetadata;
import freemarker.cache.NullCacheStorage;
import freemarker.core.Environment;
import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapperBuilder;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
* {@link TextTemplateEngine} implementation for Apache FreeMarker.
*/
@Name("FreeMarker")
public class FreeMarkerTemplateEngine implements TextTemplateEngine {
/** The file extension of the template files. */
private static final String TEMPLATE_EXTENSION = ".ftl";
/** The commonly used FreeMarker engine configuration */
private Configuration freeMarkerConfig;
/**
* Constructor, which initializes the commonly used FreeMarker configuration.
*/
public FreeMarkerTemplateEngine() {
freeMarkerConfig = new Configuration(Configuration.VERSION_2_3_23);
freeMarkerConfig.setObjectWrapper(new DefaultObjectWrapperBuilder(Configuration.VERSION_2_3_23).build());
freeMarkerConfig.clearEncodingMap();
freeMarkerConfig.setDefaultEncoding("UTF-8");
freeMarkerConfig.setLocalizedLookup(false);
freeMarkerConfig.setTemplateLoader(new NioFileSystemTemplateLoader());
freeMarkerConfig.setCacheStorage(new NullCacheStorage());
}
@Override
public String getTemplateFileEnding() {
return TEMPLATE_EXTENSION;
}
@Override
public void process(TextTemplate template, Map model, Writer out, String outputEncoding) {
Template fmTemplate = null;
try {
fmTemplate = freeMarkerConfig.getTemplate(template.getRelativeTemplatePath());
} catch (ParseException e) {
throw new CobiGenRuntimeException(
"Could not parse FreeMarker template: " + template.getAbsoluteTemplatePath() + ". (FreeMarker v"
+ FreemarkerMetadata.VERSION + " )\n" + e.getMessage(),
e);
} catch (Throwable e) {
throw new CobiGenRuntimeException(
"An error occured while retrieving the FreeMarker template: " + template.getAbsoluteTemplatePath()
+ " from the FreeMarker configuration. (FreeMarker v" + FreemarkerMetadata.VERSION + " )",
e);
}
if (fmTemplate != null) {
try {
Environment env = fmTemplate.createProcessingEnvironment(model, out);
env.setOutputEncoding(outputEncoding);
env.process();
} catch (TemplateException e) {
throw new CobiGenRuntimeException(
"An error occurred while generating the template: " + template.getAbsoluteTemplatePath()
+ " (FreeMarker v" + FreemarkerMetadata.VERSION + ")" + "\n" + e.getMessage(),
e);
} catch (Throwable e) {
throw new CobiGenRuntimeException("An unkonwn error occurred while generating the template: "
+ template.getAbsoluteTemplatePath() + " (FreeMarker v" + FreemarkerMetadata.VERSION + ")", e);
}
}
}
@Override
public void setTemplateFolder(Path templateFolderPath) {
((NioFileSystemTemplateLoader) freeMarkerConfig.getTemplateLoader()).setTemplateRoot(templateFolderPath);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy