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.java46
1 files changed, 46 insertions, 0 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
new file mode 100644
index 0000000..2565112
--- /dev/null
+++ b/module/ri-engine/src/main/java/io/trygvis/rules/engine/Engine.java
@@ -0,0 +1,46 @@
+package io.trygvis.rules.engine;
+
+import org.drools.core.audit.WorkingMemoryConsoleLogger;
+import org.kie.api.KieServices;
+import org.kie.api.event.rule.AgendaEventListener;
+import org.kie.api.event.rule.RuleRuntimeEventListener;
+import org.kie.api.runtime.KieSession;
+
+import java.io.Closeable;
+import java.io.IOException;
+
+public class Engine implements Closeable {
+ public final DbIo io;
+ public final KieSession session;
+
+ public Engine(String database) throws IOException {
+ var services = KieServices.Factory.get();
+ var container = services.getKieClasspathContainer();
+ var kieBase = container.getKieBase();
+
+ io = new DbIo(kieBase);
+ var objects = io.load(database);
+
+ session = container.newKieSession();
+
+ session.setGlobal("te", new TemplateEngine());
+
+ for (var object : objects) {
+ System.out.println("object = " + object);
+ session.insert(object);
+ }
+
+ var logger = new WorkingMemoryConsoleLogger(session);
+ session.addEventListener((AgendaEventListener) logger);
+ session.addEventListener((RuleRuntimeEventListener) logger);
+
+ session.getAgenda().getAgendaGroup("init").setFocus();
+
+ session.fireAllRules();
+ }
+
+ @Override
+ public void close() {
+ session.dispose();
+ }
+}