From 149cf9efadb1da64b9ee716ac9bee1ac0c0e1329 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 6 Jan 2021 16:04:22 +0100 Subject: Using agenda groups to sequence phases. --- .../main/java/io/trygvis/rules/engine/Engine.java | 25 ++++++++++++---------- .../io/trygvis/rules/engine/TemplateEngine.java | 16 ++++++-------- 2 files changed, 21 insertions(+), 20 deletions(-) (limited to 'module/ri-engine/src/main/java/io') 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 f624603..b73e2e8 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 @@ -7,36 +7,39 @@ 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 k, String database) throws IOException { + 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(k); + var kieBase = container.getKieBase(name); io = new DbIo(kieBase); var objects = io.load(database); - session = container.newKieSession(k); + session = container.newKieSession(name); - session.setGlobal("te", new TemplateEngine()); + 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); } - var logger = new WorkingMemoryConsoleLogger(session); - session.addEventListener((AgendaEventListener) logger); - session.addEventListener((RuleRuntimeEventListener) logger); - - session.getAgenda().getAgendaGroup("init").setFocus(); - - session.fireAllRules(); + for (var agendaGroup : agendaGroups) { + System.out.println("Setting agenda: " + agendaGroup); + session.getAgenda().getAgendaGroup(agendaGroup).setFocus(); + session.fireAllRules(); + } } @Override diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java index ace7aaf..3c7c755 100644 --- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java +++ b/module/ri-engine/src/main/java/io/trygvis/rules/engine/TemplateEngine.java @@ -12,18 +12,16 @@ import java.util.Map; public class TemplateEngine { private final Jinjava jinjava = new Jinjava(); + private final File basedir; + + public TemplateEngine(File basedir) { + this.basedir = basedir; + } + public void template(String name, String output, Map params) throws IOException { var template = Files.readString(Path.of("j2", name + ".j2")); String renderedTemplate = jinjava.render(template, params); -// System.out.println("-----------------------------------"); -// for (var item : params.entrySet()) { -// System.out.printf(" %s : %s%n", item.getKey(), item.getValue()); -// } - System.out.println("-----------------------------------"); - System.out.println(renderedTemplate); - System.out.println("-----------------------------------"); - - var f = new File("gen", output); + var f = new File(basedir, output); FileUtil.createMissingParentDirectories(f); Files.writeString(f.toPath(), renderedTemplate); } -- cgit v1.2.3