summaryrefslogtreecommitdiff
path: root/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2021-02-03 16:35:48 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2021-02-03 16:35:48 +0100
commitbafe762ac01d16904c18404283027e426e19bc73 (patch)
treec22688ad186f5ce635f525704c5035f91b983b68 /module/ri-engine/src/main/java/io/trygvis/rules/engine/cli
parent91abd0b04320a9c9d932df195aca38c1cacfcc5a (diff)
downloadrules-sandbox-bafe762ac01d16904c18404283027e426e19bc73.tar.gz
rules-sandbox-bafe762ac01d16904c18404283027e426e19bc73.tar.bz2
rules-sandbox-bafe762ac01d16904c18404283027e426e19bc73.tar.xz
rules-sandbox-bafe762ac01d16904c18404283027e426e19bc73.zip
Code reorganization.
Moving main code to src, keeping modules in modules/
Diffstat (limited to 'module/ri-engine/src/main/java/io/trygvis/rules/engine/cli')
-rw-r--r--module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/DatabaseCommand.java20
-rw-r--r--module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java18
-rw-r--r--module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java156
-rw-r--r--module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/RunCommand.java82
4 files changed, 0 insertions, 276 deletions
diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/DatabaseCommand.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/DatabaseCommand.java
deleted file mode 100644
index 03650b5..0000000
--- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/DatabaseCommand.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package io.trygvis.rules.engine.cli;
-
-import picocli.CommandLine.Command;
-
-import java.util.concurrent.Callable;
-
-import static picocli.CommandLine.Option;
-
-@Command(name = "database")
-public class DatabaseCommand implements Callable<Integer> {
-
- @Option(names = {"-v", "--verbose"})
- private boolean verbose;
-
- @Override
- public Integer call() {
- System.out.println("DatabaseCommand.call");
- return 0;
- }
-}
diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java
deleted file mode 100644
index 8da0e39..0000000
--- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package io.trygvis.rules.engine.cli;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class EngineFile {
- public String dbDir;
- public List<Job> jobs;
-
- public static class Job {
- public String name;
- public List<String> inputs = new ArrayList<>();
- public List<String> outputIncludes = new ArrayList<>();
- public String generatedOutput;
- public List<String> agendaGroups = new ArrayList<>();
- public List<String> modules = new ArrayList<>();
- }
-}
diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java
deleted file mode 100644
index ef5ed1d..0000000
--- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package io.trygvis.rules.engine.cli;
-
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
-import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
-import org.apache.commons.lang3.StringUtils;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.Callable;
-import java.util.stream.Collectors;
-
-import static picocli.CommandLine.Command;
-
-@Command(name = "ninja")
-public class NinjaCommand implements Callable<Integer> {
-
- public File basedir = null;
-
- public Path basepath;
-
- @Override
- public Integer call() throws Exception {
- basepath = Objects.requireNonNullElseGet(basedir, () -> new File("").getAbsoluteFile()).toPath();
-
- var factory = new YAMLFactory();
- factory.enable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);
- factory.enable(YAMLGenerator.Feature.USE_NATIVE_OBJECT_ID);
- var mapper = new ObjectMapper(factory);
- mapper.enable(MapperFeature.AUTO_DETECT_FIELDS);
-
- var f = mapper.readValue(new File(basedir, "engine.yaml"), EngineFile.class);
-
- Path dbDir;
- if (StringUtils.trimToNull(f.dbDir) == null) {
- System.err.println("Missing required field: dbDir");
- return 1;
- } else {
- dbDir = Path.of(f.dbDir);
- }
-
- var buf = new StringWriter();
- var out = new PrintWriter(buf);
-
- out.println("# Generated");
- out.println("#");
- out.println("### engine.ninja");
- out.println("");
- out.println("rule engine-yaml-to-ninja");
- out.println(" command = engine ninja");
- out.println("");
- out.println("build engine.ninja: engine-yaml-to-ninja engine.yaml");
- out.println("");
- out.println("### engine.png");
- out.println("");
- out.println("rule ninja-to-dot");
- out.println(" command = ninja -t graph > $out");
- out.println("");
- out.println("rule dot-to-png");
- out.println(" command = dot -Tpng < $in > $out");
- out.println("");
- out.println("build engine.dot: ninja-to-dot build.ninja engine.ninja");
- out.println("");
- out.println("build engine.png: dot-to-png engine.dot");
- out.println("");
- out.println("# Jobs");
-
- for (var job : f.jobs) {
- out.println("");
-
- out.println("rule %s".formatted(job.name));
- out.println(" command=engine run $name $inputs $output_state $output_includes $generated_output $agenda_groups $modules");
- out.println();
- var dependencies = job.inputs.stream()
- .map(s -> dbDir.resolve(s + ".yaml").toString())
- .collect(Collectors.joining(" "));
-
- var outputState = dbDir.resolve(job.name + ".yaml");
-
- var generated = List.of(outputState).stream()
- .map(Path::toString)
- .collect(Collectors.joining(" "));
-
- out.println("build %s: %s %s".formatted(generated, job.name, dependencies));
- out.println(" name=--name %s".formatted(job.name));
-
- if (!job.inputs.isEmpty()) {
- var is = job.inputs.stream()
- .map(s -> "--input=" + dbDir.resolve(s + ".yaml"))
- .collect(Collectors.joining(" $\n ", "\n ", ""));
-
- out.println(" inputs=$%s".formatted(is));
- }
-
- out.println(" output_state=--output-state %s".formatted(outputState));
- if (!job.outputIncludes.isEmpty()) {
- var str = job.outputIncludes.stream()
- .map(s -> "--output-include=" + s)
- .collect(Collectors.joining(" $\n ", "\n ", ""));
-
- out.println(" output_includes=$%s".formatted(str));
- }
-
- if (job.generatedOutput != null) {
- out.println(" generated_output=--generated-output %s".formatted(fixPath(job.generatedOutput)));
- }
-
- if (!job.agendaGroups.isEmpty()) {
- var ag = job.agendaGroups.stream()
- .map(s -> "--agenda-group=" + s)
- .collect(Collectors.joining(" $\n ", "\n ", ""));
- out.println(" agenda_groups=%s".formatted(ag));
- }
-
- if (!job.modules.isEmpty()) {
- var ms = job.modules.stream()
- .map(this::fixPath)
- .map(s -> "--module=" + s)
- .collect(Collectors.joining(" $\n ", "\n ", ""));
-
- out.println(" modules=$%s".formatted(ms));
- }
- }
-
- var ninjaFile = new File(basedir, "engine.ninja");
- try (var writer = new FileWriter(ninjaFile)) {
- writer.write(buf.toString());
- }
-
- return 0;
- }
-
- private String fixPath(String s) {
- if (s.startsWith("$MODULE_HOME/")) {
- s = "$" + s;
- }
-
- var p = Path.of(s);
-
- if (p.isAbsolute()) {
- s = basepath.relativize(Path.of(s)).toString();
- }
-
- if (s.contains("*")) {
- s = "$$(echo " + s + ")";
- }
-
- return s;
- }
-}
diff --git a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/RunCommand.java b/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/RunCommand.java
deleted file mode 100644
index 35f30cd..0000000
--- a/module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/RunCommand.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package io.trygvis.rules.engine.cli;
-
-import io.trygvis.rules.engine.Engine;
-
-import java.io.File;
-import java.util.concurrent.Callable;
-
-import static picocli.CommandLine.Command;
-import static picocli.CommandLine.Option;
-
-@Command(name = "run")
-public class RunCommand implements Callable<Integer> {
-
- @Option(names = {"-n", "--name"})
- public String name;
-
- @Option(names = {"-i", "--input"})
- public File[] input;
-
- @Option(names = {"--output-state"})
- public File outputState;
-
- @Option(names = {"--output-include"}, split = ",", arity = "1..*")
- public String[] outputIncludes;
-
- @Option(names = {"--generated-output"})
- public File generatedOutput;
-
- @Option(names = {"--agenda-group"})
- public String[] agendaGroups;
-
- @Option(names = {"--module"}, split = ",", arity = "1..*")
- public File[] module;
-
- @Override
- public Integer call() throws Exception {
-
- if (agendaGroups == null || agendaGroups.length == 0) {
- agendaGroups = new String[]{"init", "generate"};
- }
-
- try (var engine = new Engine(name, input, generatedOutput, agendaGroups, module)) {
- engine.io.dump(outputState, engine.session.getFactHandles(), (Object o) ->
- {
- if (outputIncludes == null || outputIncludes.length == 0) {
- return true;
- }
-
- var name = o.getClass().getName();
- var simpleName = o.getClass().getSimpleName();
-
- for (var i : outputIncludes) {
- var ok = false;
- if (i.startsWith("*")) {
- i = i.substring(1);
-
- if (i.endsWith("*")) {
- i = i.substring(1, i.length() - 2);
- ok = name.contains(i);
- } else {
- ok = name.startsWith(i) || simpleName.startsWith(i);
- }
- } else if (i.endsWith("*")) {
- i = i.substring(0, i.length() - 2);
- ok = name.startsWith(i) || simpleName.startsWith(i);
- } else {
- ok = name.equals(i) || simpleName.equals(i);
- }
-
- if (ok) {
- return true;
- }
- }
-
- return false;
- }
- );
- }
-
- return 0;
- }
-}