From df30856171a76eae2b5d9254787d7f5b5935a3aa Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 06 Jan 2019 01:54:48 +0000
Subject: [PATCH] JobQueue...

---
 borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java |   56 ++++++++++++++++++++-------
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java      |   27 ++++++-------
 2 files changed, 54 insertions(+), 29 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
index 5678da2..a2e1968 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -57,12 +57,15 @@
     /**
      * For displaying purposes.
      *
-     * @param repo
+     * @param repoConfig
      * @return A list of all jobs of the queue (as copies).
      */
-    public List<BorgJob<?>> getJobListCopy(String repo) {
-        JobQueue<String> origQueue = getQueue(repo);
+    public List<BorgJob<?>> getJobListCopy(BorgRepoConfig repoConfig) {
+        JobQueue<String> origQueue = getQueue(repoConfig);
         List<BorgJob<?>> jobList = new ArrayList<>();
+        if (origQueue == null) {
+            return jobList;
+        }
         Iterator<AbstractJob<String>> it = origQueue.getQueueIterator();
         while (it.hasNext()) {
             AbstractJob<String> origJob = it.next();
@@ -76,16 +79,16 @@
         return jobList;
     }
 
-    private JobQueue<String> getQueue(String repo) {
+    private JobQueue<String> getQueue(BorgRepoConfig repoConfig) {
         synchronized (queueMap) {
-            return queueMap.get(getQueueName(repo));
+            return queueMap.get(getQueueName(repoConfig));
         }
     }
 
-    private JobQueue<String> ensureAndGetQueue(String repo) {
+    private JobQueue<String> ensureAndGetQueue(BorgRepoConfig repoConfig) {
         synchronized (queueMap) {
-            String queueName = getQueueName(repo);
-            JobQueue<String> queue = getQueue(queueName);
+            String queueName = getQueueName(repoConfig);
+            JobQueue<String> queue = getQueue(repoConfig);
             if (queue == null) {
                 queue = new JobQueue<>();
                 queueMap.put(queueName, queue);
@@ -94,12 +97,8 @@
         }
     }
 
-    private JobQueue<String> ensureAndGetQueue(BorgRepoConfig config) {
-        return ensureAndGetQueue(config != null ? config.getRepo() : null);
-    }
-
-    private String getQueueName(String repo) {
-        return repo != null ? repo : "--NO_REPO--";
+    private String getQueueName(BorgRepoConfig repoConfig) {
+        return repoConfig != null ? repoConfig.getId() : "--NO_REPO--";
     }
 
     public BorgJob<Void> execute(BorgCommand command) {
diff --git a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java
index 382b331..a74ab74 100644
--- a/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java
+++ b/borgbutler-server/src/main/java/de/micromata/borgbutler/server/rest/JobsRest.java
@@ -14,7 +14,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.ws.rs.*;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 import java.util.ArrayList;
 import java.util.List;
@@ -28,36 +31,59 @@
     @GET
     @Produces(MediaType.APPLICATION_JSON)
     /**
+     * @param repo If given, only the job queue of the given repo will be returned.
      * @param testMode If true, then a test job list is created.
      * @param prettyPrinter If true then the json output will be in pretty format.
      * @return Job queues as json string.
      * @see JsonUtils#toJson(Object, boolean)
      */
-    public String getJobs(@QueryParam("testMode") boolean testMode, @QueryParam("prettyPrinter") boolean prettyPrinter) {
+    public String getJobs(@QueryParam("repo") String repo,
+                          @QueryParam("testMode") boolean testMode,
+                          @QueryParam("prettyPrinter") boolean prettyPrinter) {
         if (testMode) {
             // Return dynamic test queue:
             return returnTestList(prettyPrinter);
         }
+        boolean validRepo = false;
+        if (StringUtils.isNotBlank(repo) && !"null".equals(repo) && !"undefined".equals(repo)) {
+            validRepo = true;
+        }
         BorgQueueExecutor borgQueueExecutor = BorgQueueExecutor.getInstance();
         List<JsonJobQueue> queueList = new ArrayList<>();
-        for (String repo : borgQueueExecutor.getRepos()) {
-            BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(repo);
-            String title = repoConfig != null ? repoConfig.getDisplayName() : repo;
-            List<BorgJob<?>> borgJobList = borgQueueExecutor.getJobListCopy(repo);
-            if (CollectionUtils.isEmpty(borgJobList))
-                continue;
-            JsonJobQueue queue = new JsonJobQueue()
-                    .setRepo(title);
-            queueList.add(queue);
-            queue.setJobs(new ArrayList<>(borgJobList.size()));
-            for (BorgJob<?> borgJob : borgJobList) {
-                JsonJob job = new JsonJob(borgJob);
-                queue.getJobs().add(job);
+        if (validRepo) { // Get only the queue of the given repo:
+            JsonJobQueue queue = getQueue(repo);
+            if (queue != null) {
+                queueList.add(queue);
+            }
+        } else { // Get all the queues (of all repos).
+            for (String rep : borgQueueExecutor.getRepos()) {
+                JsonJobQueue queue = getQueue(rep);
+                if (queue != null) {
+                    queueList.add(queue);
+                }
             }
         }
         return JsonUtils.toJson(queueList, prettyPrinter);
     }
 
+    private JsonJobQueue getQueue(String repo) {
+        BorgQueueExecutor borgQueueExecutor = BorgQueueExecutor.getInstance();
+        BorgRepoConfig repoConfig = ConfigurationHandler.getConfiguration().getRepoConfig(repo);
+        if (repoConfig == null) {
+            return null;
+        }
+        List<BorgJob<?>> borgJobList = borgQueueExecutor.getJobListCopy(repoConfig);
+        if (CollectionUtils.isEmpty(borgJobList))
+            return null;
+        JsonJobQueue queue = new JsonJobQueue().setRepo(repoConfig.getDisplayName());
+        queue.setJobs(new ArrayList<>(borgJobList.size()));
+        for (BorgJob<?> borgJob : borgJobList) {
+            JsonJob job = new JsonJob(borgJob);
+            queue.getJobs().add(job);
+        }
+        return queue;
+    }
+
     @Path("/cancel")
     @GET
     /**

--
Gitblit v1.10.0