From 4ece88750272b3e2fc0bbccec7202d2faa1115b8 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 08 Dec 2018 23:32:11 +0000
Subject: [PATCH] cache refactored.
---
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java | 43 +++++---------
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java | 6 +-
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java | 28 ++++++++
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoListCache.java | 24 ++++++++
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java | 4
borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/RepositoryMatcher.java | 2
borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java | 18 +++---
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/RepoInfoCache.java | 26 ++++++++
8 files changed, 105 insertions(+), 46 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 41da950..ed58dae 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,7 @@
import de.micromata.borgbutler.config.Configuration;
import de.micromata.borgbutler.config.ConfigurationHandler;
import de.micromata.borgbutler.json.JsonUtils;
-import de.micromata.borgbutler.json.borg.ArchiveList;
+import de.micromata.borgbutler.json.borg.ArchiveInfo;
import de.micromata.borgbutler.json.borg.RepoInfo;
import de.micromata.borgbutler.json.borg.RepoList;
import org.apache.commons.exec.*;
@@ -44,12 +44,12 @@
* @param archive
* @return
*/
- public static ArchiveList info(BorgRepoConfig repoConfig, String archive) {
+ public static ArchiveInfo info(BorgRepoConfig repoConfig, String archive) {
String json = execute(repoConfig, "info", repoConfig.getRepo() + "::" + archive, "--json");
if (json == null) {
return null;
}
- ArchiveList archiveList = JsonUtils.fromJson(ArchiveList.class, json);
+ ArchiveInfo archiveList = JsonUtils.fromJson(ArchiveInfo.class, json);
archiveList.setOriginalJson(json);
return archiveList;
}
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 0b70220..b1fc92d 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
@@ -2,8 +2,8 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
+import de.micromata.borgbutler.config.BorgRepoConfig;
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;
@@ -13,8 +13,8 @@
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
public abstract class AbstractCache<T> {
private static Logger log = LoggerFactory.getLogger(AbstractCache.class);
@@ -25,40 +25,27 @@
protected File cacheFile;
@Getter
@JsonProperty
- private List<T> elements = new ArrayList<>();
+ protected Map<String, T> elements = new HashMap<>();
- public T get(String identifier) {
+ public T get(BorgRepoConfig repoConfig, String identifier) {
if (identifier == null) {
return null;
}
- for (T element : elements) {
+ for (T element : elements.values()) {
if (matches(element, identifier)) {
return element;
}
}
- return null;
+ return load(repoConfig, 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);
- }
+ protected abstract T load(BorgRepoConfig repoConfig, String identifier);
- 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 boolean matches(T element, String identifier);
- 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));
- }
+ public abstract String getIdentifier(T element);
+
+ public abstract void updateFrom(T dest, T source);
/**
* Removes all entries (doesn't effect the cache files!).
@@ -67,10 +54,10 @@
elements.clear();
}
- public void upsert(T element) {
- T existingElement = get(getIdentifier(element));
+ public void upsert(BorgRepoConfig repoConfig, T element) {
+ T existingElement = get(repoConfig, getIdentifier(element));
if (existingElement == null) {
- elements.add(element);
+ elements.put(getIdentifier(element), element);
} else {
updateFrom(existingElement, element);
}
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
index 6f3a38a..c418939 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveListCache.java
@@ -1,15 +1,39 @@
package de.micromata.borgbutler.cache;
-import de.micromata.borgbutler.json.borg.ArchiveList;
+import de.micromata.borgbutler.BorgCommands;
+import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.json.borg.ArchiveInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
-public class ArchiveListCache extends AbstractCache<ArchiveList> {
+public class ArchiveListCache extends AbstractCache<ArchiveInfo> {
private static Logger log = LoggerFactory.getLogger(ArchiveListCache.class);
public static final String CACHE_ARCHIVE_LISTS_BASENAME = "archive-lists";
+ @Override
+ protected ArchiveInfo load(BorgRepoConfig repoConfig, String identifier) {
+ ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, identifier);
+ this.elements.put(getIdentifier(archiveInfo), archiveInfo);
+ return archiveInfo;
+ }
+
+ @Override
+ public boolean matches(ArchiveInfo element, String identifier) {
+ return element.matches(identifier);
+ }
+
+ @Override
+ public String getIdentifier(ArchiveInfo element) {
+ return element.getRepository().getId();
+ }
+
+ @Override
+ public void updateFrom(ArchiveInfo dest, ArchiveInfo source) {
+ dest.updateFrom(source);
+ }
+
/**
* Needed by jackson for deserialization.
*/
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 2e41324..d6f360d 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,5 +1,7 @@
package de.micromata.borgbutler.cache;
+import de.micromata.borgbutler.BorgCommands;
+import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.json.borg.RepoInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -8,7 +10,29 @@
public class RepoInfoCache extends AbstractCache<RepoInfo> {
private static Logger log = LoggerFactory.getLogger(RepoInfoCache.class);
- public static final String CACHE_REPOS_BASENAME = "repos";
+ public static final String CACHE_REPOS_BASENAME = "repo-infos";
+
+ @Override
+ protected RepoInfo load(BorgRepoConfig repoConfig, String identifier) {
+ RepoInfo repoInfo = BorgCommands.info(repoConfig);
+ this.elements.put(getIdentifier(repoInfo), repoInfo);
+ return repoInfo;
+ }
+
+ @Override
+ public boolean matches(RepoInfo element, String identifier) {
+ return element.matches(identifier);
+ }
+
+ @Override
+ public String getIdentifier(RepoInfo element) {
+ return element.getRepository().getId();
+ }
+
+ @Override
+ 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 4851278..6a3eea3 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,5 +1,7 @@
package de.micromata.borgbutler.cache;
+import de.micromata.borgbutler.BorgCommands;
+import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.json.borg.RepoList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -10,6 +12,28 @@
private static Logger log = LoggerFactory.getLogger(RepoListCache.class);
public static final String CACHE_REPO_LISTS_BASENAME = "repo-lists";
+ @Override
+ protected RepoList load(BorgRepoConfig repoConfig, String identifier) {
+ RepoList repoList = BorgCommands.list(repoConfig);
+ this.elements.put(getIdentifier(repoList), repoList);
+ return repoList;
+ }
+
+ @Override
+ public boolean matches(RepoList element, String identifier) {
+ return element.matches(identifier);
+ }
+
+ @Override
+ public String getIdentifier(RepoList element) {
+ return element.getRepository().getId();
+ }
+
+ @Override
+ 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/ArchiveList.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
similarity index 84%
rename from borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveList.java
rename to borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
index a03d7fe..76b40bc 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveList.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/ArchiveInfo.java
@@ -9,7 +9,7 @@
/**
* Result of <tt>borg list repo</tt>.
*/
-public class ArchiveList extends RepositoryMatcher {
+public class ArchiveInfo extends RepositoryMatcher {
@Getter
private List<Archive2> archives;
@Getter
@@ -21,7 +21,7 @@
@JsonIgnore
private String originalJson;
- public void updateFrom(ArchiveList archiveList) {
+ public void updateFrom(ArchiveInfo archiveList) {
super.updateFrom(archiveList);
this.archives = archiveList.archives;
this.cache = archiveList.cache;
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
index 20f183b..207c516 100644
--- 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
@@ -23,7 +23,7 @@
}
public boolean matches(String identifier) {
- if (repository == null) {
+ if (repository == null || identifier == null) {
return false;
}
return identifier.equals(repository.getId()) || identifier.equals(repository.getName())
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 7f68d7a..e16e0bd 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
@@ -52,7 +52,7 @@
BorgRepoConfig repoConfig = null;
if (CollectionUtils.isNotEmpty(repoConfigs)) {
repoConfig = repoConfigs.get(0);
- RepoList repoList = ButlerCache.getInstance().getRepoListCache().get(repoConfig.getRepo());
+ RepoList repoList = ButlerCache.getInstance().getRepoListCache().get(repoConfig, repoConfig.getRepo());
if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) {
archive = repoList.getArchives().get(0);
}
@@ -72,11 +72,11 @@
}
}*/
}
- {
+ {/*
if (archive != null) {
String json = BorgCommands.list(repoConfig, archive.getArchive());
log.info(json);
- }
+ }*/
}
butlerCache.save();
}
@@ -85,8 +85,8 @@
for (BorgRepoConfig repo : config.getRepoConfigs()) {
log.info("Processing repo info '" + repo + "'");
RepoInfo repoInfo = BorgCommands.info(repo);
- repoInfoCache.upsert(repoInfo);
- repoInfo = repoInfoCache.get(repoInfo.getRepository().getId());
+ repoInfoCache.upsert(repo, repoInfo);
+ repoInfo = repoInfoCache.get(repo, repoInfo.getRepository().getId());
assertNotNull(repoInfo);
}
}
@@ -95,8 +95,8 @@
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());
+ repoListCache.upsert(repo, repoList);
+ repoList = repoListCache.get(repo, repoList.getRepository().getId());
assertNotNull(repoList);
}
}
@@ -105,8 +105,8 @@
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());
+ repoListCache.upsert(repo, repoList);
+ repoList = repoListCache.get(repo, repoList.getRepository().getId());
assertNotNull(repoList);
}
}
--
Gitblit v1.10.0