From 7da4760af26519051b1accd840c9199a11f7491a Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Mon, 10 Dec 2018 16:53:15 +0000
Subject: [PATCH] JCS...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java |   42 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
index b3ae45e..0b1a425 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java
@@ -5,6 +5,7 @@
 import de.micromata.borgbutler.config.BorgRepoConfig;
 import de.micromata.borgbutler.config.ConfigurationHandler;
 import de.micromata.borgbutler.json.borg.*;
+import org.apache.commons.jcs.JCS;
 import org.apache.commons.jcs.access.CacheAccess;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -22,6 +23,7 @@
     private JCSCache jcsCache = JCSCache.getInstance();
     private CacheAccess<String, RepoInfo> repoInfoCacheAccess;
     private CacheAccess<String, RepoList> repoListCacheAccess;
+    private CacheAccess<String, List<FilesystemItem>> archiveContentCacheAccess;
 
     @JsonIgnore
     private File cacheDir;
@@ -65,25 +67,53 @@
 
     public RepoList getRepoList(String idOrName) {
         BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
-        ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, repoConfig.getRepo());
-        RepoList repoList = BorgCommands.list(repoConfig);
-        return null;
+        //ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, repoConfig.getRepo());
+        RepoList repoList = repoListCacheAccess.get(repoConfig.getRepo());
+        if (repoList == null) {
+            repoList = BorgCommands.list(repoConfig);
+            repoListCacheAccess.put(repoConfig.getRepo(), repoList);
+        }
+        if (repoList == null) {
+            log.warn("Repo with name '" + idOrName + "' not found.");
+        }
+        return repoList;
     }
 
-    public List<FilesystemItem> getArchiveContent_(BorgRepoConfig repoConfig, Archive archive) {
+    public List<FilesystemItem> getArchiveContent(BorgRepoConfig repoConfig, Archive archive) {
         if (archive == null || StringUtils.isBlank(archive.getArchive())) {
             return null;
         }
-        List<FilesystemItem> content = BorgCommands.list(repoConfig, archive);
+        String repoArchiveId = getRepoArchiveId(repoConfig.getRepo(), archive.getId());
+        List<FilesystemItem> content = archiveContentCacheAccess.get(repoArchiveId);
+        if (content == null) {
+            content = BorgCommands.listArchiveContent(repoConfig, archive);
+            archiveContentCacheAccess.put(repoArchiveId, content);
+            archiveContentCacheAccess.getStatistics();
+        }
+        log.info("archiveContentCacheAccess.stats: " + this.archiveContentCacheAccess.getStats());
+        if (content == null) {
+            log.warn("Repo::archiv with name '" + repoConfig.getRepo() + "::" + archive.getArchive() + "' not found.");
+        }
         return content;
     }
 
+    public String getRepoArchiveId(String repo, String archiveId) {
+        return repo + "::" + archiveId;
+    }
+
+    public void shutdown() {
+        log.info("archiveContentCacheAccess.stats: " + this.archiveContentCacheAccess.getStats());
+        JCS.shutdown();
+    }
+
     private ButlerCache() {
         cacheDir = new File(ConfigurationHandler.getInstance().getWorkingDir(), CACHE_DIR_NAME);
         if (!cacheDir.exists()) {
             log.info("Creating cache dir: " + cacheDir.getAbsolutePath());
             cacheDir.mkdir();
         }
-        this.repoInfoCacheAccess = jcsCache.getJCSCache();
+        this.repoInfoCacheAccess = jcsCache.getJCSCache("repoInfo");
+        this.repoListCacheAccess = jcsCache.getJCSCache("repoList");
+        this.archiveContentCacheAccess = jcsCache.getJCSCache("archiveContent");
     }
 }

--
Gitblit v1.10.0