From 66bf65a49dba5df6ffbf865bc6cac9afba41ead1 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 28 Dec 2018 11:55:26 +0000
Subject: [PATCH] Job queueing...

---
 borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java |   24 +++++++++++++++++-------
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java  |   19 +++++++++++++++----
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java     |    4 ++--
 3 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
index 5827495..2670b98 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
@@ -12,11 +12,11 @@
 public abstract class AbstractJob<T> {
     private Logger logger = LoggerFactory.getLogger(AbstractJob.class);
 
-    public enum Status {DONE, RUNNING, QUEUED, STOPPED, FAILED}
+    public enum Status {DONE, RUNNING, QUEUED, CANCELLED, FAILED}
 
     @Getter
     @Setter
-    private boolean stopRequested;
+    private boolean cancelledRequested;
 
     @Getter
     @Setter(AccessLevel.PACKAGE)
@@ -31,7 +31,18 @@
     @Setter(AccessLevel.PACKAGE)
     private Future<T> future;
 
-    public T waitForResult() {
+    public void cancel() {
+        if (this.getStatus() == Status.QUEUED) {
+            this.status = Status.CANCELLED;
+        }
+        this.cancelledRequested = true;
+    }
+
+    /**
+     * Waits for and gets the result.
+     * @return
+     */
+    public T getResult() {
         try {
             return future.get();
         } catch (InterruptedException | ExecutionException ex) {
@@ -51,7 +62,7 @@
      * @return true, if the job is done, stopped or failed. Otherwise false (if job is running or queued).
      */
     public boolean isFinished() {
-        if (status == Status.DONE || status == Status.STOPPED || status == Status.FAILED) {
+        if (status == Status.DONE || status == Status.CANCELLED || status == Status.FAILED) {
             return true;
         }
         return false;
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
index 94c8106..1935f0a 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
+++ b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
@@ -90,8 +90,8 @@
 
         @Override
         public T call() throws Exception {
-            if (job.isStopRequested()) {
-                job.setStatus(AbstractJob.Status.STOPPED);
+            if (job.isCancelledRequested()) {
+                job.setStatus(AbstractJob.Status.CANCELLED);
                 return null;
             }
             try {
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
index 74bcf76..6a4e1c2 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
+++ b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
@@ -63,25 +63,35 @@
 
         TestJob job = (TestJob) queue.getQueuedJob(5);
         assertEquals(AbstractJob.Status.QUEUED, job.getStatus());
-        String result = job1.waitForResult();
+        String result = job1.getResult();
         assertEquals("10\n", result);
         assertEquals(AbstractJob.Status.DONE, job1.getStatus());
 
         queue.append(new TestJob(10, file));
-        job = (TestJob) queue.getQueuedJob(10);
-        assertEquals(AbstractJob.Status.QUEUED, job.getStatus());
-        result = job.waitForResult();
+        queue.append(new TestJob(100, file));
+        job1 = (TestJob) queue.getQueuedJob(10);
+        assertEquals(AbstractJob.Status.QUEUED, job1.getStatus());
+
+        job = (TestJob)queue.getQueuedJob(100);
+        job.cancel();
+        assertEquals(AbstractJob.Status.CANCELLED, job.getStatus());
+
+        result = job1.getResult();
         assertEquals("10\n", result);
 
         assertEquals(0, queue.getQueueSize());
         List<AbstractJob> doneJobs = queue.getDoneJobs();
-        assertEquals(3, doneJobs.size());
+        assertEquals(4, doneJobs.size());
         check(((TestJob) doneJobs.get(0)), AbstractJob.Status.DONE, "10");
-        check(((TestJob) doneJobs.get(1)), AbstractJob.Status.FAILED, "10");
-        check(((TestJob) doneJobs.get(2)), AbstractJob.Status.DONE, "10");
+        check(((TestJob) doneJobs.get(1)), AbstractJob.Status.CANCELLED, null);
+        check(((TestJob) doneJobs.get(2)), AbstractJob.Status.FAILED, null);
+        check(((TestJob) doneJobs.get(3)), AbstractJob.Status.DONE, "10");
     }
 
     private void check(TestJob job, AbstractJob.Status status, String result) {
         assertEquals(status, job.getStatus());
+        if (result != null) {
+            assertEquals(result + "\n", job.getResult());
+        }
     }
 }

--
Gitblit v1.10.0