diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java index e0c7df7830d87b149fd8248cfa506e74ecf7cfee..09b4536ca1e706c9418a775aa40de5d46e986bc4 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/BenchmarkJobManager.java @@ -1,6 +1,7 @@ package cz.it4i.fiji.haas; import java.io.IOException; +import java.io.InputStream; import java.nio.file.Path; import java.util.Arrays; import java.util.Collection; @@ -9,6 +10,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import org.yaml.snakeyaml.Yaml; + import cz.it4i.fiji.haas.JobManager.JobInfo; import cz.it4i.fiji.haas.JobManager.JobSynchronizableFile; import cz.it4i.fiji.haas_java_client.HaaSClient; @@ -32,10 +35,12 @@ public class BenchmarkJobManager { return indexJob(jobInfo); } - public void startJob(long jobId) { + public void startJob(long jobId) throws IOException { JobInfo jobInfo = jobs.get(jobId); jobInfo.uploadFilesByName(() -> Arrays.asList(CONFIG_YAML).stream()); + String outputName = getOutputName(jobInfo.openLocalFile(CONFIG_YAML)); jobInfo.submit(); + jobInfo.setProperty("spim.outputFilenamePattern", outputName); } @@ -66,6 +71,21 @@ public class BenchmarkJobManager { return jobInfo.getId(); } + @SuppressWarnings("rawtypes") + private String getOutputName(InputStream openLocalFile) throws IOException { + try(InputStream is = openLocalFile){ + Yaml yaml = new Yaml(); + + Map map = yaml.load(is); + String result = (String) ((Map)map.get("common")).get("hdf5_xml_filename"); + if(result == null) { + throw new IllegalArgumentException("hdf5_xml_filename not found"); + } + return result; + } + + } + 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 335bbd0eea2a6d2cb10b4477d5c5cd747c3f35a4..b00c1e70ffcbc6e8609b40f6cad25e8be12f84d2 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 @@ -23,7 +23,6 @@ import cz.it4i.fiji.haas_java_client.HaaSClient.UploadingFile; import cz.it4i.fiji.haas_java_client.JobInfo; import cz.it4i.fiji.haas_java_client.JobState; import cz.it4i.fiji.haas_java_client.ProgressNotifier; -import cz.it4i.fiji.haas_java_client.SynchronizableFileType; import net.imagej.updater.util.Progress; public class Job { @@ -176,27 +175,56 @@ public class Job { return jobInfo.getEndTime(); } + public Iterable<String> getOutput(Iterable<JobSynchronizableFile> output) { + HaaSClient.SynchronizableFiles taskFileOffset = new HaaSClient.SynchronizableFiles(); + long taskId = (Long) getJobInfo().getTasks().toArray()[0]; + output.forEach(file->taskFileOffset.addFile(taskId, file.getType(), file.getOffset())); + return haasClientSupplier.get().downloadPartsOfJobFiles(jobId, taskFileOffset).stream().map(f -> f.getContent()) + .collect(Collectors.toList()); + } + + public InputStream openLocalFile(String name) throws IOException { + return Files.newInputStream(jobDir.resolve(name)); + } + + public void setProperty(String name, String value) throws IOException { + Properties prop = loadPropertiesIfExists(); + prop.setProperty(name, value); + + } + private synchronized void saveJobinfo() throws IOException { + Properties prop = loadPropertiesIfExists(); + if (needsDownload != null) { + prop.setProperty(JOB_HAS_DATA_TO_DOWNLOAD_PROPERTY, needsDownload.toString()); + } + prop.setProperty(JOB_NAME, name); + storeProperties(prop); + } + + private void storeProperties(Properties prop) throws IOException { try (OutputStream ow = Files.newOutputStream(jobDir.resolve(JOB_INFO_FILE), StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE)) { - Properties prop = new Properties(); - if (needsDownload != null) { - prop.setProperty(JOB_HAS_DATA_TO_DOWNLOAD_PROPERTY, needsDownload.toString()); - } - prop.setProperty(JOB_NAME, name); prop.store(ow, null); } } private synchronized void loadJobInfo() throws IOException { - try (InputStream is = Files.newInputStream(jobDir.resolve(JOB_INFO_FILE))) { - Properties prop = new Properties(); - prop.load(is); - if (prop.containsKey(JOB_HAS_DATA_TO_DOWNLOAD_PROPERTY)) { - needsDownload = Boolean.parseBoolean(prop.getProperty(JOB_HAS_DATA_TO_DOWNLOAD_PROPERTY)); - name = prop.getProperty(JOB_NAME); + Properties prop = loadPropertiesIfExists(); + if (prop.containsKey(JOB_HAS_DATA_TO_DOWNLOAD_PROPERTY)) { + needsDownload = Boolean.parseBoolean(prop.getProperty(JOB_HAS_DATA_TO_DOWNLOAD_PROPERTY)); + name = prop.getProperty(JOB_NAME); + } + } + + private Properties loadPropertiesIfExists() throws IOException { + Properties prop = new Properties(); + if(Files.exists(jobDir.resolve(JOB_INFO_FILE))) { + try (InputStream is = Files.newInputStream(jobDir.resolve(JOB_INFO_FILE))) { + prop.load(is); } } + return prop; } private JobInfo getJobInfo() { @@ -258,12 +286,4 @@ public class Job { } - public Iterable<String> getOutput(Iterable<JobSynchronizableFile> output) { - HaaSClient.SynchronizableFiles taskFileOffset = new HaaSClient.SynchronizableFiles(); - long taskId = (Long) getJobInfo().getTasks().toArray()[0]; - output.forEach(file->taskFileOffset.addFile(taskId, file.getType(), file.getOffset())); - return haasClientSupplier.get().downloadPartsOfJobFiles(jobId, taskFileOffset).stream().map(f -> f.getContent()) - .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 c03da2bfa1e64cf0916a6ea71949ed09470bdff7..0853d60e9c784f2fb3700e2f5ccd50ce72f55850 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 @@ -1,6 +1,7 @@ package cz.it4i.fiji.haas; import java.io.IOException; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.util.Calendar; @@ -189,6 +190,15 @@ public class JobManager { return time != null ? time.getTime().toString() : "N/A"; } + public InputStream openLocalFile(String name) throws IOException { + return job.openLocalFile(name); + } + + public void setProperty(String name, String value) throws IOException { + job.setProperty(name, value); + + } + } }