From 0ade7af739be83d08401a6a268e6b6e682243f7d Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Wed, 13 Jul 2016 16:37:04 +0200
Subject: [PATCH] refactoring experimentApi to use Spring Data

---
 .../hbp/mip/controllers/ExperimentApi.java    | 59 +++++++------------
 .../repositories/ExperimentRepository.java    |  3 +
 2 files changed, 23 insertions(+), 39 deletions(-)

diff --git a/src/main/java/org/hbp/mip/controllers/ExperimentApi.java b/src/main/java/org/hbp/mip/controllers/ExperimentApi.java
index 508839d0c..c25f493e7 100644
--- a/src/main/java/org/hbp/mip/controllers/ExperimentApi.java
+++ b/src/main/java/org/hbp/mip/controllers/ExperimentApi.java
@@ -1,5 +1,6 @@
 package org.hbp.mip.controllers;
 
+import com.google.common.collect.Iterables;
 import com.google.gson.*;
 import io.swagger.annotations.*;
 import org.apache.log4j.Logger;
@@ -21,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.net.MalformedURLException;
+import java.util.Iterator;
 import java.util.UUID;
 
 import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
@@ -209,53 +211,32 @@ public class ExperimentApi {
             int maxResultCount,
             String modelSlug
     ) {
-        /*List<Experiment> experiments = new LinkedList<>();
         User user = mipApplication.getUser();
+        Iterable<Experiment> experiments = null;
 
-        try {
-            Query hibernateQuery;
-            String baseQuery = "from Experiment as e WHERE ";
-
-            baseQuery += mine ? "e.createdBy = :user" : "(e.createdBy = :user OR e.shared is true)";
-
-            if (modelSlug == null || "".equals(modelSlug)) {
-                hibernateQuery = session.createQuery(baseQuery);
-            } else {
-                baseQuery += " AND e.model.slug = :slug";
-                hibernateQuery = session.createQuery(baseQuery);
-                hibernateQuery.setParameter("slug", modelSlug);
-            }
-            hibernateQuery.setParameter("user", user);
-
-            if (maxResultCount > 0)
-                hibernateQuery.setMaxResults(maxResultCount);
-
-            for (Object experiment: hibernateQuery.list()) {
-                if (experiment instanceof Experiment) { // should definitely be true
-                    Experiment experiment1 = (Experiment) experiment;
-                    // remove some fields because it is costly and not useful to send them over the network
-                    experiment1.setResult(null);
-                    experiment1.setAlgorithms(null);
-                    experiment1.setValidations(null);
-                    experiments.add(experiment1);
-
-                }
+        Iterable<Experiment> myExperiments = experimentRepository.findByUser(user);
+        if(!mine)
+        {
+            Iterable<Experiment> sharedExperiments = experimentRepository.findShared(true);
+            experiments = Iterables.concat(myExperiments, sharedExperiments);
+        }
 
-            }
-        } catch (Exception e) {
-            // 404 here probably
-            LOGGER.trace(e);
-            throw e;
-        } finally {
-            if(session.getTransaction() != null)
+        if (modelSlug != null && !"".equals(modelSlug)) {
+            for(Iterator<Experiment> i = myExperiments.iterator(); i.hasNext(); )
             {
-                session.getTransaction().rollback();
+                Experiment e = i.next();
+                e.setResult(null);
+                e.setAlgorithms(null);
+                e.setValidations(null);
+                if(!e.getModel().getSlug().equals(modelSlug))
+                {
+                    i.remove();
+                }
             }
         }
 
-        return new ResponseEntity<>(gson.toJson(experiments), HttpStatus.OK);*/
+        return new ResponseEntity<>(gson.toJson(experiments), HttpStatus.OK);
 
-        return new ResponseEntity<>("", HttpStatus.OK);
     }
 
     private ResponseEntity<String> doMarkExperimentAsShared(String uuid, boolean shared) {
diff --git a/src/main/java/org/hbp/mip/repositories/ExperimentRepository.java b/src/main/java/org/hbp/mip/repositories/ExperimentRepository.java
index bceb59e9d..17d8d5fb4 100644
--- a/src/main/java/org/hbp/mip/repositories/ExperimentRepository.java
+++ b/src/main/java/org/hbp/mip/repositories/ExperimentRepository.java
@@ -1,6 +1,7 @@
 package org.hbp.mip.repositories;
 
 import org.hbp.mip.model.Experiment;
+import org.hbp.mip.model.User;
 import org.springframework.data.repository.CrudRepository;
 
 import java.util.UUID;
@@ -10,4 +11,6 @@ import java.util.UUID;
  */
 
 public interface ExperimentRepository extends CrudRepository<Experiment, UUID> {
+    Iterable<Experiment> findByUser(User user);
+    Iterable<Experiment> findShared(Boolean shared);
 }
-- 
GitLab