From 909823cee4aff9f12ddceef523f062054a4af428 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 08 Dec 2018 09:15:16 +0000
Subject: [PATCH] Parses now json repsonse of borg to Pojo's.

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java      |   25 ++++++++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java         |   10 ++++-
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java   |   27 +++++++++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java |    8 ++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java |   14 +++++++
 borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java     |    5 ++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java      |   10 +++++
 7 files changed, 96 insertions(+), 3 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
index 72ee7bf..a0508c0 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -3,6 +3,8 @@
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.Configuration;
 import de.micromata.borgbutler.config.ConfigurationHandler;
+import de.micromata.borgbutler.json.JsonUtils;
+import de.micromata.borgbutler.json.borg.RepoInfo;
 import org.apache.commons.exec.*;
 import org.apache.commons.exec.environment.EnvironmentUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -17,10 +19,11 @@
 public class BorgCommands {
     private static Logger log = LoggerFactory.getLogger(BorgCommands.class);
 
-    public static String info(BorgRepoConfig repoConfig) {
+    public static RepoInfo info(BorgRepoConfig repoConfig) {
         try {
             CommandLine cmdLine = new CommandLine(ConfigurationHandler.getConfiguration().getBorgCommand());
             cmdLine.addArgument("info");
+            cmdLine.addArgument("--json");
             cmdLine.addArgument(repoConfig.getRepo());
             DefaultExecutor executor = new DefaultExecutor();
             //executor.setExitValue(2);
@@ -32,7 +35,10 @@
             executor.setStreamHandler(streamHandler);
             log.info("Executing '" + cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " ") + "'...");
             executor.execute(cmdLine, getEnvironment(repoConfig));
-            return (outputStream.toString(Charset.forName("UTF-8")));
+            String json = outputStream.toString(Charset.forName("UTF-8"));
+            RepoInfo repoInfo = JsonUtils.fromJson(RepoInfo.class, json);
+            repoInfo.setOriginalJson(json);
+            return repoInfo;
         } catch (IOException ex) {
             log.error("Error while executing borg command: " + ex.getMessage(), ex);
             return null;
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java
new file mode 100644
index 0000000..4f5ec81
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Cache.java
@@ -0,0 +1,10 @@
+package de.micromata.borgbutler.json.borg;
+
+import lombok.Getter;
+
+public class Cache {
+    @Getter
+    private String path;
+    @Getter
+    private Stats stats;
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java
new file mode 100644
index 0000000..8225da4
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Encryption.java
@@ -0,0 +1,8 @@
+package de.micromata.borgbutler.json.borg;
+
+import lombok.Getter;
+
+public class Encryption {
+    @Getter
+    private String mode;
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
new file mode 100644
index 0000000..72bcfd0
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
@@ -0,0 +1,27 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import de.micromata.borgbutler.json.JsonUtils;
+import lombok.Getter;
+import lombok.Setter;
+
+public class RepoInfo {
+    @Getter
+    @JsonProperty("security_dir")
+    private String securityDir;
+    @Getter
+    private Cache cache;
+    @Getter
+    private Encryption encryption;
+    @Getter
+    private Repository repository;
+    @Getter
+    @Setter
+    @JsonIgnore
+    private String originalJson;
+
+    public String toString() {
+        return JsonUtils.toJson(this, true);
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
new file mode 100644
index 0000000..c0006e4
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Repository.java
@@ -0,0 +1,14 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+
+public class Repository {
+    @Getter
+    private String id;
+    @Getter
+    @JsonProperty("last_modified")
+    private String lastModified;
+    @Getter
+    private String location;
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java
new file mode 100644
index 0000000..e569ad6
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Stats.java
@@ -0,0 +1,25 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+
+public class Stats {
+    @Getter
+    @JsonProperty("total_chunks")
+    private long totalChunks;
+    @Getter
+    @JsonProperty("total_csize")
+    private long totalCSize;
+    @Getter
+    @JsonProperty("total_size")
+    private long totalSize;
+    @Getter
+    @JsonProperty("total_unique_chunks")
+    private long totalUniqueChunks;
+    @Getter
+    @JsonProperty("unique_csize")
+    private long uniqueCSize;
+    @Getter
+    @JsonProperty("unique_size")
+    private long uniqueSize;
+}
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
index fc25d15..c0f1925 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/BorgCommandsTest.java
@@ -3,6 +3,7 @@
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.Configuration;
 import de.micromata.borgbutler.config.ConfigurationHandler;
+import de.micromata.borgbutler.json.borg.RepoInfo;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,7 +21,9 @@
         }
         for (BorgRepoConfig repo : config.getRepos()) {
             log.info("Processing repo '" + repo + "'");
-            log.info(BorgCommands.info(repo));
+            RepoInfo repoInfo = BorgCommands.info(repo);
+            log.info("Repo info: " + repoInfo);
+            log.info("Repo json: " + repoInfo.getOriginalJson());
         }
     }
 }

--
Gitblit v1.10.0