From 1182531ed31ccff36e26121ae0cc5b3243669317 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Tue, 2 Feb 2021 17:05:02 +0100 Subject: Creating engine.yaml and engine.ninja generator. --- .../main/java/io/trygvis/rules/engine/Engine.java | 45 +++++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) (limited to 'module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java') diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java index ef6b4b1..46a3302 100644 --- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java +++ b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java @@ -1,6 +1,7 @@ package io.trygvis.rules.engine; import org.drools.core.audit.WorkingMemoryConsoleLogger; +import org.drools.core.base.MapGlobalResolver; import org.drools.reflective.classloader.ProjectClassLoader; import org.kie.api.KieServices; import org.kie.api.event.rule.AgendaEventListener; @@ -11,6 +12,7 @@ import org.kie.api.runtime.KieSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nullable; import java.io.Closeable; import java.io.File; import java.io.FileNotFoundException; @@ -24,20 +26,25 @@ import java.util.List; import static io.trygvis.rules.engine.TemplateEngine.TemplateLoader; public class Engine implements Closeable { + @SuppressWarnings("FieldCanBeLocal") private final Logger logger = LoggerFactory.getLogger(getClass()); + public final String name; + @Nullable + public final File output; public final DbIo io; public final KieSession session; - public Engine(String name, File[] databases, File output, String[] agendaGroups, File[] modules) throws IOException { + public Engine(String name, File[] databases, @Nullable File output, String[] agendaGroups, File[] modules) + throws IOException { + this.name = name; + this.output = output; + logger.info("Getting KieServices"); var services = KieServices.Factory.get(); - logger.info("services = {}", services); - var kieRepository = services.getRepository(); - logger.info("kieRepository.getDefaultReleaseId() = {}", kieRepository.getDefaultReleaseId()); KieContainer container; TemplateLoader templateLoader; @@ -85,12 +92,7 @@ public class Engine implements Closeable { session.addEventListener((AgendaEventListener) l); session.addEventListener((RuleRuntimeEventListener) l); - var te = session.getGlobals().get("te"); - try { - session.setGlobal("te", new JinjavaTemplateEngine(templateLoader, output)); - } catch (java.lang.RuntimeException ignore) { - // This happens if the rules doesn't need the template engine. - } + session.getGlobals().setDelegate(new EngineGlobalResolver(templateLoader)); logger.info("Loading data"); io = new DbIo(container, kieBase); @@ -146,4 +148,27 @@ public class Engine implements Closeable { } } } + + private class EngineGlobalResolver extends MapGlobalResolver { + private final TemplateLoader templateLoader; + + public EngineGlobalResolver() { + templateLoader = null; + } + + public EngineGlobalResolver(TemplateLoader templateLoader) { + this.templateLoader = templateLoader; + } + + @Override + public Object resolveGlobal(String identifier) { + if ("te".equals(identifier)) { + if (output == null) { + throw new IllegalArgumentException("An instance of the TemplateEngine is required, but this job is not configured with a output directory."); + } + return new JinjavaTemplateEngine(templateLoader, output); + } + return super.resolveGlobal(identifier); + } + } } -- cgit v1.2.3