diff --git a/src/main/java/eu/hbp/mip/controllers/GroupsApi.java b/src/main/java/eu/hbp/mip/controllers/GroupsApi.java index 571553bcb8e6339770f53d3183be56d813f662d8..4fa08179d505e73774bd067a5a8454de7b2b59e5 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"); + } + } }