diff options
Diffstat (limited to 'src/ri-engine/src/main/java/io/trygvis/rules/engine/JinjavaTemplateEngine.java')
-rw-r--r-- | src/ri-engine/src/main/java/io/trygvis/rules/engine/JinjavaTemplateEngine.java | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/src/ri-engine/src/main/java/io/trygvis/rules/engine/JinjavaTemplateEngine.java b/src/ri-engine/src/main/java/io/trygvis/rules/engine/JinjavaTemplateEngine.java new file mode 100644 index 0000000..ba23089 --- /dev/null +++ b/src/ri-engine/src/main/java/io/trygvis/rules/engine/JinjavaTemplateEngine.java @@ -0,0 +1,51 @@ +package io.trygvis.rules.engine; + +import ch.qos.logback.core.util.FileUtil; +import com.hubspot.jinjava.Jinjava; +import org.apache.commons.io.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Map; +import java.util.Objects; + +/** + * TODO: cache templates. + */ +public class JinjavaTemplateEngine implements TemplateEngine { + private final Logger logger = LoggerFactory.getLogger(getClass()); + + private final Jinjava jinjava = new Jinjava(); + + private final TemplateLoader loader; + private final File basedir; + + public JinjavaTemplateEngine(TemplateLoader templateLoader, File basedir) { + Objects.requireNonNull(templateLoader); + Objects.requireNonNull(basedir); + this.loader = templateLoader; + this.basedir = basedir; + } + + @Override + public void clean() { + try { + logger.info("Removing output directory: {}", basedir); + FileUtils.deleteDirectory(basedir); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void template(String name, String output, Map<String, Object> params) throws IOException { + var template = loader.load(name); + String renderedTemplate = jinjava.render(template, params); + var f = new File(basedir, output); + FileUtil.createMissingParentDirectories(f); + Files.writeString(f.toPath(), renderedTemplate); + } +} |