From 6ab55d3f236c98b4381cc8b37057e684aa522e7f Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 09 Dec 2018 14:27:49 +0000
Subject: [PATCH] Caches...
---
borgbutler-core/src/main/java/de/micromata/borgbutler/cache/AbstractCache.java | 60 ++++++++++++++----------------------------------------------
1 files changed, 14 insertions(+), 46 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 569c11f..b31e7e0 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
@@ -1,7 +1,6 @@
package de.micromata.borgbutler.cache;
import com.fasterxml.jackson.annotation.JsonIgnore;
-import de.micromata.borgbutler.config.BorgRepoConfig;
import de.micromata.borgbutler.config.Definitions;
import de.micromata.borgbutler.json.JsonUtils;
import lombok.Getter;
@@ -15,73 +14,40 @@
import java.io.*;
import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-public abstract class AbstractCache<T> {
+public abstract class AbstractCache {
private static Logger log = LoggerFactory.getLogger(AbstractCache.class);
private static final String CACHE_FILE_PREFIX = "cache-";
private static final String CACHE_FILE_EXTENSION = "json";
- private static final String CACHE_FILE_ZIP_EXTENSION = ".zip";
+ private static final String CACHE_FILE_ZIP_EXTENSION = ".gz";
/**
* INITIAL - on startup (not yet read), DIRTY - modifications not written, SAVED - content written to file.
*/
- private enum STATE {INITIAL, DIRTY, SAVED}
+ protected enum STATE {INITIAL, DIRTY, SAVED}
@JsonIgnore
protected File cacheFile;
@JsonIgnore
@Getter
- private boolean zip;
+ private boolean compress;
+ @Getter
@JsonIgnore
private STATE state = STATE.INITIAL;
@Getter
private Date lastModified;
@Getter
private Date created;
- @Getter
- protected Map<String, T> elements = new HashMap<>();
-
- public T get(BorgRepoConfig repoConfig, String identifier) {
- if (identifier == null) {
- return null;
- }
- if (this.state == STATE.INITIAL) {
- read();
- }
- for (T element : elements.values()) {
- if (matches(element, identifier)) {
- return element;
- }
- }
- return load(repoConfig, identifier);
- }
-
- protected abstract T load(BorgRepoConfig repoConfig, String identifier);
-
- public abstract boolean matches(T element, String identifier);
-
- public abstract String getIdentifier(T element);
-
- public abstract void updateFrom(T dest, T source);
/**
* Removes all entries (doesn't effect the cache files!).
*/
public void clear() {
- elements.clear();
state = STATE.DIRTY;
}
- public void upsert(BorgRepoConfig repoConfig, T element) {
- T existingElement = get(repoConfig, getIdentifier(element));
- if (existingElement == null) {
- elements.put(getIdentifier(element), element);
- } else {
- updateFrom(existingElement, element);
- }
- state = STATE.DIRTY; // Needed to save cache to file.
+ protected void setDirty() {
+ state = STATE.DIRTY;
}
public void read() {
@@ -93,7 +59,7 @@
}
log.info("Parsing cache file '" + cacheFile.getAbsolutePath() + "'.");
String json;
- if (zip) {
+ if (compress) {
try (GzipCompressorInputStream in = new GzipCompressorInputStream(new FileInputStream(cacheFile))) {
StringWriter writer = new StringWriter();
IOUtils.copy(in, writer, Definitions.STD_CHARSET);
@@ -104,10 +70,10 @@
}
AbstractCache readCache = JsonUtils.fromJson(this.getClass(), json);
if (readCache != null) {
- this.elements = readCache.elements;
this.lastModified = readCache.lastModified;
this.created = readCache.created;
this.state = STATE.SAVED; // State of cache is updated from cache file.
+ update(readCache);
} else {
log.error("Error while parsing cache: " + cacheFile.getAbsolutePath());
this.state = STATE.DIRTY; // Needed to save cache to file.
@@ -119,6 +85,8 @@
}
}
+ protected abstract void update(AbstractCache readCache);
+
public void save() {
if (this.state == STATE.SAVED || this.state == STATE.INITIAL) {
log.info("Cache file is up to date (nothing to save): " + cacheFile);
@@ -132,7 +100,7 @@
}
String json = JsonUtils.toJson(this);
try {
- if (this.zip) {
+ if (this.compress) {
try (GzipCompressorOutputStream out = new GzipCompressorOutputStream(new FileOutputStream(cacheFile))) {
IOUtils.copy(new StringReader(json), out, Definitions.STD_CHARSET);
}
@@ -158,9 +126,9 @@
}
AbstractCache(File cacheDir, String cacheFilename, boolean zip) {
- this.zip = zip;
+ this.compress = zip;
String filename = CACHE_FILE_PREFIX + cacheFilename + "." + CACHE_FILE_EXTENSION;
- if (this.zip)
+ if (this.compress)
filename = filename + CACHE_FILE_EXTENSION;
cacheFile = new File(cacheDir, CACHE_FILE_PREFIX + cacheFilename + "." + CACHE_FILE_EXTENSION);
this.state = STATE.INITIAL;
--
Gitblit v1.10.0