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