From bafe762ac01d16904c18404283027e426e19bc73 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Wed, 3 Feb 2021 16:35:48 +0100 Subject: Code reorganization. Moving main code to src, keeping modules in modules/ --- .../trygvis/rules/engine/cli/DatabaseCommand.java | 20 --- .../io/trygvis/rules/engine/cli/EngineFile.java | 18 --- .../io/trygvis/rules/engine/cli/NinjaCommand.java | 156 --------------------- .../io/trygvis/rules/engine/cli/RunCommand.java | 82 ----------- 4 files changed, 276 deletions(-) delete mode 100644 module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/DatabaseCommand.java delete mode 100644 module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/EngineFile.java delete mode 100644 module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/NinjaCommand.java delete mode 100644 module/ri-engine/src/main/java/io/trygvis/rules/engine/cli/RunCommand.java (limited to 'module/ri-engine/src/main/java/io/trygvis/rules/engine/cli') 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 { - - @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 jobs; - - public static class Job { - public String name; - public List inputs = new ArrayList<>(); - public List outputIncludes = new ArrayList<>(); - public String generatedOutput; - public List agendaGroups = new ArrayList<>(); - public List 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 { - - 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 { - - @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; - } -} -- cgit v1.2.3