From 4638c26d0e00f2d0cb458faf4bb00fefb6450135 Mon Sep 17 00:00:00 2001
From: Ludovic Claude <ludovic.claude@laposte.net>
Date: Sun, 17 Dec 2017 22:49:31 +0100
Subject: [PATCH] Api change: /mining returns shape of data and other infos

---
 .../java/eu/hbp/mip/akka/ExperimentActor.java |  2 +-
 .../eu/hbp/mip/controllers/MiningApi.java     | 12 +++-
 .../java/eu/hbp/mip/model/Experiment.java     |  1 -
 src/main/java/eu/hbp/mip/model/Mining.java    | 67 +++++++++++++++++++
 4 files changed, 79 insertions(+), 3 deletions(-)
 create mode 100644 src/main/java/eu/hbp/mip/model/Mining.java

diff --git a/src/main/java/eu/hbp/mip/akka/ExperimentActor.java b/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
index da7cc21f8..19a1fc606 100644
--- a/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
+++ b/src/main/java/eu/hbp/mip/akka/ExperimentActor.java
@@ -43,7 +43,7 @@ public class ExperimentActor extends UntypedActor {
                 return;
             }
             experiment.setResult(queryResult.data().get());
-            experiment.setFinished(new Date());
+            experiment.setFinished(Date.from(queryResult.timestamp().toInstant()));
             experimentRepository.save(experiment);
             LOGGER.info("Experiment "+ uuid +" updated (finished)");
             getContext().stop(getSelf());
diff --git a/src/main/java/eu/hbp/mip/controllers/MiningApi.java b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
index 46a0857db..7b9b395c2 100644
--- a/src/main/java/eu/hbp/mip/controllers/MiningApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/MiningApi.java
@@ -4,6 +4,7 @@ import akka.actor.ActorSelection;
 import akka.actor.ActorSystem;
 import akka.pattern.Patterns;
 import akka.util.Timeout;
+import eu.hbp.mip.model.Mining;
 import eu.hbp.mip.woken.messages.external.QueryResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,6 +22,7 @@ import scala.concurrent.Future;
 import scala.concurrent.duration.Duration;
 
 import java.io.IOException;
+import java.sql.Date;
 
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
 
@@ -64,7 +66,15 @@ public class MiningApi {
             LOGGER.error(result.error().get());
             return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"error\":\"" + result.error().get() + "\"}");
         } else {
-            return ResponseEntity.ok(result.data().get());
+            Mining mining = new Mining(
+                    result.jobId(),
+                    result.node(),
+                    result.function(),
+                    result.shape(),
+                    Date.from(result.timestamp().toInstant()),
+                    result.data().get()
+            );
+            return ResponseEntity.ok(mining.jsonify());
         }
     }
 
diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 7414f3461..fa94e45ef 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -12,7 +12,6 @@ import eu.hbp.mip.woken.messages.external.*;
 import eu.hbp.mip.utils.TypesConvert;
 import org.hibernate.annotations.Cascade;
 import scala.collection.JavaConverters;
-import scala.collection.Seq;
 
 import javax.persistence.*;
 import java.lang.reflect.Type;
diff --git a/src/main/java/eu/hbp/mip/model/Mining.java b/src/main/java/eu/hbp/mip/model/Mining.java
new file mode 100644
index 000000000..0bb70bf43
--- /dev/null
+++ b/src/main/java/eu/hbp/mip/model/Mining.java
@@ -0,0 +1,67 @@
+package eu.hbp.mip.model;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+import java.util.Date;
+
+public class Mining {
+
+    private static final Gson gson = new Gson();
+
+    private String jobId;
+    private String node;
+    private String function;
+    private String shape;
+    private Date timestamp;
+    private String data;
+
+    public Mining(String jobId, String node, String function, String shape, Date timestamp, String data) {
+        this.jobId = jobId;
+        this.node = node;
+        this.function = function;
+        this.shape = shape;
+        this.timestamp = timestamp;
+        this.data = data;
+    }
+
+    public String getJobId() {
+        return jobId;
+    }
+
+    public String getNode() {
+        return node;
+    }
+
+    public String getFunction() {
+        return function;
+    }
+
+    public String getShape() {
+        return shape;
+    }
+
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
+    public String getData() {
+        return data;
+    }
+
+    public JsonObject jsonify() {
+        JsonObject exp = gson.toJsonTree(this).getAsJsonObject();
+        JsonParser parser = new JsonParser();
+
+        if (this.data != null) {
+            exp.remove("data");
+            JsonArray jsonResult = parser.parse(this.data).getAsJsonArray();
+            exp.add("data", jsonResult);
+        }
+
+        return exp;
+    }
+
+}
-- 
GitLab