From 10138179411901d60604ffcbb2eaf401ee3e7aa0 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Wed, 31 Aug 2016 09:11:55 +0200
Subject: [PATCH] groups api is working

---
 .../eu/hbp/mip/controllers/GroupsApi.java     | 36 +++++++++++++++----
 1 file changed, 29 insertions(+), 7 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
index 571553bcb..4fa08179d 100644
--- a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java
@@ -5,13 +5,14 @@
 package eu.hbp.mip.controllers;
 
 import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 import com.google.gson.stream.JsonReader;
-import eu.hbp.mip.model.Variable;
+import eu.hbp.mip.model.Group;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
 import io.swagger.annotations.ApiResponses;
-import eu.hbp.mip.model.Group;
 import org.apache.log4j.Logger;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -33,6 +34,8 @@ public class GroupsApi {
 
     private static final String VARIABLES_FILE = "data/variables.json";
 
+    private static String groups;
+
 
     @ApiOperation(value = "Get the root group (containing all subgroups)", response = Group.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Success") })
@@ -40,14 +43,33 @@ public class GroupsApi {
     public ResponseEntity<Object> getTheRootGroup()  {
         LOGGER.info("Get root group and its whole sub-groups tree");
 
-        InputStream is = Variable.class.getClassLoader().getResourceAsStream(VARIABLES_FILE);
-        InputStreamReader isr = new InputStreamReader(is);
-        BufferedReader br = new BufferedReader(isr);
+        loadGroups();
 
-        Object hierarchy = new Gson().fromJson(new JsonReader(br), Object.class);
+        return ResponseEntity.ok(new Gson().fromJson(groups, Object.class));
+    }
+
+    private static void loadGroups() {
+        if(groups == null)
+        {
+            InputStream is = VariablesApi.class.getClassLoader().getResourceAsStream(VARIABLES_FILE);
+            InputStreamReader isr = new InputStreamReader(is);
+            BufferedReader br = new BufferedReader(isr);
 
-        return ResponseEntity.ok(hierarchy);
+            JsonObject root = new Gson().fromJson(new JsonReader(br), JsonObject.class);
+            removeVariablesRecursive(root);
+            groups = new Gson().toJson(root);
+        }
     }
 
+    private static void removeVariablesRecursive(JsonObject element) {
+        if (element.has("groups")){
+            for(JsonElement child : element.getAsJsonArray("groups")) {
+                removeVariablesRecursive(child.getAsJsonObject());
+            }
+        }
+        if(element.has("variables")) {
+            element.remove("variables");
+        }
+    }
 
 }
-- 
GitLab