summaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/rules/acme/AcmeIo.java
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2021-01-01 20:35:28 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2021-01-01 20:35:28 +0100
commite4821f82249bddb443a1f6a6e403087cab659c6d (patch)
treeba6969c5bb04bc88476efa43a53c7c1ceb3a3ca6 /src/main/java/io/trygvis/rules/acme/AcmeIo.java
parent866eafabd7398fd1485e7aa285345a7dcea480d0 (diff)
downloadrules-sandbox-e4821f82249bddb443a1f6a6e403087cab659c6d.tar.gz
rules-sandbox-e4821f82249bddb443a1f6a6e403087cab659c6d.tar.bz2
rules-sandbox-e4821f82249bddb443a1f6a6e403087cab659c6d.tar.xz
rules-sandbox-e4821f82249bddb443a1f6a6e403087cab659c6d.zip
Migrating to Drools.
Diffstat (limited to 'src/main/java/io/trygvis/rules/acme/AcmeIo.java')
-rw-r--r--src/main/java/io/trygvis/rules/acme/AcmeIo.java81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/rules/acme/AcmeIo.java b/src/main/java/io/trygvis/rules/acme/AcmeIo.java
new file mode 100644
index 0000000..67dd4cb
--- /dev/null
+++ b/src/main/java/io/trygvis/rules/acme/AcmeIo.java
@@ -0,0 +1,81 @@
+package io.trygvis.rules.acme;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
+import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
+import org.drools.core.common.DefaultFactHandle;
+import org.kie.api.runtime.rule.FactHandle;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.AbstractMap;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+public class AcmeIo {
+ private final ObjectMapper mapper;
+
+ public AcmeIo() {
+ var factory = new YAMLFactory();
+ factory.enable(YAMLGenerator.Feature.USE_NATIVE_TYPE_ID);
+ factory.enable(YAMLGenerator.Feature.USE_NATIVE_OBJECT_ID);
+ mapper = new ObjectMapper(factory);
+ mapper.findAndRegisterModules();
+ }
+
+ public List<Object> load(String file) throws IOException {
+ var parser = mapper.getFactory().createParser(new File(file));
+
+ var objects = mapper.readValues(parser, AcmeObject.class).readAll(new ArrayList<>());
+
+ List<Object> items = new ArrayList<>(objects.size());
+ for (AcmeObject object : objects) {
+ try {
+ var type = Class.forName(object.type);
+ var x = mapper.treeToValue(object.data, type);
+ items.add(x);
+ } catch (ClassNotFoundException e) {
+ throw new IOException(e);
+ }
+ }
+
+ return items;
+ }
+
+ public void dump(String s, Collection<FactHandle> factHandles) throws IOException {
+ var out = new File("out");
+
+ if (!out.isDirectory()) {
+ if (!out.mkdirs()) {
+ throw new IOException("Could not create directory: " + out);
+ }
+ }
+
+ List<Map.Entry<String, Object>> facts = new ArrayList<>(factHandles.size());
+ for (var handle : factHandles) {
+ if (handle instanceof DefaultFactHandle h) {
+ facts.add(new AbstractMap.SimpleImmutableEntry<>(
+ h.getObjectClassName(),
+ h.getObject()));
+ }
+ }
+
+ facts.sort(Map.Entry.comparingByKey());
+
+ var factory = mapper.getFactory();
+ try (var writer = new FileWriter(new File(out, s + ".yaml"));
+ var g = factory.createGenerator(writer)) {
+ for (Map.Entry<String, Object> fact : facts) {
+ g.writeObject(new AcmeObject(
+ fact.getKey(),
+ mapper.valueToTree(fact.getValue())
+ ));
+ }
+ }
+ }
+}