diff options
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.java | 46 |
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(); + } +} |