From ba6e886edf5a302a33a82cd184e34370b9fc214a Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 14 Jan 2019 00:11:26 +0000
Subject: [PATCH] Demo mode...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java |    2 +-
 borgbutler-core/src/main/java/de/micromata/borgbutler/demo/DemoRepos.java              |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java                |    2 ++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java                     |    2 +-
 4 files changed, 54 insertions(+), 4 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 c5ce9c1..f9ed76e 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,7 @@
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.data.Archive;
 import de.micromata.borgbutler.data.Repository;
+import de.micromata.borgbutler.demo.DemoRepos;
 import de.micromata.borgbutler.jobs.JobResult;
 import de.micromata.borgbutler.json.JsonUtils;
 import de.micromata.borgbutler.json.borg.*;
@@ -72,6 +73,7 @@
                 .setEncryption(repoInfo.getEncryption())
                 .setSecurityDir(repoInfo.getSecurityDir())
                 .setLastCacheRefresh(DateUtils.format(LocalDateTime.now()));
+        DemoRepos.repoWasRead(repoConfig, repository);
         return repository;
     }
 
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 650533a..707cc8a 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgJob.java
@@ -72,7 +72,7 @@
         return commandLine;
     }
 
-    protected void processStdErrLine(String line, int level) {
+    public void processStdErrLine(String line, int level) {
         try {
             if (StringUtils.startsWith(line, "{\"message")) {
                 ProgressInfo message = JsonUtils.fromJson(ProgressInfo.class, line);
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 32ee46f..cc0bd61 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
@@ -5,7 +5,10 @@
 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 de.micromata.borgbutler.json.JsonUtils;
+import de.micromata.borgbutler.json.borg.ProgressInfo;
 import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -20,6 +23,8 @@
 import java.util.Scanner;
 
 public class DemoRepos {
+    private enum Type {FAST, SLOW, VERY_SLOW}
+
     private static Logger log = LoggerFactory.getLogger(DemoRepos.class);
     private static final String DEMO_IDENTIFIER = "borgbutler-demo";
 
@@ -41,12 +46,23 @@
         }
     }
 
-    public static boolean isDemo(String idOrName) {
-        return StringUtils.startsWith(idOrName, DEMO_IDENTIFIER);
+    public static boolean isDemo(String name) {
+        return StringUtils.startsWith(name, DEMO_IDENTIFIER);
+    }
+
+    public static void repoWasRead(BorgRepoConfig repoConfig, Repository repository) {
+        if (!isDemo(repository.getName())) {
+            return;
+        }
+        repository.setId(repository.getId() + "-" + REPOS[getType(repoConfig).ordinal()]);
     }
 
     public static JobResult<String> execute(BorgJob job) {
         BorgCommand command = job.getCommand();
+        if (!StringUtils.equalsAny(command.getCommand(), "list", "info")) {
+            log.info("Commmand '" + command.getCommand() + "' not supported for demo repositories.");
+            return new JobResult<String>().setStatus(JobResult.Status.ERROR);
+        }
         StringBuilder sb = new StringBuilder();
         boolean archive = command.getArchive() != null;
         if (archive) {
@@ -59,9 +75,32 @@
             sb.append("-").append(command.getArchive());
         }
         sb.append(".json.gz");
+        int wait = 0;
+        Type type = getType(command.getRepoConfig());
+        if (type == Type.VERY_SLOW) {
+            wait = 10;
+        } else if (type == Type.SLOW) {
+            wait = 1;
+        }
         String file = sb.toString();
         log.info("Loading demo archive from '" + file + "'...");
         try (InputStream inputStream = new GzipCompressorInputStream(DemoRepos.class.getResourceAsStream("/demodata/" + file))) {
+            if (wait > 0) {
+                ProgressInfo progress = new ProgressInfo()
+                        .setMessage("Faked demo progress")
+                        .setTotal(10 * wait);
+                for (int i = 0; i < 10 * wait; i++) {
+                    if (job.isCancellationRequested()) {
+                        break;
+                    }
+                    try {
+                        Thread.sleep(1000);
+                    } catch (InterruptedException ex) {
+                        // Do nothing.
+                    }
+                    job.processStdErrLine(JsonUtils.toJson(progress.setCurrent(i)), 0);
+                }
+            }
             if (archive && "list".equals(command.getCommand())) {
                 try (Scanner scanner = new Scanner(inputStream)) {
                     while (scanner.hasNextLine()) {
@@ -81,6 +120,15 @@
         }
     }
 
+    private static Type getType(BorgRepoConfig repoConfig) {
+        if (repoConfig.getRepo().endsWith("very-slow")) {
+            return Type.VERY_SLOW;
+        } else if (repoConfig.getRepo().endsWith("slow")) {
+            return Type.SLOW;
+        }
+        return Type.FAST;
+    }
+
     private static void init() {
         synchronized (DEMO_IDENTIFIER) {
             if (demoRepos != null) {
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
index c7675e3..4daf718 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
@@ -111,7 +111,7 @@
         }
     }
 
-    protected void processStdErrLine(String line, int level) {
+    public void processStdErrLine(String line, int level) {
         //log.info(line);
         try {
             errorOutputStream.write(line.getBytes());

--
Gitblit v1.10.0