summaryrefslogtreecommitdiff
path: root/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java
diff options
context:
space:
mode:
Diffstat (limited to 'module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java')
-rw-r--r--module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java45
1 files changed, 35 insertions, 10 deletions
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);
+ }
+ }
}