From 8ba0b20f146d36c1b08ef600d3f25c2300234fd9 Mon Sep 17 00:00:00 2001
From: Jan Kozusznik <jan@kozusznik.cz>
Date: Thu, 16 Nov 2017 09:42:23 +0100
Subject: [PATCH] check status command

---
 .../cz/it4i/fiji/haas/CheckStatusOfHaaS.java  | 13 +++++++++---
 .../java/cz/it4i/fiji/haas/CommandBase.java   | 21 +++++++++++++++++++
 .../java/cz/it4i/fiji/haas/ImageJGate.java    |  8 +++++++
 .../src/main/java/cz/it4i/fiji/haas/Job.java  | 17 ++++++++++-----
 .../java/cz/it4i/fiji/haas/JobManager.java    |  9 +++++---
 .../java/cz/it4i/fiji/haas/RunWithHaaS.java   |  4 ++--
 6 files changed, 59 insertions(+), 13 deletions(-)
 create mode 100644 haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java
 create mode 100644 haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java

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 884d52fe..b4c6a236 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
@@ -17,21 +17,27 @@ import net.imagej.ImageJ;
  *
  */
 @Plugin(type = Command.class, headless = true, menuPath = "Plugins>Check status of HaaS")
-public class CheckStatusOfHaaS implements Command {
+public class CheckStatusOfHaaS extends CommandBase implements Command {
 
 	@Parameter
 	private LogService log;
+	
 
 	@Parameter(label="Work directory",persist=true)
 	private File workDirectory;
 	
+	@Parameter(label="Work directory",persist=true,required = false)
+	private File workDirectory2;
+	
 	@SuppressWarnings("unused")
 	private JobManager jobManager;
 	
+	
+	
 	@Override
 	public void run() {
 		try {
-			jobManager = new JobManager(getWorkingDirectoryPath());
+			jobManager = new JobManager(getWorkingDirectoryPath(), getGate());
 		} catch (IOException e) {
 			log.error(e);
 		}
@@ -47,7 +53,8 @@ public class CheckStatusOfHaaS implements Command {
 		final ImageJ ij = new ImageJ();
 		ij.launch(args);
 	
-		ij.command().run(CheckStatusOfHaaS.class, true);
+		//ij.command().run(CheckStatusOfHaaS.class, true);
 	}
 
+	
 }
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java
new file mode 100644
index 00000000..835b0ff5
--- /dev/null
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/CommandBase.java
@@ -0,0 +1,21 @@
+package cz.it4i.fiji.haas;
+
+import org.scijava.log.LogService;
+import org.scijava.plugin.Parameter;
+
+class CommandBase {
+	@Parameter
+	private LogService _log;
+
+	protected ImageJGate getGate() {
+		return gate;
+	}
+
+	private ImageJGate gate = new ImageJGate() {
+
+		@Override
+		public LogService getLog() {
+			return _log;
+		}
+	};
+}
diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java
new file mode 100644
index 00000000..1a5ce21a
--- /dev/null
+++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/ImageJGate.java
@@ -0,0 +1,8 @@
+package cz.it4i.fiji.haas;
+
+import org.scijava.log.LogService;
+
+interface ImageJGate {
+
+	LogService getLog();
+}
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 e8ed48e6..b85264ee 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
@@ -17,6 +17,8 @@ import cz.it4i.fiji.haas_java_client.JobState;
 
 public class Job {
 
+	
+	
 	private static final String JOB_ID_PROPERTY = "job.id";
 
 	private static final String JOB_STATE_PROPERTY = "job.state";
@@ -32,9 +34,11 @@ public class Job {
 	private Supplier<HaaSClient> haasClientSupplier;
 	
 	private JobState state;
+
+	private ImageJGate gate;
 	
-	public Job(Path path, Collection<Path> files, Supplier<HaaSClient> haasClientSupplier) throws IOException {
-		this(haasClientSupplier);
+	public Job(Path path, Collection<Path> files, Supplier<HaaSClient> haasClientSupplier, ImageJGate gate) throws IOException {
+		this(haasClientSupplier,gate);
 		HaaSClient client = this.haasClientSupplier.get();
 		long id = client.start(files, "TestOutRedirect",
 				Collections.emptyList());
@@ -46,8 +50,8 @@ public class Job {
 
 	
 
-	public Job(Path p, Supplier<HaaSClient> haasClientSupplier) throws IOException {
-		this(haasClientSupplier);
+	public Job(Path p, Supplier<HaaSClient> haasClientSupplier, ImageJGate gate) throws IOException {
+		this(haasClientSupplier,gate);
 		jobDir = p;
 		loadJobInfo();
 		checkStateForDownload();
@@ -56,7 +60,9 @@ public class Job {
 	private synchronized void checkStateForDownload() throws IOException {
 		long jobId = getJobId();
 		JobState actualState = haasClientSupplier.get().obtainJobInfo(jobId).getState();
+		gate.getLog().info("Job: " + jobId + " is " + actualState);
 		if(EnumSet.of(JobState.Failed, JobState.Finished, JobState.Canceled).contains(actualState) && state != actualState) {
+			gate.getLog().info("Downloading data.");
 			haasClientSupplier.get().download(jobId, jobDir);
 			state = actualState;
 			saveJobinfo();
@@ -65,8 +71,9 @@ public class Job {
 
 
 
-	private Job(Supplier<HaaSClient> haasClientSupplier) {
+	private Job(Supplier<HaaSClient> haasClientSupplier, ImageJGate gate) {
 		this.haasClientSupplier = haasClientSupplier;
+		this.gate = gate;
 	}
 	
 	private synchronized void saveJobinfo() throws IOException {
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 733d9322..d3da7e99 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
@@ -16,13 +16,16 @@ public class JobManager {
 	
 	private HaaSClient haasClient;
 
-	public JobManager(Path workDirectory) throws IOException {
+	private ImageJGate gate;
+
+	public JobManager(Path workDirectory, ImageJGate gate) throws IOException {
 		super();
+		this.gate = gate;
 		this.workDirectory = workDirectory;
 		Files.list(this.workDirectory).filter(p -> Files.isDirectory(p) && Job.isJobPath(p))
 				.forEach(p -> {
 					try {
-						jobs.add(new Job(p,this::getHaasClient));
+						jobs.add(new Job(p,this::getHaasClient, gate));
 					} catch (IOException e) {
 						e.printStackTrace();
 					}
@@ -31,7 +34,7 @@ public class JobManager {
 	}
 
 	public void startJob(Path path, Collection<Path> files) throws IOException {
-		jobs.add(new Job(path, files,this::getHaasClient));
+		jobs.add(new Job(path, files,this::getHaasClient,gate));
 	}
 
 	private HaaSClient getHaasClient() {
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 4dfec903..b120487c 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
@@ -20,7 +20,7 @@ import net.imagej.ImageJ;
  *
  */
 @Plugin(type = Command.class, headless = true, menuPath = "Plugins>Run with HaaS")
-public class RunWithHaaS implements Command {
+public class RunWithHaaS extends CommandBase implements Command {
 
 	@Parameter
 	private LogService log;
@@ -36,7 +36,7 @@ public class RunWithHaaS implements Command {
 	@Override
 	public void run() {
 		try {
-			jobManager = new JobManager(getWorkingDirectoryPath());
+			jobManager = new JobManager(getWorkingDirectoryPath(), getGate());
 			jobManager.startJob(getWorkingDirectoryPath(),getContent(dataDirectory));
 		} catch (IOException e) {
 			log.error(e);
-- 
GitLab