From 793edd77d90ffff2502ec1dc9f4d0c3442ebb94c Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 11 Feb 2019 02:53:18 +0000
Subject: [PATCH] BorgVersion improved (annoying output to config file fixed).

---
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationInfo.java |   15 +++++++
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/ServerConfiguration.java    |   14 -------
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java       |   46 ++++++++++++----------
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationRest.java |   17 ++++----
 borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx                   |   16 ++++---
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java    |    4 +-
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java            |    7 ---
 7 files changed, 59 insertions(+), 60 deletions(-)

diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
index 4f8196d..959d9d8 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgInstallation.java
@@ -3,6 +3,7 @@
 import de.micromata.borgbutler.BorgCommands;
 import de.micromata.borgbutler.config.Configuration;
 import de.micromata.borgbutler.config.ConfigurationHandler;
+import lombok.Getter;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpResponse;
@@ -26,6 +27,9 @@
         return instance;
     }
 
+    @Getter
+    private BorgVersion borgVersion = new BorgVersion();
+
     public void initialize() {
         Configuration configuration = ConfigurationHandler.getConfiguration();
         if (StringUtils.isNotBlank(configuration.getBorgCommand())) {
@@ -37,34 +41,31 @@
         if (version(configuration)) {
             return;
         }
-        BorgVersion borgVersion = ServerConfiguration.get()._getBorgVersion();
         log.warn("No working borg version found. Please configure a borg version with minimal version '" + borgVersion.getMinimumRequiredBorgVersion() + "'.");
     }
 
     /**
      * Configures a new borg configuration if modifications was done.
-     * @param oldVersion The old version before this current modification.
+     *
+     * @param newConfiguration The new configuration with the (new) borg command to use (executable).
+     * @param borgBinary       The id of the borg binary (Mac OS X, Linux 64, manual etc.)
      */
-    public void configure(BorgVersion oldVersion) {
-        Configuration configuration = ConfigurationHandler.getConfiguration();
-        BorgVersion newVersion = ServerConfiguration.get()._getBorgVersion();
-        boolean borgBinaryChanged = !StringUtils.equals(oldVersion.getBorgBinary(), newVersion.getBorgBinary());
-        boolean manualBorgCommand = "manual".equals(newVersion.getBorgBinary());
+    public void configure(ServerConfiguration newConfiguration, String borgBinary) {
+        ServerConfiguration configuration = ServerConfiguration.get();
+        boolean borgBinaryChanged = !StringUtils.equals(borgVersion.getBorgBinary(), borgBinary);
+        borgVersion.setBorgBinary(borgBinary); // Update borg binary (if changed).
+        boolean manualBorgCommand = "manual".equals(borgBinary);
         if (manualBorgCommand) {
-            boolean borgCommandChanged = !StringUtils.equals(oldVersion.getBorgCommand(), newVersion.getBorgCommand());
+            boolean borgCommandChanged = !StringUtils.equals(newConfiguration.getBorgCommand(), configuration.getBorgCommand());
             if (borgCommandChanged) {
-                configuration.setBorgCommand(newVersion.getBorgCommand());
+                configuration.setBorgCommand(newConfiguration.getBorgCommand());
                 version(configuration);
-            } else {
-                newVersion.copyFrom(oldVersion); // Restore all old settings.
             }
         } else {
             if (borgBinaryChanged) {
-                newVersion.setBorgCommand(oldVersion.getBorgCommand()); // Don't modify borg command, if not manual.
-                initialize(getBinary(newVersion.getBorgBinary()));
-            } else {
-                newVersion.copyFrom(oldVersion); // Restore all old settings.
+                initialize(getBinary(borgBinary));
             }
+            newConfiguration.setBorgCommand(configuration.getBorgCommand()); // borg command of this class overwrites new configuration for mode != 'manual'.
         }
     }
 
@@ -74,19 +75,25 @@
         }
         Configuration configuration = ConfigurationHandler.getConfiguration();
         File file = download(binary);
-        BorgVersion borgVersion = ServerConfiguration.get()._getBorgVersion();
         if (file != null) {
             configuration.setBorgCommand(file.getAbsolutePath());
-            borgVersion.setBorgCommand(file.getAbsolutePath());
             borgVersion.setBorgBinary(binary[0]);
         }
         return version(configuration);
     }
 
     private boolean version(Configuration configuration) {
+        String borgCommand = configuration.getBorgCommand();
+        if (StringUtils.isNotBlank(borgCommand)) {
+            for (String[] borgBinary : borgVersion.getBorgBinaries()) {
+                if (borgCommand.contains(borgBinary[0])) {
+                    borgVersion.setBorgBinary(borgBinary[0]);
+                    break;
+                }
+            }
+        }
         String versionString = BorgCommands.version();
         boolean versionOK = false;
-        BorgVersion borgVersion = ServerConfiguration.get()._getBorgVersion();
         String msg = null;
         if (versionString != null) {
             borgVersion.setVersion(versionString);
@@ -128,7 +135,6 @@
         if (os == null) {
             return null;
         }
-        BorgVersion borgVersion = ServerConfiguration.get()._getBorgVersion();
         for (String[] binary : borgVersion.getBorgBinaries()) {
             if (binary[0].contains(os)) {
                 return binary;
@@ -152,7 +158,6 @@
             // File already downloaded, nothing to do.
             return file;
         }
-        BorgVersion borgVersion = ServerConfiguration.get()._getBorgVersion();
         String url = borgVersion.getBinariesDownloadUrl() + getDownloadFilename(binary);
         log.info("Trying to download borg binary '" + binary[0] + "' (" + binary[1] + ") from url: " + url + "...");
         HttpClientBuilder builder = HttpClients.custom()
@@ -183,7 +188,6 @@
             log.info("Creating binary directory: " + dir.getAbsolutePath());
             dir.mkdirs();
         }
-        BorgVersion borgVersion = ServerConfiguration.get()._getBorgVersion();
         return new File(dir, getDownloadFilename(binary) + "-" + borgVersion.getBinariesDownloadVersion());
     }
 
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java
index 2f856d4..fcadea7 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/BorgVersion.java
@@ -26,12 +26,6 @@
     @Getter
     @Setter(AccessLevel.PACKAGE)
     private String borgBinary;
-    /**
-     * The path of the borg command to use.
-     */
-    @Getter
-    @Setter
-    private String borgCommand;
 
     @Getter
     @Setter(AccessLevel.PACKAGE)
@@ -44,7 +38,6 @@
     private String statusMessage;
 
     public BorgVersion copyFrom(BorgVersion other) {
-        this.borgCommand = other.borgCommand;
         this.borgBinary = other.borgBinary;
         this.versionOK = other.versionOK;
         this.version = other.version;
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/ServerConfiguration.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/ServerConfiguration.java
index 8c91bf2..ce67240 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/ServerConfiguration.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/ServerConfiguration.java
@@ -18,7 +18,6 @@
 
     private int port = WEBSERVER_PORT_DEFAULT;
     private boolean webDevelopmentMode = WEB_DEVELOPMENT_MODE_PREF_DEFAULT;
-    private BorgVersion borgVersion = new BorgVersion();
     @JsonProperty
     public String getCacheDir() {
         return ButlerCache.getInstance().getCacheDir().getAbsolutePath();
@@ -32,17 +31,6 @@
         return SUPPORTED_LANGUAGES;
     }
 
-    /**
-     * @return a clone of this.borgVersion.
-     */
-    public BorgVersion getBorgVersion() {
-        return new BorgVersion().copyFrom(borgVersion);
-    }
-
-    BorgVersion _getBorgVersion() {
-        return this.borgVersion;
-    }
-
     public static String getApplicationHome() {
         if (applicationHome == null) {
             applicationHome = System.getProperty("applicationHome");
@@ -77,7 +65,5 @@
         super.copyFrom(other);
         this.port = other.port;
         this.webDevelopmentMode = other.webDevelopmentMode;
-        this.borgVersion.copyFrom(other.borgVersion);
-        this.setBorgCommand(this.borgVersion.getBorgCommand());
     }
 }
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationInfo.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationInfo.java
new file mode 100644
index 0000000..19d228c
--- /dev/null
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationInfo.java
@@ -0,0 +1,15 @@
+package de.micromata.borgbutler.server.rest;
+
+import de.micromata.borgbutler.server.BorgVersion;
+import de.micromata.borgbutler.server.ServerConfiguration;
+import lombok.Getter;
+import lombok.Setter;
+
+public class ConfigurationInfo {
+    @Getter
+    @Setter
+    private ServerConfiguration serverConfiguration;
+    @Getter
+    @Setter
+    private BorgVersion borgVersion;
+}
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationRest.java
index a0c5c08..a5b2ad4 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ConfigurationRest.java
@@ -4,7 +4,6 @@
 import de.micromata.borgbutler.config.ConfigurationHandler;
 import de.micromata.borgbutler.json.JsonUtils;
 import de.micromata.borgbutler.server.BorgInstallation;
-import de.micromata.borgbutler.server.BorgVersion;
 import de.micromata.borgbutler.server.ServerConfiguration;
 import de.micromata.borgbutler.server.user.UserData;
 import de.micromata.borgbutler.server.user.UserManager;
@@ -20,7 +19,6 @@
     private Logger log = LoggerFactory.getLogger(ConfigurationRest.class);
 
     /**
-     *
      * @param prettyPrinter If true then the json output will be in pretty format.
      * @see JsonUtils#toJson(Object, boolean)
      */
@@ -28,7 +26,10 @@
     @Path("config")
     @Produces(MediaType.APPLICATION_JSON)
     public String getConfig(@QueryParam("prettyPrinter") boolean prettyPrinter) {
-        String json = JsonUtils.toJson(ServerConfiguration.get(), prettyPrinter);
+        ConfigurationInfo configurationInfo = new ConfigurationInfo();
+        configurationInfo.setServerConfiguration(ServerConfiguration.get());
+        configurationInfo.setBorgVersion(BorgInstallation.getInstance().getBorgVersion());
+        String json = JsonUtils.toJson(configurationInfo, prettyPrinter);
         return json;
     }
 
@@ -37,16 +38,14 @@
     @Produces(MediaType.TEXT_PLAIN)
     public void setConfig(String jsonConfig) {
         ConfigurationHandler configurationHandler = ConfigurationHandler.getInstance();
-        ServerConfiguration config = (ServerConfiguration)configurationHandler.getConfiguration();
-        ServerConfiguration srcConfig = JsonUtils.fromJson(ServerConfiguration.class, jsonConfig);
-        BorgVersion oldBorgVersion = config.getBorgVersion();
-        config.copyFrom(srcConfig);
-        BorgInstallation.getInstance().configure(oldBorgVersion);
+        ConfigurationInfo configurationInfo = JsonUtils.fromJson(ConfigurationInfo.class, jsonConfig);
+        BorgInstallation.getInstance().configure(configurationInfo.getServerConfiguration(), configurationInfo.getBorgVersion().getBorgBinary());
+        ServerConfiguration configuration = ServerConfiguration.get();
+        configuration.copyFrom(configurationInfo.getServerConfiguration());
         configurationHandler.save();
     }
 
     /**
-     *
      * @param prettyPrinter If true then the json output will be in pretty format.
      * @see JsonUtils#toJson(Object, boolean)
      */
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java
index ce585cf..6f8112c 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/SystemInfoRest.java
@@ -2,8 +2,8 @@
 
 import de.micromata.borgbutler.BorgQueueExecutor;
 import de.micromata.borgbutler.json.JsonUtils;
+import de.micromata.borgbutler.server.BorgInstallation;
 import de.micromata.borgbutler.server.BorgVersion;
-import de.micromata.borgbutler.server.ServerConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -24,7 +24,7 @@
     @Produces(MediaType.APPLICATION_JSON)
     @Path("info")
     public String getStatistics() {
-        BorgVersion borgVersion = ServerConfiguration.get().getBorgVersion();
+        BorgVersion borgVersion = BorgInstallation.getInstance().getBorgVersion();
         SystemInfo systemInfonfo = new SystemInfo()
                 .setQueueStatistics(BorgQueueExecutor.getInstance().getStatistics())
                 .setConfigurationOK(borgVersion.isVersionOK())
diff --git a/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx b/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx
index eff23c4..014ec80 100644
--- a/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx
+++ b/borgbutler-webapp/src/components/views/config/ConfigurationServerTab.jsx
@@ -35,9 +35,9 @@
             .then((data) => {
                 this.setState({
                     loading: false,
+                    borgVersion: data.borgVersion,
                     borgBinary: data.borgVersion.borgBinary,
-                    borgCommand: data.borgVersion.borgCommand,
-                    ...data
+                    ...data.serverConfiguration
                 })
             })
             .catch((error) => {
@@ -84,12 +84,14 @@
 
     save() {
         var config = {
-            port: this.state.port,
-            maxArchiveContentCacheCapacityMb: this.state.maxArchiveContentCacheCapacityMb,
-            webDevelopmentMode: this.state.webDevelopmentMode,
-            showDemoRepos: this.state.showDemoRepos,
+            serverConfiguration: {
+                port: this.state.port,
+                maxArchiveContentCacheCapacityMb: this.state.maxArchiveContentCacheCapacityMb,
+                webDevelopmentMode: this.state.webDevelopmentMode,
+                showDemoRepos: this.state.showDemoRepos,
+                borgCommand: this.state.borgCommand
+            },
             borgVersion: {
-                borgCommand: this.state.borgCommand,
                 borgBinary: this.state.borgBinary
             }
         };

--
Gitblit v1.10.0