From ddb545044b8cbfd98b361faea6c78062aa4e3133 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 07 Dec 2018 23:16:10 +0000
Subject: [PATCH] ...

---
 borgbutler-core/build.gradle                                                           |    4 +
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java             |   17 +++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java        |   14 ++++
 borgbutler-core/lombok.config                                                          |    1 
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/JsonUtils.java              |   65 +++++++++++++++++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java |   49 ++++++++++++++++
 gradle/wrapper/gradle-wrapper.properties                                               |    3 
 borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java                        |    9 +++
 8 files changed, 161 insertions(+), 1 deletions(-)

diff --git a/borgbutler-core/build.gradle b/borgbutler-core/build.gradle
index 006cd8e..8e9b089 100644
--- a/borgbutler-core/build.gradle
+++ b/borgbutler-core/build.gradle
@@ -8,6 +8,10 @@
 dependencies {
     compile group: 'commons-io', name: 'commons-io', version: '2.6'
     compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
+    compile group: 'org.apache.commons', name: 'commons-exec', version: '1.3'
+    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.6'
+    compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.6'
+
     compileOnly "org.projectlombok:lombok:1.18.4"
     testCompileOnly "org.projectlombok:lombok:1.18.4"
 }
diff --git a/borgbutler-core/lombok.config b/borgbutler-core/lombok.config
new file mode 100644
index 0000000..8571a69
--- /dev/null
+++ b/borgbutler-core/lombok.config
@@ -0,0 +1 @@
+lombok.accessors.chain=true
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
index 6bc7160..c3bf87d 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/Main.java
@@ -1,7 +1,16 @@
 package de.micromata.borgbutler;
 
+import de.micromata.borgbutler.config.BorgRepo;
+import de.micromata.borgbutler.config.Configuration;
+import de.micromata.borgbutler.config.ConfigurationHandler;
+
 public class Main {
     public static void main(String[] args) {
         System.out.println("Hello world.");
+        Configuration configuration = ConfigurationHandler.getConfiguration();
+        BorgRepo repo = new BorgRepo();
+        repo.setName("Hetzner-cloud").setPasswordCommand("dslfds").setRepo("sdfls");
+        configuration.add(repo);
+        ConfigurationHandler.getInstance().write();
     }
 }
\ No newline at end of file
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java
new file mode 100644
index 0000000..3661662
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/BorgRepo.java
@@ -0,0 +1,17 @@
+package de.micromata.borgbutler.config;
+
+import lombok.Getter;
+import lombok.Setter;
+
+public class BorgRepo {
+    @Getter @Setter
+    private String name;
+    @Getter @Setter
+    private String repo;
+    @Getter @Setter
+    private String rsh;
+    @Getter @Setter
+    private String password;
+    @Getter @Setter
+    private String passwordCommand;
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
new file mode 100644
index 0000000..ec48e89
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
@@ -0,0 +1,14 @@
+package de.micromata.borgbutler.config;
+
+import lombok.Getter;
+
+import java.util.List;
+
+public class Configuration {
+    @Getter
+    private List<BorgRepo> repos;
+
+    public void add(BorgRepo repo) {
+        repos.add(repo);
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
new file mode 100644
index 0000000..a141234
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
@@ -0,0 +1,49 @@
+package de.micromata.borgbutler.config;
+
+import de.micromata.borgbutler.json.JsonUtils;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+public class ConfigurationHandler {
+    private static Logger log = LoggerFactory.getLogger(ConfigurationHandler.class);
+    private static ConfigurationHandler instance = new ConfigurationHandler();
+    private static final String CONFIG_FILENAME = ".borgbutler.json";
+    private File configFile;
+    private Configuration configuration = new Configuration();
+
+    public static ConfigurationHandler getInstance() {
+        return instance;
+    }
+
+    public static Configuration getConfiguration() {
+        return instance.configuration;
+    }
+
+    public void read() {
+        try {
+            String json = FileUtils.readFileToString(configFile, Charset.forName("UTF-8"));
+            this.configuration = JsonUtils.fromJson(Configuration.class, json);
+        } catch (IOException ex) {
+            log.error("Error while trying to read from config file: " + configFile.getAbsolutePath() + ": " + ex.getMessage(), ex);
+            return;
+        }
+    }
+
+    public void write() {
+        String json = JsonUtils.toJson(configuration);
+        try {
+            FileUtils.write(configFile, json, Charset.forName("UTF-8"));
+        } catch (IOException ex) {
+            log.error("Error while trying to write config file: " + configFile.getAbsolutePath() + ": " + ex.getMessage(), ex);
+        }
+    }
+
+    private ConfigurationHandler() {
+        configFile = new File(System.getProperty("user.home"), CONFIG_FILENAME);
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/JsonUtils.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/JsonUtils.java
new file mode 100644
index 0000000..585e500
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/JsonUtils.java
@@ -0,0 +1,65 @@
+package de.micromata.borgbutler.json;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.StringWriter;
+
+public class JsonUtils {
+    private static Logger log = LoggerFactory.getLogger(JsonUtils.class);
+
+    public static String toJson(Object obj) {
+        return toJson(obj, false);
+    }
+
+    /**
+     * @param obj
+     * @param prettyPrinter If true, the json output will be pretty printed (human readable with new lines and indenting).
+     * @return
+     */
+    public static String toJson(Object obj, boolean prettyPrinter) {
+        if (obj == null) {
+            return "";
+        }
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
+        try {
+            if (prettyPrinter) {
+                return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
+            } else {
+                StringWriter writer = new StringWriter();
+                objectMapper.writeValue(writer, obj);
+                return writer.toString();
+            }
+        } catch (IOException ex) {
+            log.error(ex.getMessage(), ex);
+            return "";
+        }
+    }
+
+    public static <T> T fromJson(Class<T> clazz, String json) {
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        try {
+            return objectMapper.readValue(json, clazz);
+        } catch (IOException ex) {
+            log.error(ex.getMessage(), ex);
+            return null;
+        }
+    }
+
+    public static <T> T fromJson(final TypeReference<T> type, final String json) {
+        try {
+            T data = new ObjectMapper().readValue(json, type);
+            return data;
+        } catch (Exception ex) {
+            log.error("Json: '" + json + "': " + ex.getMessage(), ex);
+        }
+        return null;
+    }
+}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 75b8c7c..0bf2789 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,6 @@
+#Fri Dec 07 23:41:31 CET 2018
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip

--
Gitblit v1.10.0