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.File; import java.io.IOException; public class Engine implements Closeable { public final DbIo io; public final KieSession session; public Engine(String name, String database, File output, String[] agendaGroups) throws IOException { var services = KieServices.Factory.get(); var container = services.getKieClasspathContainer(); var kieBase = container.getKieBase(name); io = new DbIo(kieBase); var objects = io.load(database); session = container.newKieSession(name); var logger = new WorkingMemoryConsoleLogger(session); session.addEventListener((AgendaEventListener) logger); session.addEventListener((RuleRuntimeEventListener) logger); session.setGlobal("te", new TemplateEngine(output)); for (var object : objects) { System.out.println("object = " + object); session.insert(object); } for (var agendaGroup : agendaGroups) { System.out.println("Setting agenda: " + agendaGroup); session.getAgenda().getAgendaGroup(agendaGroup).setFocus(); session.fireAllRules(); } } @Override public void close() { session.dispose(); } }