diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java index 54af7f42dc79c816fa6f4716f2e9c7fe2aae54be..e55921801fb2a36ca79c4e5e1723bc6df02f3317 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ui/ObservableValueRegistry.java @@ -30,16 +30,16 @@ public abstract class ObservableValueRegistry<K, V extends UpdatableObservableVa }; } - public V addIfAbsent(K key) { + public synchronized V addIfAbsent(K key) { V uov = map.computeIfAbsent(key, k -> constructObservableValue(k)); return uov; } - public V get(K key) { + public synchronized V get(K key) { return map.get(key); } - public Collection<V> getAllItems() { + public synchronized Collection<V> getAllItems() { return map.values().stream().map(val -> val).collect(Collectors.toList()); } 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 2c2268dbc1435226b27edb93d172b26268d56bd0..8d91f4c0f16073011d529cb6f978401cdc126558 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 @@ -49,9 +49,8 @@ import cz.it4i.fiji.haas_java_client.SynchronizableFileType; import cz.it4i.fiji.haas_java_client.UploadingFile; import net.imagej.updater.util.Progress; -public class BenchmarkJobManager implements Closeable{ +public class BenchmarkJobManager implements Closeable { - private static Logger log = LoggerFactory .getLogger(cz.it4i.fiji.haas_spim_benchmark.core.BenchmarkJobManager.class); @@ -60,7 +59,7 @@ public class BenchmarkJobManager implements Closeable{ public final class BenchmarkJob implements HaaSOutputHolder { private final Job job; - + public boolean isUseDemoData() { return job.isUseDemoData(); } @@ -89,14 +88,14 @@ public class BenchmarkJobManager implements Closeable{ } public synchronized void startJob(Progress progress) throws IOException { - job.uploadFile(Constants.CONFIG_YAML, new P_ProgressNotifierAdapter(progress)); + job.uploadFile(Constants.CONFIG_YAML, new P_ProgressNotifierAdapter(progress)); String outputName = getOutputName(job.openLocalFile(Constants.CONFIG_YAML)); verifiedState = null; verifiedStateProcessed = false; running = null; job.submit(); job.setProperty(SPIM_OUTPUT_FILENAME_PATTERN, outputName); - + } public JobState getState() { @@ -111,7 +110,6 @@ public class BenchmarkJobManager implements Closeable{ job.stopUploadData(); } - public synchronized CompletableFuture<JobState> getStateAsync(Executor executor) { if (running != null) { return running; @@ -126,12 +124,12 @@ public class BenchmarkJobManager implements Closeable{ public void startDownload() throws IOException { if (job.getState() == JobState.Finished) { String filePattern = job.getProperty(SPIM_OUTPUT_FILENAME_PATTERN); - job.startDownload(downloadFinishedData(filePattern) ); + job.startDownload(downloadFinishedData(filePattern)); } else if (job.getState() == JobState.Failed || job.getState() == JobState.Canceled) { job.startDownload(downloadFailedData()); } } - + public boolean canBeDownloaded() { return job.canBeDownloaded(); } @@ -390,7 +388,8 @@ public class BenchmarkJobManager implements Closeable{ private SPIMComputationAccessor getComputationAccessor() { SPIMComputationAccessor result = new SPIMComputationAccessor() { - private final HaaSOutputHolder outputOfSnakemake = new HaaSOutputHolderImpl(list -> job.getOutput(list)); + private final HaaSOutputHolder outputOfSnakemake = new HaaSOutputHolderImpl( + list -> job.getOutput(list)); @Override public List<String> getActualOutput(List<SynchronizableFileType> content) { @@ -429,7 +428,7 @@ public class BenchmarkJobManager implements Closeable{ public void setDownloaded(Boolean val) { job.setDownloaded(val); } - + public void setUploaded(boolean b) { job.setUploaded(b); } @@ -459,9 +458,12 @@ public class BenchmarkJobManager implements Closeable{ jobManager = new JobManager(params.workingDirectory(), constructSettingsFromParams(params)); } - public BenchmarkJob createJob(Function<Path, Path> inputDirectoryProvider,Function<Path, Path> outputDirectoryProvider) throws IOException { + public BenchmarkJob createJob(Function<Path, Path> inputDirectoryProvider, + Function<Path, Path> outputDirectoryProvider) throws IOException { Job job = jobManager.createJob(inputDirectoryProvider, outputDirectoryProvider); - job.storeDataInWorkdirectory(getUploadingFile()); + if (job.isUseDemoData()) { + job.storeDataInWorkdirectory(getConfigYamlFile()); + } return convertJob(job); } @@ -574,8 +576,8 @@ public class BenchmarkJobManager implements Closeable{ public void close() { jobManager.close(); } - - private UploadingFile getUploadingFile() { + + private UploadingFile getConfigYamlFile() { return new UploadingFileFromResource("", Constants.CONFIG_YAML); } 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 263db558d11215b6b5d7ef87bc9e2b65cc71f3fb..e3694d160d9d3698f5de1e69a7d81029522b4eb4 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 @@ -3,6 +3,7 @@ package cz.it4i.fiji.haas_spim_benchmark.ui; import java.awt.Desktop; import java.awt.Window; import java.io.IOException; +import java.nio.file.Path; import java.util.EnumSet; import java.util.HashSet; import java.util.LinkedList; @@ -102,7 +103,7 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont private void initMenu() { TableViewContextMenu<ObservableBenchmarkJob> menu = new TableViewContextMenu<>(jobs); - menu.addItem("Create job", x -> createJob(), j -> true); + menu.addItem("Create job", x -> askForCreateJob(), j -> true); menu.addItem("Start job", job -> executeWSCallAsync("Starting job", p -> { job.getValue().startJob(p); job.getValue().update(); @@ -150,14 +151,24 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont menu.addItem("Open working directory", j -> open(j.getValue()), x -> JavaFXRoutines.notNullValue(x, j -> true)); } - private void createJob() { + private void askForCreateJob() { NewJobWindow newJobWindow = new NewJobWindow(null); ModalDialogs.doModal(newJobWindow, WindowConstants.DISPOSE_ON_CLOSE); - newJobWindow.setCreatePressedNotifier(() -> executeWSCallAsync("Creating job", p -> manager - .createJob(wd -> newJobWindow.getInputDirectory(wd), wd -> newJobWindow.getOutputDirectory(wd)))); + newJobWindow.setCreatePressedNotifier(() -> executeWSCallAsync("Creating job", false,p -> doCreateJob(wd -> newJobWindow.getInputDirectory(wd), wd -> newJobWindow.getOutputDirectory(wd)))); } + private void doCreateJob(Function<Path,Path> inputProvider, Function<Path,Path> outputProvider) throws IOException { + BenchmarkJob bj = manager.createJob(inputProvider, outputProvider); + ObservableBenchmarkJob obj = registry.addIfAbsent(bj); + addJobToItems(obj); + jobs.refresh(); + } + + private synchronized void addJobToItems(ObservableBenchmarkJob obj) { + jobs.getItems().add(obj); + } + private void open(BenchmarkJob j) { executorServiceUI.execute(() -> { Desktop desktop = Desktop.getDesktop(); @@ -184,8 +195,9 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont } return null; }, x -> { - if (update) + if (update) { updateJobs(); + } }); } @@ -215,7 +227,7 @@ public class BenchmarkSPIMController extends BorderPane implements CloseableCont executorServiceFX.execute(() -> { for (ObservableBenchmarkJob value : registry.getAllItems()) { if (!actual.contains(value)) { - this.jobs.getItems().add(value); + addJobToItems(value); } } });