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