From d8523faa15d17a70009f0391ef535c04c1c9f6bc Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 13 Jan 2019 23:04:56 +0000
Subject: [PATCH] Demo mode...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/demo/DemoRepos.java              |   67 ++++++++++-----------------------
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java        |   18 ++++++++-
 borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java |    4 +-
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java                     |    2 
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java           |    7 ---
 borgbutler-core/src/main/resources/demodata/repo-info.json.gz                          |    0 
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java     |    2 -
 7 files changed, 40 insertions(+), 60 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
index bf3e585..5efda3d 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
@@ -106,7 +106,7 @@
 
     @Override
     public JobResult<String> execute() {
-        if (DemoRepos.isDemo(command.getRepoConfig().getId())) {
+        if (DemoRepos.isDemo(command.getRepoConfig().getRepo())) {
             return DemoRepos.execute(command);
         }
         return super.execute();
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
index 0bdb267..2c45d9c 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -8,7 +8,6 @@
 import de.micromata.borgbutler.data.ArchiveShortInfo;
 import de.micromata.borgbutler.data.FileSystemFilter;
 import de.micromata.borgbutler.data.Repository;
-import de.micromata.borgbutler.demo.DemoRepos;
 import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.jcs.JCS;
@@ -60,9 +59,6 @@
                 }
             }
         }
-        if (DemoRepos.isDemo(idOrName)) {
-            return DemoRepos.getRepo(idOrName);
-        }
         log.warn("Repo with id or name '" + idOrName + "' not found.");
         return null;
     }
@@ -147,9 +143,6 @@
             return repository;
         }
         BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(repository.getName());
-        if (repoConfig == null && DemoRepos.isDemo(idOrName)) {
-            repoConfig = DemoRepos.getRepoConfig(idOrName);
-        }
         BorgCommands.list(repoConfig, repository);
         updateArchivesCacheStatusAndShortInfos(repository);
         return repository;
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
index c52ae85..d06e30b 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/Configuration.java
@@ -2,6 +2,7 @@
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import de.micromata.borgbutler.demo.DemoRepos;
 import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.Setter;
@@ -45,7 +46,6 @@
     @JsonIgnore
     private File restoreHomeDir;
 
-    @Getter
     private List<BorgRepoConfig> repoConfigs = new ArrayList<>();
 
     public void add(BorgRepoConfig repoConfig) {
@@ -56,7 +56,7 @@
         if (idOrName == null) {
             return null;
         }
-        for (BorgRepoConfig repoConfig : repoConfigs) {
+        for (BorgRepoConfig repoConfig : getRepoConfigs()) {
             if (StringUtils.equals(idOrName, repoConfig.getRepo()) || StringUtils.equals(idOrName, repoConfig.getId())) {
                 return repoConfig;
             }
@@ -83,4 +83,18 @@
         this.maxArchiveContentCacheCapacityMb = other.maxArchiveContentCacheCapacityMb;
         this.showDemoRepos = other.showDemoRepos;
     }
+
+    public List<BorgRepoConfig> getRepoConfigs() {
+        if (!ConfigurationHandler.getConfiguration().isShowDemoRepos()) {
+            return repoConfigs;
+        }
+        List<BorgRepoConfig> result = new ArrayList<>();
+        result.addAll(repoConfigs);
+        DemoRepos.addDemoRepos(result);
+        return result;
+    }
+
+    List<BorgRepoConfig> _getRepoConfigs() {
+        return repoConfigs;
+    }
 }
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
index 41bb53c..baad873 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/config/ConfigurationHandler.java
@@ -48,8 +48,8 @@
                 }
             }
             this.configuration = JsonUtils.fromJson(configClazz, json);
-            if (this.configuration.getRepoConfigs() != null) {
-                for (BorgRepoConfig repoConfig : this.configuration.getRepoConfigs()) {
+            if (this.configuration._getRepoConfigs() != null) {
+                for (BorgRepoConfig repoConfig : this.configuration._getRepoConfigs()) {
                     if (StringUtils.isBlank(repoConfig.getDisplayName())) {
                         repoConfig.setDisplayName(repoConfig.getRepo());
                     }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/demo/DemoRepos.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/demo/DemoRepos.java
index 9d14cf4..3ed2295 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/demo/DemoRepos.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/demo/DemoRepos.java
@@ -4,7 +4,6 @@
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.ConfigurationHandler;
 import de.micromata.borgbutler.config.Definitions;
-import de.micromata.borgbutler.data.Repository;
 import de.micromata.borgbutler.jobs.JobResult;
 import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
 import org.apache.commons.io.IOUtils;
@@ -12,7 +11,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -21,19 +22,19 @@
     private static final String DEMO_IDENTIFIER = "borgbutler-demo";
 
     private static final String[] REPOS = {"fast", "slow", "very-slow"};
-    private static List<Repository> demoRepos;
+    private static List<BorgRepoConfig> demoRepos;
 
     /**
      * If configured by the user, demo repositories are added to the given list. If not configured this method does nothing.
      *
      * @param repositoryList
      */
-    public static void addDemoRepos(List<Repository> repositoryList) {
+    public static void addDemoRepos(List<BorgRepoConfig> repositoryList) {
         if (!ConfigurationHandler.getConfiguration().isShowDemoRepos()) {
             return;
         }
         init();
-        for (Repository repo : demoRepos) {
+        for (BorgRepoConfig repo : demoRepos) {
             repositoryList.add(repo);
         }
     }
@@ -42,33 +43,6 @@
         return StringUtils.startsWith(idOrName, DEMO_IDENTIFIER);
     }
 
-    public static Repository getRepo(String idOrName) {
-        if (!isDemo(idOrName)) {
-            log.info("Given idOrName doesn't fit any demo repository: " + idOrName);
-            return null;
-        }
-        init();
-        for (Repository repo : demoRepos) {
-            if (StringUtils.equals(idOrName, repo.getId())) {
-                return repo;
-            }
-        }
-        return null;
-    }
-
-    public static BorgRepoConfig getRepoConfig(String idOrName) {
-        BorgRepoConfig repoConfig = new BorgRepoConfig();
-        Repository repository = getRepo(idOrName);
-        if (repository == null) {
-            log.info("Given idOrName doesn't fit any demo repository: " + idOrName);
-            return null;
-        }
-        repoConfig.setRepo(repository.getName())
-                .setId(repository.getId())
-                .setDisplayName(repository.getName());
-        return repoConfig;
-    }
-
     public static JobResult<String> execute(BorgCommand command) {
         StringBuilder sb = new StringBuilder();
         if (command.getArchive() != null) {
@@ -93,19 +67,20 @@
     }
 
     private static void init() {
-        demoRepos = new ArrayList<>();
-        demoRepos.add(new Repository()
-                .setId(DEMO_IDENTIFIER + "-fast")
-                .setName(DEMO_IDENTIFIER + "-fast")
-                .setDisplayName("Demo repository fast"));
-        demoRepos.add(new Repository()
-                .setId(DEMO_IDENTIFIER + "-slow")
-                .setName(DEMO_IDENTIFIER + "-slow")
-                .setDisplayName("Demo repository slow"));
-        demoRepos.add(new Repository()
-                .setId(DEMO_IDENTIFIER + "-very-slow")
-                .setName(DEMO_IDENTIFIER + "-very-slow")
-                .setDisplayName("Demo repository very-slow"));
-
+        synchronized (DEMO_IDENTIFIER) {
+            if (demoRepos != null) {
+                return;
+            }
+            demoRepos = new ArrayList<>();
+            demoRepos.add(new BorgRepoConfig()
+                    .setRepo(DEMO_IDENTIFIER + "-fast")
+                    .setDisplayName("Demo repository fast"));
+            demoRepos.add(new BorgRepoConfig()
+                    .setRepo(DEMO_IDENTIFIER + "-slow")
+                    .setDisplayName("Demo repository slow"));
+            demoRepos.add(new BorgRepoConfig()
+                    .setRepo(DEMO_IDENTIFIER + "-very-slow")
+                    .setDisplayName("Demo repository very-slow"));
+        }
     }
 }
diff --git a/borgbutler-core/src/main/resources/demodata/repo-info.json.gz b/borgbutler-core/src/main/resources/demodata/repo-info.json.gz
new file mode 100644
index 0000000..c8bba90
--- /dev/null
+++ b/borgbutler-core/src/main/resources/demodata/repo-info.json.gz
Binary files differ
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
index d94bf2a..3152f1c 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
@@ -4,7 +4,6 @@
 import de.micromata.borgbutler.data.Repository;
 import de.micromata.borgbutler.json.JsonUtils;
 import de.micromata.borgbutler.json.borg.BorgRepository;
-import de.micromata.borgbutler.demo.DemoRepos;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -31,7 +30,6 @@
      */
     public String getList(@QueryParam("prettyPrinter") boolean prettyPrinter) {
         List<Repository> repositories = ButlerCache.getInstance().getAllRepositories();
-        DemoRepos.addDemoRepos(repositories);
         if (CollectionUtils.isEmpty(repositories)) {
             return "[]";
         }

--
Gitblit v1.10.0