From 47b27687ea1e77e7d6ae26eb0e47ab85e90c5d50 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 16 Dec 2018 00:20:08 +0000
Subject: [PATCH] Lazy loading of repos.

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/cache/ButlerCache.java       |   12 ++++++++++--
 borgbutler-webapp/src/components/views/repos/RepoListView.jsx                      |    6 +++---
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java |   38 +++++++++++++++++---------------------
 3 files changed, 30 insertions(+), 26 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 07914e9..e232412 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
@@ -26,6 +26,7 @@
     private JCSCache jcsCache;
     private CacheAccess<String, Repository> repoCacheAccess;
     private ArchiveFilelistCache archiveFilelistCache;
+    private int notYetLoadedIdCounter = 1;
 
     public static ButlerCache getInstance() {
         return instance;
@@ -81,9 +82,16 @@
     public List<Repository> getAllRepositories() {
         List<Repository> repositories = new ArrayList<>();
         for (BorgRepoConfig repoConfig : ConfigurationHandler.getConfiguration().getRepoConfigs()) {
-            Repository repository = getRepository(repoConfig);
+            Repository repository = repoCacheAccess.get(repoConfig.getRepo());
             if (repository == null) {
-                continue;
+                if (repoConfig.getId() == null) {
+                    // Temporary id:
+                    repoConfig.setId("not_yet_loaded_" + notYetLoadedIdCounter++);
+                }
+                repository = new Repository()
+                        .setDisplayName(repoConfig.getDisplayName())
+                        .setName(repoConfig.getRepo())
+                        .setId(repoConfig.getId());
             }
             repositories.add(repository);
         }
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
index e337b50..06a798c 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/ReposRest.java
@@ -21,6 +21,23 @@
     private static Logger log = LoggerFactory.getLogger(ReposRest.class);
 
     @GET
+    @Path("list")
+    @Produces(MediaType.APPLICATION_JSON)
+    /**
+     *
+     * @param prettyPrinter If true then the json output will be in pretty format.
+     * @return A list of repositories of type {@link BorgRepository}.
+     * @see JsonUtils#toJson(Object, boolean)
+     */
+    public String getList(@QueryParam("prettyPrinter") boolean prettyPrinter) {
+        List<Repository> repositories = ButlerCache.getInstance().getAllRepositories();
+        if (CollectionUtils.isEmpty(repositories)) {
+            return "";
+        }
+        return JsonUtils.toJson(repositories, prettyPrinter);
+    }
+
+    @GET
     @Path("repo")
     @Produces(MediaType.APPLICATION_JSON)
     /**
@@ -72,25 +89,4 @@
         Archive archive = ButlerCache.getInstance().getArchive(repoName, archiveIdOrName, force);
         return JsonUtils.toJson(archive, prettyPrinter);
     }
-
-    @GET
-    @Path("list")
-    @Produces(MediaType.APPLICATION_JSON)
-    /**
-     *
-     * @param force If true, a reload of all repositories is forced.
-     * @param prettyPrinter If true then the json output will be in pretty format.
-     * @return A list of repositories of type {@link BorgRepository}.
-     * @see JsonUtils#toJson(Object, boolean)
-     */
-    public String getList(@QueryParam("force") boolean force, @QueryParam("prettyPrinter") boolean prettyPrinter) {
-        if (force) {
-            ButlerCache.getInstance().clearRepoCacheAccess();
-        }
-        List<Repository> repositories = ButlerCache.getInstance().getAllRepositories();
-        if (CollectionUtils.isEmpty(repositories)) {
-            return "";
-        }
-        return JsonUtils.toJson(repositories, prettyPrinter);
-    }
 }
diff --git a/borgbutler-webapp/src/components/views/repos/RepoListView.jsx b/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
index 5c123c8..b221c25 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
@@ -19,13 +19,13 @@
         this.fetchRepos();
     };
 
-    fetchRepos = (force) => {
+    fetchRepos = () => {
         this.setState({
             isFetching: true,
             failed: false,
             repos: undefined
         });
-        fetch(`${this.path}/list?force=${force}`, {
+        fetch(`${this.path}/list`, {
             method: 'GET',
             headers: {
                 'Accept': 'application/json'
@@ -83,7 +83,7 @@
                 Repositories
                 <div
                     className={'btn btn-outline-primary refresh-button-right'}
-                    onClick={this.fetchRepos.bind(this, true)}
+                    onClick={this.fetchRepos.bind(this)}
                 >
                     <IconRefresh/>
                 </div>

--
Gitblit v1.10.0