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 +++++++++++++++----------------------------
1 files changed, 15 insertions(+), 28 deletions(-)
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);
}
--
Gitblit v1.10.0