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 1b0eea1e19d7e24ff87de7bf18f653122ffdc0e7..cdcefc45f0bd0b8ef1673ffc5b7948a24bffde01 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 @@ -36,6 +36,15 @@ import cz.it4i.fiji.scpclient.TransferFileProgress; */ public class Job { + public static boolean isValidJobPath(Path path) { + try { + getJobId(path); + } catch (NumberFormatException e) { + return false; + } + return Files.isRegularFile(path.resolve(JOB_INFO_FILENAME)); + } + private static final String JOB_NAME = "job.name"; private static final String JOB_NEEDS_UPLOAD = "job.needs_upload"; @@ -50,15 +59,6 @@ public class Job { private static final String JOB_IS_UPLOADED = "job.uploaded"; - public static boolean isValidJobPath(Path path) { - try { - getJobId(path); - } catch (NumberFormatException e) { - return false; - } - return Files.isRegularFile(path.resolve(JOB_INFO_FILENAME)); - } - private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.Job.class); private Path jobDir; @@ -318,9 +318,9 @@ public class Job { return jobDir; } - public boolean remove() { + public boolean delete() { boolean result; - if ((result = jobManager.remove(this)) && Files.isDirectory(jobDir)) { + if ((result = jobManager.deleteJob(this)) && Files.isDirectory(jobDir)) { List<Path> pathsToDelete; try { pathsToDelete = Files.walk(jobDir).sorted(Comparator.reverseOrder()).collect(Collectors.toList()); diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java index 862562e515eac0d1d48d6e81e87a5557f20324eb..6fa051107af09860f470925b192cb89feba77721 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/JobManager.java @@ -18,7 +18,7 @@ import cz.it4i.fiji.haas_java_client.SynchronizableFileType; public class JobManager implements Closeable { interface JobManager4Job { - boolean remove(Job job); + boolean deleteJob(Job job); } private static Logger log = LoggerFactory.getLogger(cz.it4i.fiji.haas.JobManager.class); @@ -34,7 +34,8 @@ public class JobManager implements Closeable { private final JobManager4Job remover = new JobManager4Job() { @Override - public boolean remove(Job job) { + public boolean deleteJob(Job job) { + haasClient.deleteJob(job.getId()); return jobs.remove(job); } }; diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java index c33528cde87f4dad3d174482c44b0698620a7924..f3c67a341f10bb75bb1d652f74de0263f03487d6 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/JavaFXRoutines.java @@ -28,7 +28,7 @@ public interface JavaFXRoutines { void accept(TableCell<?, ?> cell, B value, boolean empty); } - private TableCellUpdater<S, T> updater; + private final TableCellUpdater<S, T> updater; public TableCellAdapter(TableCellUpdater<S, T> updater) { this.updater = updater; @@ -36,14 +36,18 @@ public interface JavaFXRoutines { @Override protected void updateItem(T item, boolean empty) { - updater.accept(this, item, empty); + if(empty) { + this.setText(""); + } else { + updater.accept(this, item, empty); + } } } static public class FutureValueUpdater<S, T, U extends CompletableFuture<T>> implements TableCellUpdater<S, U> { - private TableCellUpdater<S, T> inner; - private Executor executor; + private final TableCellUpdater<S, T> inner; + private final Executor executor; public FutureValueUpdater(TableCellUpdater<S, T> inner, Executor exec) { this.inner = inner; 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 518dab5ef745370b63a19285db8844db6dfaf9ef..f7e006602d4d98a5a9b8c016dcee51daba9cbffe 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 @@ -298,6 +298,14 @@ public class HaaSClient { } } + public void deleteJob(long id) { + try { + getJobManagement().deleteJob(id, getSessionID()); + } catch (RemoteException | ServiceException e) { + throw new HaaSClientException(e); + } + } + private HaaSFileTransferImp getFileTransferMethod(long jobId, TransferFileProgress progress) throws RemoteException, UnsupportedEncodingException, ServiceException, JSchException { P_FileTransferPool pool = filetransferPoolMap.computeIfAbsent(jobId, id -> new P_FileTransferPool(id)); diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java index 374481004f6c13fb6f4dcccee151dc97b4cb0ab3..3468aeda2d3b641547c1e0fc975d91af04a3837d 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/JobState.java @@ -8,5 +8,6 @@ public enum JobState { Running, Finished, Failed, - Canceled; + Canceled, + Disposed; } 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 f4ea2f56590abdf6841840ff3bf6113448ce0568..83e26cf44be4662fd4cd8029f496a0b792ad4cd6 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 @@ -205,8 +205,8 @@ public class BenchmarkJobManager implements Closeable{ return computationAccessor.getActualOutput(Arrays.asList(SynchronizableFileType.StandardErrorFile)).get(0); } - public boolean remove() { - return job.remove(); + public boolean delete() { + return job.delete(); } public void cancelJob() { @@ -223,6 +223,34 @@ public class BenchmarkJobManager implements Closeable{ job.resumeUpload(); } + public void setDownloaded(Boolean val) { + job.setDownloaded(val); + } + + public void setUploaded(boolean b) { + job.setUploaded(b); + } + + public boolean isDownloaded() { + return job.isDownloaded(); + } + + public boolean isUploaded() { + return job.isUploaded(); + } + + public void stopDownload() { + job.stopDownloadData(); + } + + public boolean needsDownload() { + return job.needsDownload(); + } + + public boolean needsUpload() { + return job.needsUpload(); + } + @Override public String toString() { return "" + getId(); @@ -420,34 +448,6 @@ public class BenchmarkJobManager implements Closeable{ Stream<BenchmarkError> taskSpecificErrors = tasks.stream().flatMap(s -> s.getErrors().stream()); return Stream.concat(nonTaskSpecificErrors.stream(), taskSpecificErrors).collect(Collectors.toList()); } - - public void setDownloaded(Boolean val) { - job.setDownloaded(val); - } - - public void setUploaded(boolean b) { - job.setUploaded(b); - } - - public boolean isDownloaded() { - return job.isDownloaded(); - } - - public boolean isUploaded() { - return job.isUploaded(); - } - - public void stopDownload() { - job.stopDownloadData(); - } - - public boolean needsDownload() { - return job.needsDownload(); - } - - public boolean needsUpload() { - return job.needsUpload(); - } } public BenchmarkJobManager(BenchmarkSPIMParameters params) throws IOException { 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 17a2429b65e1067afe55265869f85020ba36b037..bda229a11188a8d8a4ee9e7efd5ff52259de970e 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 @@ -126,10 +126,10 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont menu.addItem("Upload data", job -> executeWSCallAsync("Uploading data", p -> job.getValue().startUpload()), job -> executeWSCallAsync("Stop uploading data", p -> job.getValue().stopUpload()), - job -> JavaFXRoutines.notNullValue(job, j -> !EnumSet.of(JobState.Running).contains(j.getState())), + job -> JavaFXRoutines.notNullValue(job, + j -> !EnumSet.of(JobState.Running, JobState.Disposed).contains(j.getState())), job -> job.getUploadProgress().isWorking()); - menu.addItem("Download result", job -> executeWSCallAsync("Downloading data", p -> job.getValue().startDownload()), job -> executeWSCallAsync("Stop downloading data", p -> job.getValue().stopDownload()), @@ -146,6 +146,13 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont job -> JavaFXRoutines.notNullValue(job, j -> j.getState().equals(JobState.Failed))); menu.addItem("Open working directory", j -> open(j.getValue()), x -> JavaFXRoutines.notNullValue(x, j -> true)); + + menu.addItem("Delete", j -> deleteJob(j.getValue()), x -> JavaFXRoutines.notNullValue(x, j -> true)); + } + + private void deleteJob(BenchmarkJob bj) { + bj.delete(); + registry.update(); } private void open(BenchmarkJob j) { @@ -242,7 +249,6 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont private void remove(BenchmarkJob bj) { jobs.getItems().remove(registry.get(bj)); - bj.remove(); } private void setCellValueFactory(int index, Function<BenchmarkJob, String> mapper) {