From 6ff74e6e78e27fbcb751dcf20c9e61dafb78caed Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 04 Jan 2019 22:58:46 +0000
Subject: [PATCH] Job progress...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java |   44 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 40 insertions(+), 4 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 d24e27a..0929332 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -1,11 +1,14 @@
 package de.micromata.borgbutler;
 
 import de.micromata.borgbutler.config.BorgRepoConfig;
+import de.micromata.borgbutler.jobs.AbstractJob;
 import de.micromata.borgbutler.jobs.JobQueue;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -23,10 +26,34 @@
     // key is the repo name.
     private Map<String, JobQueue<String>> queueMap = new HashMap<>();
 
-    private JobQueue<String> getQueue(BorgRepoConfig config) {
+    /**
+     * For displaying purposes.
+     *
+     * @param repo
+     * @return A list of all jobs of the queue (as copies).
+     */
+    public List<BorgJob<?>> getJobListCopy(String repo) {
+        JobQueue<String> origQueue = getQueue(repo);
+        List<BorgJob<?>> jobList = new ArrayList<>();
+        for (AbstractJob<String> origJob : origQueue.getQueue()) {
+            if (!(origJob instanceof BorgJob)) {
+                log.error("Oups, only BorgJobs are supported. Ignoring unexpected job: " + origJob.getClass());
+                continue;
+            }
+            BorgJob<?> borgJob = ((BorgJob<?>) origJob).clone();
+            jobList.add(borgJob);
+        }
+        return jobList;
+    }
+
+    private JobQueue<String> getQueue(String repo) {
+        return queueMap.get(getQueueName(repo));
+    }
+
+    private JobQueue<String> ensureAndGetQueue(String repo) {
         synchronized (queueMap) {
-            String queueName = config != null ? config.getRepo() : "--NO_REPO--";
-            JobQueue<String> queue = queueMap.get(queueName);
+            String queueName = getQueueName(repo);
+            JobQueue<String> queue = getQueue(queueName);
             if (queue == null) {
                 queue = new JobQueue<>();
                 queueMap.put(queueName, queue);
@@ -35,13 +62,22 @@
         }
     }
 
+    private JobQueue<String> ensureAndGetQueue(BorgRepoConfig config) {
+        return ensureAndGetQueue(config != null ? config.getRepo() : null);
+    }
+
+    private String getQueueName(String repo) {
+        return repo != null ? repo : "--NO_REPO--";
+    }
+
     public BorgJob<Void> execute(BorgCommand command) {
         BorgJob<Void> job = new BorgJob<Void>(command);
         return execute(job);
     }
 
+    @SuppressWarnings("unchecked")
     public <T> BorgJob<T> execute(BorgJob<T> job) {
-        return (BorgJob<T>)getQueue(job.getCommand().getRepoConfig()).append(job);
+        return (BorgJob<T>) ensureAndGetQueue(job.getCommand().getRepoConfig()).append(job);
     }
 
     private BorgQueueExecutor() {

--
Gitblit v1.10.0