From 67dd1243073e766178dd70dd2f45aa5bc77ec529 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 05 Jan 2019 22:03:29 +0000
Subject: [PATCH] Job monitor: Cancellation of jobs...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 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 e4dc1a8..5e440fe 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -28,11 +28,33 @@
      */
     public List<String> getRepos() {
         List<String> list = new ArrayList<>();
-        list.addAll(queueMap.keySet());
+        synchronized (queueMap) {
+            list.addAll(queueMap.keySet());
+        }
         Collections.sort(list);
         return list;
     }
 
+    public void cancelJob(long uniqueJobNumber) {
+        AbstractJob<?> job = getQueuedJobByUniqueJobNumber(uniqueJobNumber);
+        if (job == null) {
+            log.info("Can't cancel job #" + uniqueJobNumber + ". Not found as queued job (may-be already cancelled or finished). Nothing to do.");
+            return;
+        }
+        job.cancel();
+    }
+
+    private AbstractJob<?> getQueuedJobByUniqueJobNumber(long uniqueJobNumber) {
+        Iterator<JobQueue<String>> it = queueMap.values().iterator();
+        while (it.hasNext()) {
+            AbstractJob<?> job = it.next().getQueuedJobByUniqueJobNumber(uniqueJobNumber);
+            if (job != null) {
+                return job;
+            }
+        }
+        return null;
+    }
+
     /**
      * For displaying purposes.
      *
@@ -56,7 +78,9 @@
     }
 
     private JobQueue<String> getQueue(String repo) {
-        return queueMap.get(getQueueName(repo));
+        synchronized (queueMap) {
+            return queueMap.get(getQueueName(repo));
+        }
     }
 
     private JobQueue<String> ensureAndGetQueue(String repo) {

--
Gitblit v1.10.0