diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java index aae1edd108273f5c0373a786f85c77e709ca6786..555b1742666d9791de536e8219ca6154c3808a30 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java @@ -247,6 +247,10 @@ public class Job { return haasClientSupplier.get().getChangedFiles(getId()); } + public void cancelJob() { + haasClientSupplier.get().cancelJob(jobId); + } + diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java index 97c7d31ef4b95b06af252393f7e63a9d297df049..ee99ce1340dd6f746d13491da8a5f2431f1f0857 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSClient.java @@ -314,6 +314,14 @@ public class HaaSClient { } + public void cancelJob(Long jobId) { + try { + getJobManagement().cancelJob(jobId, getSessionID()); + } catch (RemoteException | ServiceException e) { + throw new HaaSClientException(e); + } + } + private void doSubmitJob(long jobId) throws RemoteException, ServiceException { getJobManagement().submitJob(jobId, getSessionID()); } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java index 54e47a725e4c1abb97015b31b8717e6524c83b0c..dadc29e2bf1132f0b81a2c78d38dbdd811612dfc 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/core/BenchmarkJobManager.java @@ -100,7 +100,7 @@ public class BenchmarkJobManager { if (job.getState() == JobState.Finished) { String filePattern = job.getProperty(SPIM_OUTPUT_FILENAME_PATTERN); job.download(downloadFinishedData(filePattern), progress); - } else if (job.getState() == JobState.Failed) { + } else if (job.getState() == JobState.Failed || job.getState() == JobState.Canceled) { job.download(downloadFailedData(), progress); } @@ -214,6 +214,10 @@ public class BenchmarkJobManager { public boolean remove() { return job.remove(); } + + public void cancelJob() { + job.cancelJob(); + } } @@ -289,9 +293,8 @@ public class BenchmarkJobManager { Path path = getPathSafely(name); if (path == null) return false; - return path.getFileName().toString().startsWith("snakejob.") - || path.getParent().getFileName().toString().equals("logs"); + || path.getParent() != null && path.getParent().getFileName() != null && path.getParent().getFileName().toString().equals("logs"); }; } diff --git a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java index 71dda4adab8df4e70b219d3806800c23bf823a5a..d08a89d16610446c5062092724d702cccdb38e17 100644 --- a/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java +++ b/haas-spim-benchmark/src/main/java/cz/it4i/fiji/haas_spim_benchmark/ui/BenchmarkSPIMController.java @@ -102,6 +102,11 @@ public class BenchmarkSPIMController implements FXFrame.Controller { registry.get(job.getValue()).update(); }), job -> notNullValue(job, j -> j.getState() == JobState.Configuring || j.getState() == JobState.Finished)); + menu.addItem("Cancel job", job -> executeWSCallAsync("Canceling job", p -> { + job.getValue().cancelJob(); + registry.get(job.getValue()).update(); + }), job -> notNullValue(job, j -> j.getState() == JobState.Running)); + menu.addItem("Show progress", job -> { try { new SPIMPipelineProgressViewWindow(root, job.getValue()).setVisible(true); @@ -115,7 +120,8 @@ public class BenchmarkSPIMController implements FXFrame.Controller { menu.addItem("Download result", job -> executeWSCallAsync("Downloading data", p -> job.getValue().downloadData(p)), job -> notNullValue(job, - j -> EnumSet.of(JobState.Failed, JobState.Finished).contains(j.getState()) && !j.downloaded())); + j -> EnumSet.of(JobState.Failed, JobState.Finished, JobState.Canceled).contains(j.getState()) + && !j.downloaded())); menu.addItem("Download statistics", job -> executeWSCallAsync("Downloading data", p -> job.getValue().downloadStatistics(p)), job -> notNullValue(job, j -> j.getState() == JobState.Finished)); @@ -148,8 +154,11 @@ public class BenchmarkSPIMController implements FXFrame.Controller { FXFrame.Controller.executeAsync(executorServiceWS, (Callable<Void>) () -> { ProgressDialog dialog = ModalDialogs.doModal(new ProgressDialog(root, title), WindowConstants.DO_NOTHING_ON_CLOSE); - action.doAction(dialog); - dialog.done(); + try { + action.doAction(dialog); + } finally { + dialog.done(); + } return null; }, x -> { if (update)