From e01e6d75d5667a723b6aebd0abfebe323514f7fa Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 08 Dec 2018 21:45:41 +0000
Subject: [PATCH] refactoring...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java         |   22 +++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java      |   18 +++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java                |   10 +
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java          |   19 ---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java      |   22 ++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoListCache.java         |   18 ---
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java          |   31 ++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveList.java       |   30 ++++++
 borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java             |   18 +++
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java          |   20 ---
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java |   32 ++++++
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java         |   18 ---
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive1.java          |    5 
 13 files changed, 182 insertions(+), 81 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 09f5a74..a9a2893 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -4,7 +4,8 @@
 import de.micromata.borgbutler.config.Configuration;
 import de.micromata.borgbutler.config.ConfigurationHandler;
 import de.micromata.borgbutler.json.JsonUtils;
-import de.micromata.borgbutler.json.borg.Archive;
+import de.micromata.borgbutler.json.borg.Archive1;
+import de.micromata.borgbutler.json.borg.ArchiveList;
 import de.micromata.borgbutler.json.borg.RepoInfo;
 import de.micromata.borgbutler.json.borg.RepoList;
 import org.apache.commons.exec.*;
@@ -44,13 +45,14 @@
      * @param archive
      * @return
      */
-    public static String info(BorgRepoConfig repoConfig, Archive archive) {
+    public static ArchiveList info(BorgRepoConfig repoConfig, Archive1 archive) {
         String json = execute(repoConfig, "info", repoConfig.getRepo() + "::" + archive.getArchive(), "--json");
         if (json == null) {
             return null;
         }
-        log.info(json);
-        return json;
+        ArchiveList archiveList = JsonUtils.fromJson(ArchiveList.class, json);
+        archiveList.setOriginalJson(json);
+        return archiveList;
     }
 
     public static RepoList list(BorgRepoConfig repoConfig) {
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java
index 840be70..0b70220 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import de.micromata.borgbutler.json.JsonUtils;
+import de.micromata.borgbutler.json.borg.RepositoryMatcher;
 import lombok.Getter;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
@@ -38,11 +39,26 @@
         return null;
     }
 
-    public abstract boolean matches(T element, String identifier);
+    public boolean matches(T element, String identifier) {
+        if (!(element instanceof RepositoryMatcher)) {
+            throw new UnsupportedOperationException("matches not implemented, only available for RepositoryMatcher: " + this.getClass());
+        }
+        return ((RepositoryMatcher) element).matches(identifier);
+    }
 
-    public abstract String getIdentifier(T element);
+    public String getIdentifier(T element) {
+        if (!(element instanceof RepositoryMatcher)) {
+            throw new UnsupportedOperationException("matches not implemented, only available for RepositoryMatcher: " + this.getClass());
+        }
+        return ((RepositoryMatcher)element).getRepository().getId();
+    }
 
-    public abstract void updateFrom(T dest, T source);
+    public void updateFrom(T dest, T source) {
+        if (!(dest instanceof RepositoryMatcher)) {
+            throw new UnsupportedOperationException("matches not implemented, only available for RepositoryMatcher: " + this.getClass());
+        }
+        ((RepositoryMatcher)dest).updateFrom(((RepositoryMatcher)source));
+    }
 
     /**
      * Removes all entries (doesn't effect the cache files!).
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java
new file mode 100644
index 0000000..6f3a38a
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java
@@ -0,0 +1,22 @@
+package de.micromata.borgbutler.cache;
+
+import de.micromata.borgbutler.json.borg.ArchiveList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+
+public class ArchiveListCache extends AbstractCache<ArchiveList> {
+    private static Logger log = LoggerFactory.getLogger(ArchiveListCache.class);
+    public static final String CACHE_ARCHIVE_LISTS_BASENAME = "archive-lists";
+
+    /**
+     * Needed by jackson for deserialization.
+     */
+    ArchiveListCache() {
+    }
+
+    ArchiveListCache(File cacheDir) {
+        super(cacheDir, CACHE_ARCHIVE_LISTS_BASENAME);
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java
index 9f98632..2e41324 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java
@@ -1,7 +1,6 @@
 package de.micromata.borgbutler.cache;
 
 import de.micromata.borgbutler.json.borg.RepoInfo;
-import de.micromata.borgbutler.json.borg.Repository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -11,23 +10,6 @@
     private static Logger log = LoggerFactory.getLogger(RepoInfoCache.class);
     public static final String CACHE_REPOS_BASENAME = "repos";
 
-    public boolean matches(RepoInfo element, String identifier) {
-        Repository repository = element.getRepository();
-        if (repository == null) {
-            return false;
-        }
-        return identifier.equals(repository.getId()) || identifier.equals(repository.getName())
-                || identifier.equals(repository.getLocation());
-    }
-
-    public String getIdentifier(RepoInfo element) {
-        return element.getRepository().getId();
-    }
-
-    public void updateFrom(RepoInfo dest, RepoInfo source) {
-        dest.updateFrom(source);
-    }
-
     /**
      * Needed by jackson for deserialization.
      */
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoListCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoListCache.java
index 44a305a..4851278 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoListCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoListCache.java
@@ -1,7 +1,6 @@
 package de.micromata.borgbutler.cache;
 
 import de.micromata.borgbutler.json.borg.RepoList;
-import de.micromata.borgbutler.json.borg.Repository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -11,23 +10,6 @@
     private static Logger log = LoggerFactory.getLogger(RepoListCache.class);
     public static final String CACHE_REPO_LISTS_BASENAME = "repo-lists";
 
-    public boolean matches(RepoList element, String identifier) {
-        Repository repository = element.getRepository();
-        if (repository == null) {
-            return false;
-        }
-        return identifier.equals(repository.getId()) || identifier.equals(repository.getName())
-                || identifier.equals(repository.getLocation());
-    }
-
-    public String getIdentifier(RepoList element) {
-        return element.getRepository().getId();
-    }
-
-    public void updateFrom(RepoList dest, RepoList source) {
-        dest.updateFrom(source);
-    }
-
     /**
      * Needed by jackson for deserialization.
      */
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive1.java
similarity index 87%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive1.java
index d1c1241..65a4982 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive1.java
@@ -5,7 +5,10 @@
 import lombok.Getter;
 import lombok.Setter;
 
-public class Archive {
+/**
+ * This object is given by <tt>borg list repo</tt>.
+ */
+public class Archive1 {
     @Getter
     private String archive;
     @Getter
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java
new file mode 100644
index 0000000..47831dd
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/Archive2.java
@@ -0,0 +1,31 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import de.micromata.borgbutler.json.JsonUtils;
+import lombok.Getter;
+
+/**
+ * This object is given by <tt>borg list archive</tt>.
+ */
+public class Archive2 {
+    @Getter
+    @JsonProperty("chunker_params")
+    private int[] chunkerParams;
+    /**
+     * The command line used for creating this archive: borg create --filter...
+     */
+    @Getter
+    @JsonProperty("command_line")
+    private String[] commandLine;
+    @Getter
+    private String comment;
+    @Getter
+    private String start;
+    @Getter
+    private ArchiveStats stats;
+    @Getter
+    private String username;
+    public String toString() {
+        return JsonUtils.toJson(this, true);
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveList.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveList.java
new file mode 100644
index 0000000..a03d7fe
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveList.java
@@ -0,0 +1,30 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * Result of <tt>borg list repo</tt>.
+ */
+public class ArchiveList extends RepositoryMatcher {
+    @Getter
+    private List<Archive2> archives;
+    @Getter
+    private Cache cache;
+    @Getter
+    private Encryption encryption;
+    @Getter
+    @Setter
+    @JsonIgnore
+    private String originalJson;
+
+    public void updateFrom(ArchiveList archiveList) {
+        super.updateFrom(archiveList);
+        this.archives = archiveList.archives;
+        this.cache = archiveList.cache;
+        this.encryption = archiveList.encryption;
+    }
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java
new file mode 100644
index 0000000..6d3d9ce
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveStats.java
@@ -0,0 +1,18 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Getter;
+
+public class ArchiveStats {
+    @Getter
+    @JsonProperty("compressed_size")
+    private long compressedSize;
+    @Getter
+    @JsonProperty("deduplicated_size")
+    private long deduplicatedSize;
+    @Getter
+    private long nfiles;
+    @Getter
+    @JsonProperty("original_size")
+    private long originalSize;
+}
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
index 602573f..6c9ca1b 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoInfo.java
@@ -1,12 +1,9 @@
 package de.micromata.borgbutler.json.borg;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import de.micromata.borgbutler.json.JsonUtils;
 import lombok.Getter;
-import lombok.Setter;
 
-public class RepoInfo {
+public class RepoInfo extends RepositoryMatcher {
     @Getter
     @JsonProperty("security_dir")
     private String securityDir;
@@ -14,23 +11,11 @@
     private Cache cache;
     @Getter
     private Encryption encryption;
-    @Getter
-    private Repository repository;
-    @Getter
-    @Setter
-    @JsonIgnore
-    private String originalJson;
-
-    public String toString() {
-        return JsonUtils.toJson(this, true);
-    }
-
 
     public void updateFrom(RepoInfo repoInfo) {
+        super.updateFrom(repoInfo);
         this.securityDir = repoInfo.securityDir;
         this.cache = repoInfo.cache;
         this.encryption = repoInfo.encryption;
-        this.repository = repoInfo.getRepository();
-        this.originalJson = repoInfo.originalJson;
     }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
index dd55a03..51d1454 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepoList.java
@@ -1,32 +1,18 @@
 package de.micromata.borgbutler.json.borg;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import de.micromata.borgbutler.json.JsonUtils;
 import lombok.Getter;
-import lombok.Setter;
 
 import java.util.List;
 
-public class RepoList {
+public class RepoList extends RepositoryMatcher {
     @Getter
-    private List<Archive> archives;
+    private List<Archive1> archives;
     @Getter
     private Encryption encryption;
-    @Getter
-    private Repository repository;
-    @Getter
-    @Setter
-    @JsonIgnore
-    private String originalJson;
-
-    public String toString() {
-        return JsonUtils.toJson(this, true);
-    }
 
     public void updateFrom(RepoList repoList) {
+        super.updateFrom(repoList);
         this.archives = repoList.archives;
         this.encryption = repoList.encryption;
-        this.repository = repoList.getRepository();
-        this.originalJson = repoList.originalJson;
     }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java
new file mode 100644
index 0000000..20f183b
--- /dev/null
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java
@@ -0,0 +1,32 @@
+package de.micromata.borgbutler.json.borg;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import de.micromata.borgbutler.json.JsonUtils;
+import lombok.Getter;
+import lombok.Setter;
+
+public abstract class RepositoryMatcher {
+    @Getter
+    protected Repository repository;
+    @Getter
+    @Setter
+    @JsonIgnore
+    protected String originalJson;
+
+    public String toString() {
+        return JsonUtils.toJson(this, true);
+    }
+
+    public void updateFrom(RepositoryMatcher from) {
+        this.repository = from.repository;
+        this.originalJson = from.originalJson;
+    }
+
+    public boolean matches(String identifier) {
+        if (repository == null) {
+            return false;
+        }
+        return identifier.equals(repository.getId()) || identifier.equals(repository.getName())
+                || identifier.equals(repository.getLocation());
+    }
+}
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
index cff3e30..0b1bfef 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java
@@ -4,7 +4,8 @@
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.Configuration;
 import de.micromata.borgbutler.config.ConfigurationHandler;
-import de.micromata.borgbutler.json.borg.Archive;
+import de.micromata.borgbutler.json.borg.Archive1;
+import de.micromata.borgbutler.json.borg.ArchiveList;
 import de.micromata.borgbutler.json.borg.RepoInfo;
 import de.micromata.borgbutler.json.borg.RepoList;
 import org.apache.commons.collections4.CollectionUtils;
@@ -53,9 +54,10 @@
                 BorgRepoConfig repoConfig = repoConfigs.get(0);
                 RepoList repoList = ButlerCache.getRepoListCache().get(repoConfig.getRepo());
                 if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) {
-                    Archive archive = repoList.getArchives().get(0);
+                    Archive1 archive = repoList.getArchives().get(0);
                     if (archive != null) {
-                        String json = BorgCommands.info(repoConfig, archive);
+                        ArchiveList list = BorgCommands.info(repoConfig, archive);
+                        log.info(list.toString());
                     }
                 }
             }
@@ -82,4 +84,14 @@
             assertNotNull(repoList);
         }
     }
+
+    private void refresArchiveListCache(Configuration config, RepoListCache repoListCache) {
+        for (BorgRepoConfig repo : config.getRepoConfigs()) {
+            log.info("Processing repo list '" + repo + "'");
+            RepoList repoList = BorgCommands.list(repo);
+            repoListCache.upsert(repoList);
+            repoList = repoListCache.get(repoList.getRepository().getId());
+            assertNotNull(repoList);
+        }
+    }
 }

--
Gitblit v1.10.0