From 049e7c95bd6c45ff1b938875d75b82568f8d40d6 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Tue, 30 Aug 2016 17:42:48 +0200
Subject: [PATCH] refactor extract method for load variables from json

---
 .../eu/hbp/mip/controllers/VariablesApi.java  | 66 ++++++++++++-------
 1 file changed, 43 insertions(+), 23 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
index 9c8b40114..381515f1e 100644
--- a/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/VariablesApi.java
@@ -49,31 +49,11 @@ public class VariablesApi {
     )  {
         LOGGER.info("Get variables");
 
-        InputStream is = Variable.class.getClassLoader().getResourceAsStream(VARIABLES_FILE);
-        InputStreamReader isr = new InputStreamReader(is);
-        BufferedReader br = new BufferedReader(isr);
-
-        JsonObject root = new Gson().fromJson(new JsonReader(br), JsonObject.class);
-        variables = new LinkedList<>();
-
-        extractVariablesRecursive(root);
+        loadVariables();
 
         return ResponseEntity.ok(variables);
     }
 
-    private static void extractVariablesRecursive(JsonObject element) {
-        if (element.has("groups")){
-            for(JsonElement child : element.getAsJsonArray("groups")) {
-                extractVariablesRecursive(child.getAsJsonObject());
-            }
-        }
-        if (element.has("variables")){
-            for (JsonElement var : element.getAsJsonArray("variables")){
-                variables.add(new Gson().fromJson(var, Variable.class));
-            }
-        }
-    }
-
     @ApiOperation(value = "Get a variable", response = Variable.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/{code}", method = RequestMethod.GET)
@@ -82,7 +62,19 @@ public class VariablesApi {
     )  {
         LOGGER.info("Get a variable");
 
-        return ResponseEntity.ok(null); // TODO findOne(code)
+        loadVariables();
+
+        for (Variable var : variables)
+        {
+            if (var.getCode().equals(code))
+            {
+                return ResponseEntity.ok(var);
+            }
+        }
+
+        LOGGER.warn("Variable " + code + " not found ! ");
+
+        return ResponseEntity.ok(null);
     }
 
 
@@ -101,7 +93,7 @@ public class VariablesApi {
     @ApiOperation(value = "Get groups and variables hierarchy", response = Variable.class)
     @ApiResponses(value = { @ApiResponse(code = 200, message = "Found"), @ApiResponse(code = 404, message = "Not found") })
     @RequestMapping(value = "/hierarchy", method = RequestMethod.GET)
-    public ResponseEntity<Object> getAVariable(
+    public ResponseEntity<Object> getVariablesHierarchy(
     )  {
         LOGGER.info("Get groups and variables hierarchy");
 
@@ -115,4 +107,32 @@ public class VariablesApi {
     }
 
 
+    private static void loadVariables() {
+        if(variables == null)
+        {
+            InputStream is = Variable.class.getClassLoader().getResourceAsStream(VARIABLES_FILE);
+            InputStreamReader isr = new InputStreamReader(is);
+            BufferedReader br = new BufferedReader(isr);
+
+            JsonObject root = new Gson().fromJson(new JsonReader(br), JsonObject.class);
+            variables = new LinkedList<>();
+
+            extractVariablesRecursive(root);
+        }
+    }
+
+    private static void extractVariablesRecursive(JsonObject element) {
+        if (element.has("groups")){
+            for(JsonElement child : element.getAsJsonArray("groups")) {
+                extractVariablesRecursive(child.getAsJsonObject());
+            }
+        }
+        if (element.has("variables")){
+            for (JsonElement var : element.getAsJsonArray("variables")){
+                variables.add(new Gson().fromJson(var, Variable.class));
+            }
+        }
+    }
+
+
 }
-- 
GitLab