From 5844b5f3ece264b31ddd1e1b447cb4d1dd74f6f7 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 14 Dec 2018 20:17:38 +0000
Subject: [PATCH] ...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java |    3 +
 borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java   |    5 ++
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java               |    2 
 borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java        |   10 ----
 borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java            |   18 ++++++--
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java          |   47 ++++++++++++++++++-----
 borgbutler-core/src/test/java/de/micromata/borgbutler/cache/CacheTest.java            |   17 ++++----
 7 files changed, 67 insertions(+), 35 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 1a01d23..cca1438 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgCommands.java
@@ -112,7 +112,7 @@
         //executor.setExitValue(2);
         //ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
         //executor.setWatchdog(watchdog);
-        ExecuteResultHandler handler = new DefaultExecuteResultHandler();
+        //  ExecuteResultHandler handler = new DefaultExecuteResultHandler();
         PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
         executor.setStreamHandler(streamHandler);
         String borgCall = cmdLine.getExecutable() + " " + StringUtils.join(cmdLine.getArguments(), " ");
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
index 3e272cc..4b9ef45 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ArchiveFilelistCache.java
@@ -91,7 +91,8 @@
                 if (obj instanceof BorgFilesystemItem) {
                     list[i] = (BorgFilesystemItem) obj;
                 } else {
-                    log.error("Can't load archive content. FilesystemItem expected, but received: " + obj.getClass()
+                    log.error("Can't load archive content. FilesystemItem expected, but received: "
+                            + (obj != null ? obj.getClass() : "null")
                             + " at position " + i + ".");
                     return null;
                 }
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 76d5431..2598f7c 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,10 +5,13 @@
 import de.micromata.borgbutler.config.Configuration;
 import de.micromata.borgbutler.config.ConfigurationHandler;
 import de.micromata.borgbutler.data.Repository;
-import de.micromata.borgbutler.json.borg.*;
+import de.micromata.borgbutler.json.borg.BorgArchive;
+import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
+import de.micromata.borgbutler.json.borg.BorgRepoList;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.jcs.JCS;
 import org.apache.commons.jcs.access.CacheAccess;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -24,16 +27,21 @@
 
     private JCSCache jcsCache;
     private CacheAccess<String, Repository> repoCacheAccess;
+    private CacheAccess<String, Repository> repoArchivesCacheAccess;
     private ArchiveFilelistCache archiveFilelistCache;
 
     public static ButlerCache getInstance() {
         return instance;
     }
 
+    /**
+     * @param idOrName
+     * @return Repository without list of archives.
+     */
     public Repository getRepository(String idOrName) {
         BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
         Repository repository = repoCacheAccess.get(repoConfig.getRepo());
-        if (repository == null ||repository.getLocation() == null) {
+        if (repository == null || repository.getLocation() == null) {
             repository = BorgCommands.info(repoConfig);
             repoCacheAccess.put(repoConfig.getRepo(), repository);
         }
@@ -43,6 +51,9 @@
         return repository;
     }
 
+    /**
+     * @return the list of all repositories without the list of archives.
+     */
     public List<Repository> getAllRepositories() {
         List<Repository> repositories = new ArrayList<>();
         for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
@@ -55,8 +66,10 @@
         return repositories;
     }
 
-    public void clearAllCaches(){
+    public void clearAllCaches() {
         this.repoCacheAccess.clear();
+        log.info("Clearing repositories cache (with included archives)...");
+        this.repoArchivesCacheAccess.clear();
         log.info("Clearing cache with file lists of archives...");
         this.archiveFilelistCache.removeAllCacheFiles();
     }
@@ -66,19 +79,32 @@
         this.repoCacheAccess.clear();
     }
 
-/*    public BorgRepoList getRepoList(String idOrName) {
+    /**
+     * @param idOrName
+     * @return The repository including all archives.
+     */
+    public Repository getRepositoryArchives(String idOrName) {
         BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(idOrName);
         //ArchiveInfo archiveInfo = BorgCommands.info(repoConfig, repoConfig.getRepo());
-        BorgRepoList repoList = repoListCacheAccess.get(repoConfig.getRepo());
-        if (repoList == null) {
-            repoList = BorgCommands.list(repoConfig);
-            repoListCacheAccess.put(repoConfig.getRepo(), repoList);
+        Repository plainRepository = repoArchivesCacheAccess.get(repoConfig.getRepo());
+        if (plainRepository != null) {
+            return plainRepository;
         }
+        plainRepository = repoCacheAccess.get(repoConfig.getRepo());
+        if (plainRepository == null) {
+            log.warn("Repo with name '" + idOrName + "' not found.");
+            return null;
+        }
+        BorgRepoList repoList = BorgCommands.list(repoConfig);
         if (repoList == null) {
             log.warn("Repo with name '" + idOrName + "' not found.");
+            return null;
         }
-        return repoList;
-    }*/
+        Repository repository = ObjectUtils.clone(plainRepository);
+        repository.setArchives(repoList.getArchives());
+        repoArchivesCacheAccess.put(repoConfig.getRepo(), repository);
+        return repository;
+    }
 
     public BorgFilesystemItem[] getArchiveContent(BorgRepoConfig repoConfig, BorgArchive archive) {
         if (archive == null || StringUtils.isBlank(archive.getArchive())) {
@@ -114,6 +140,7 @@
         Configuration configuration = ConfigurationHandler.getConfiguration();
         this.jcsCache = JCSCache.getInstance();
         this.repoCacheAccess = jcsCache.getJCSCache("repositories");
+        this.repoArchivesCacheAccess = jcsCache.getJCSCache("repositoriesArchives");
         this.archiveFilelistCache = new ArchiveFilelistCache(getCacheDir(), configuration.getCacheArchiveContentMaxDiscSizeMB());
     }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
index 9db8ee3..e6780fe 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/data/Repository.java
@@ -1,17 +1,19 @@
 package de.micromata.borgbutler.data;
 
 import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.json.borg.BorgArchive;
 import de.micromata.borgbutler.json.borg.BorgCache;
 import de.micromata.borgbutler.json.borg.BorgEncryption;
 import lombok.Getter;
 import lombok.Setter;
 
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * Part of Borg json objects to refer objects to repositories.
  */
-public class Repository implements Serializable {
+public class Repository implements Serializable, Cloneable {
     private static final long serialVersionUID = 1278802519434516280L;
     /**
      * A name describing this config. Only used for displaying purposes. This is automatically set with the name
@@ -25,9 +27,6 @@
     @Getter
     @Setter
     private String id;
-    /**
-     * UTC date.
-     */
     @Getter
     @Setter
     private String lastModified;
@@ -45,6 +44,15 @@
     @Setter
     private BorgEncryption encryption;
 
-    public Repository() {
+    /**
+     * Might be null.
+     */
+    @Getter
+    @Setter
+    private List<BorgArchive> archives;
+
+    @Override
+    public Object clone() throws CloneNotSupportedException {
+        return super.clone();
     }
 }
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
index a12db4f..94e5062 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/json/borg/BorgRepository.java
@@ -6,10 +6,13 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
+
 /**
  * Part of Borg json objects to refer objects to repositories.
  */
-public class BorgRepository {
+public class BorgRepository implements Serializable {
+    private static final long serialVersionUID = 1278802519434516280L;
     /**
      * A name describing this config. Only used for displaying purposes. This is automatically set with the name
      * of the repository configuration.
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 6544eff..d5fdcc4 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
@@ -6,6 +6,7 @@
 import de.micromata.borgbutler.data.Repository;
 import de.micromata.borgbutler.json.borg.BorgArchive;
 import de.micromata.borgbutler.json.borg.BorgFilesystemItem;
+import org.apache.commons.collections4.CollectionUtils;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -33,22 +34,22 @@
             }
             assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
         }
-/*        {
+        {
             for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
-                BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
+                Repository repository = ButlerCache.getInstance().getRepositoryArchives(repoConfig.getRepo());
             }
             assertEquals(config.getRepoConfigs().size(), ButlerCache.getInstance().getAllRepositories().size());
-        }*/
+        }
         List<BorgRepoConfig> repoConfigs = ConfigurationHandler.getConfiguration().getRepoConfigs();
         BorgArchive archive = null;
         BorgRepoConfig repoConfig = null;
-/*        if (CollectionUtils.isNotEmpty(repoConfigs)) {
+        if (CollectionUtils.isNotEmpty(repoConfigs)) {
             repoConfig = repoConfigs.get(0);
-            BorgRepoList repoList = ButlerCache.getInstance().getRepoList(repoConfig.getRepo());
-            if (repoList != null && CollectionUtils.isNotEmpty(repoList.getArchives())) {
-                archive = repoList.getArchives().get(0);
+            Repository rerepositoryoList = ButlerCache.getInstance().getRepositoryArchives(repoConfig.getRepo());
+            if (rerepositoryoList != null && CollectionUtils.isNotEmpty(rerepositoryoList.getArchives())) {
+                archive = rerepositoryoList.getArchives().get(0);
             }
-        }*/
+        }
         {
             if (archive != null) {
                 BorgFilesystemItem[] content = ButlerCache.getInstance().getArchiveContent(repoConfig, archive);
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
index 31425e0..543789c 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/utils/DateUtilsTest.java
@@ -4,8 +4,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.time.LocalDateTime;
-
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 
@@ -14,12 +12,6 @@
 
     @Test
     void parseTest() {
-        LocalDateTime dateTime = DateUtils.get("2018-11-21T22:31:51.000000");
-        assertEquals(2018, dateTime.getYear());
-        assertEquals(11, dateTime.getMonthValue());
-        assertEquals(21, dateTime.getDayOfMonth());
-        assertEquals(22, dateTime.getHour());
-        assertEquals(31, dateTime.getMinute());
-        assertEquals(51, dateTime.getSecond());
+        assertEquals("2018-11-21T22:31:51",DateUtils.get("2018-11-21T22:31:51.000000"));
     }
 }

--
Gitblit v1.10.0