From 2ce3b5073ad52862ff9d1aa6c2690941f94d8429 Mon Sep 17 00:00:00 2001 From: Jan Kozusznik <jan@kozusznik.cz> Date: Wed, 22 Nov 2017 15:25:42 +0100 Subject: [PATCH] show progress for download --- .../cz/it4i/fiji/haas/CheckStatusOfHaaS.java | 25 ++++++++++++++++- .../src/main/java/cz/it4i/fiji/haas/Job.java | 27 +++++++++---------- .../java/cz/it4i/fiji/haas/JobManager.java | 13 ++++++--- .../java/cz/it4i/fiji/haas/RunWithHaaS.java | 1 - .../fiji/haas_java_client/HaaSClient.java | 9 +++---- 5 files changed, 49 insertions(+), 26 deletions(-) diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java index 984cde4f..b38ce51f 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CheckStatusOfHaaS.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Collection; import org.scijava.Context; import org.scijava.command.Command; @@ -18,6 +19,8 @@ import org.scijava.widget.UIComponent; import cz.it4i.fiji.haas.JobManager.JobInfo; import javafx.application.Platform; import net.imagej.ImageJ; +import net.imagej.ui.swing.updater.ProgressDialog; +import net.imagej.updater.util.Progress; /** * @@ -50,7 +53,27 @@ public class CheckStatusOfHaaS implements Command { } else { CheckStatusOfHaaSWindow window; (window = new CheckStatusOfHaaSWindow(getFrame(),context)).setVisible(true); - Platform.runLater(() -> jobManager.getJobs().forEach(job -> window.addJob(job))); + + Platform.runLater(() -> { + Progress dialog = new ProgressDialog(getFrame()); + dialog.setTitle("Downloading info about jobs"); + Collection<JobInfo> jobs = jobManager.getJobs(); + int count = 0; + for(JobInfo ji: jobs) { + String item; + dialog.addItem(item = "job id:" + ji.getId()); + try { + ji.updateInfo(); + } catch (IOException e) { + log.error(e); + } + window.addJob(ji); + dialog.itemDone(item); + dialog.setCount(count, jobs.size()); + count++; + } + dialog.done(); + }); } } catch (IOException e) { log.error(e); 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 8dc3b344..9b66280f 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 @@ -41,12 +41,9 @@ public class Job { private Supplier<HaaSClient> haasClientSupplier; private JobState state; - private Boolean needsDownload; - - private Long jobId; - private JobInfo jobInfo; + private Long jobId; final private Progress dummy = new Progress() { @@ -81,15 +78,13 @@ public class Job { long id = client.start(files, "TestOutRedirect", Collections.emptyList(), new P_ProgressNotifierAdapter(progress)); jobDir = path.resolve("" + id); Files.createDirectory(jobDir); - state = updateJobInfo().getState(); - saveJobinfo(); + updateState(); } public Job(Path p, Supplier<HaaSClient> haasClientSupplier) throws IOException { this(haasClientSupplier); jobDir = p; loadJobInfo(); - updateState(); } private Job(Supplier<HaaSClient> haasClientSupplier) { @@ -141,6 +136,14 @@ public class Job { return state; } + public Calendar getStartTime() { + return jobInfo.getStartTime(); + } + + public Calendar getEndTime() { + return jobInfo.getEndTime(); + } + private synchronized void saveJobinfo() throws IOException { try (OutputStream ow = Files.newOutputStream(jobDir.resolve(JOB_INFO_FILE), StandardOpenOption.TRUNCATE_EXISTING, StandardOpenOption.CREATE)) { @@ -175,15 +178,9 @@ public class Job { private static long getJobId(Path path) { return Long.parseLong(path.getFileName().toString()); } - - public Calendar getStartTime() { - return jobInfo.getStartTime(); - } - - public Calendar getEndTime() { - return jobInfo.getEndTime(); - } + + private class P_ProgressNotifierAdapter implements ProgressNotifier { private Progress progress; 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 e18b72e7..1517be71 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 @@ -6,6 +6,7 @@ import java.nio.file.Path; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; +import java.util.stream.Collectors; import org.scijava.Context; @@ -25,7 +26,6 @@ public class JobManager { private Context context; public JobManager(Path workDirectory, Context ctx) throws IOException { - super(); this.context = ctx; this.workDirectory = workDirectory; context.inject(this); @@ -39,6 +39,7 @@ public class JobManager { } + private Job inject(Job job) { context.inject(job); return job; @@ -52,8 +53,8 @@ public class JobManager { return () -> jobs.stream().filter(j -> j.needsDownload()).map(j -> new JobInfo(j)).iterator(); } - public Iterable<JobInfo> getJobs() { - return () -> jobs.stream().map(j -> new JobInfo(j)).iterator(); + public Collection<JobInfo> getJobs() { + return jobs.stream().map(j -> new JobInfo(j)).collect(Collectors.toList()); } public void downloadJob(Long id) { @@ -97,11 +98,15 @@ public class JobManager { public String getEndTime() { return job.getEndTime() != null ? job.getEndTime().getTime().toString() : "N/A"; } - + public void downloadData(Progress progress) { job.download(progress); fireValueChangedEvent(); } + + public void updateInfo() throws IOException { + job.updateState(); + } @Override public JobInfo getValue() { diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java index d0c2f2f6..200b77e3 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/RunWithHaaS.java @@ -16,7 +16,6 @@ import org.scijava.plugin.Plugin; import net.imagej.ImageJ; import net.imagej.ui.swing.updater.ProgressDialog; -import net.imagej.updater.util.Progress; /** * * @author koz01 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 9b74bd88..af64b4b3 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 @@ -249,6 +249,7 @@ public class HaaSClient { public void download(long jobId, Path workDirectory, final ProgressNotifier notifier) { try { + notifier.setTitle("Downloading"); FileTransferMethodExt ft = getFileTransfer().getFileTransferMethod(jobId, getSessionID()); try (ScpClient scpClient = getScpClient(ft)) { String[] files = getFileTransfer().listChangedFilesForJob(jobId, getSessionID()); @@ -256,8 +257,6 @@ public class HaaSClient { .map(filename -> ft.getSharedBasepath() + "/" + filename).collect(Collectors.toList()), scpClient); final long totalFileSize = fileSizes.stream().mapToLong(i -> i.longValue()).sum(); - - notifier.setTitle("Downloading"); int[] idx = { 0 }; final int[] totalDownloaded = { 0 }; for (String fileName : files) { @@ -281,8 +280,8 @@ public class HaaSClient { public void dataTransfered(long bytesTransfered) { totalDownloaded[0] += bytesTransfered; fileDownloaded[0] += bytesTransfered; - notifier.setCount((int) (totalDownloaded[0]), (int) (totalFileSize >> 10)); - notifier.setItemCount((int) (fileDownloaded[0]), (int) (fileSizes.get(idx[0]) >> 10)); + notifier.setCount((int) (totalDownloaded[0] >> 10), (int) (Math.max(totalFileSize,totalDownloaded[0]) >> 10)); + notifier.setItemCount((int) (fileDownloaded[0] >> 10), (int) ( Math.max(fileSizes.get(idx[0]),fileDownloaded[0]) >> 10)); } }); @@ -301,7 +300,7 @@ public class HaaSClient { private List<Long> getSizes(List<String> asList, ScpClient scpClient) throws JSchException, IOException { List<Long> result = new LinkedList<>(); for (String lfile : asList) { - result.add(scpClient.size(lfile).get(0)); + result.add(0l);//scpClient.size(lfile).get(0)); } return result; } -- GitLab