From 34ac118fe2e9cddd38d8929ae57a799dbf650091 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Thu, 22 Dec 2016 14:07:37 +0100
Subject: [PATCH] refactoring : try to reduce NPath complexity

---
 .../eu/hbp/mip/controllers/ModelsApi.java     | 94 ++++++++++---------
 1 file changed, 50 insertions(+), 44 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
index ada7e3b85..3a13867b8 100644
--- a/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
+++ b/src/main/java/eu/hbp/mip/controllers/ModelsApi.java
@@ -118,72 +118,78 @@ public class ModelsApi {
             model.setValid(false);
         }
 
-        // Ensure the title is unique
-        boolean titleExists = true;
-        for(int i = 1; titleExists; i++)
+        ensureTitleUniqueness(model);
+        ensureSlugUniqueness(model);
+
+        Map<String, String> map = new HashMap<>(model.getConfig().getTitle());
+        map.put("text", model.getTitle());
+        model.getConfig().setTitle(map);
+
+        saveVariables(model.getQuery().getVariables());
+        saveVariables(model.getQuery().getCovariables());
+        saveVariables(model.getQuery().getGrouping());
+
+        configRepository.save(model.getConfig());
+        queryRepository.save(model.getQuery());
+        datasetRepository.save(model.getDataset());
+        modelRepository.save(model);
+
+        LOGGER.info("Model saved (also saved model.config and model.query)");
+
+        return ResponseEntity.status(HttpStatus.CREATED).body(model);
+    }
+
+    private void saveVariables(@RequestBody @ApiParam(value = "Model to create", required = true) List<Variable> variables) {
+        for (Variable var : variables)
         {
-            String title = model.getTitle();
-            titleExists = modelRepository.countByTitle(title) > 0;
-            if(titleExists)
+            variableRepository.save(var);
+        }
+    }
+
+    private void ensureSlugUniqueness(@RequestBody @ApiParam(value = "Model to create", required = true) Model model) {
+        String slug = createSlug(model.getTitle());
+        boolean slugExists = true;
+        for(int i = 1; slugExists; i++)
+        {
+            slugExists = modelRepository.exists(slug);
+            if(slugExists)
             {
                 if(i > 1)
                 {
-                    title = title.substring(0, title.length()-4);
+                    slug = slug.substring(0, slug.length()-2);
                 }
-                model.setTitle(title + " (" + i + ")");
+                slug += "-"+i;
             }
+            model.setSlug(slug);
         }
+    }
 
-        // Create slug from title
+    private String createSlug(@RequestBody @ApiParam(value = "Model to create", required = true) String title) {
         String slug;
         try {
-            slug = new Slugify().slugify(model.getTitle());
+            slug = new Slugify().slugify(title);
         } catch (IOException e) {
             slug = "";  // Should never happen
             LOGGER.trace(e);
         }
+        return slug;
+    }
 
-        // Ensure slug is unique
-        boolean slugExists = true;
-        for(int i = 1; slugExists; i++)
+    private void ensureTitleUniqueness(@RequestBody @ApiParam(value = "Model to create", required = true) Model model) {
+        boolean titleExists = true;
+        for(int i = 1; titleExists; i++)
         {
-            slugExists = modelRepository.exists(slug);
-            if(slugExists)
+            String title = model.getTitle();
+            titleExists = modelRepository.countByTitle(title) > 0;
+            if(titleExists)
             {
                 if(i > 1)
                 {
-                    slug = slug.substring(0, slug.length()-2);
+                    title = title.substring(0, title.length()-4);
                 }
-                slug += "-"+i;
+                model.setTitle(title + " (" + i + ")");
             }
-            model.setSlug(slug);
         }
-
-        Map<String, String> map = new HashMap<>(model.getConfig().getTitle());
-        map.put("text", model.getTitle());
-        model.getConfig().setTitle(map);
-
-        for (Variable var : model.getQuery().getVariables())
-        {
-            variableRepository.save(var);
-        }
-        for (Variable var : model.getQuery().getCovariables())
-        {
-            variableRepository.save(var);
-        }
-        for (Variable var : model.getQuery().getGrouping())
-        {
-            variableRepository.save(var);
-        }
-
-        configRepository.save(model.getConfig());
-        queryRepository.save(model.getQuery());
-        datasetRepository.save(model.getDataset());
-        modelRepository.save(model);
-
-        LOGGER.info("Model saved (also saved model.config and model.query)");
-
-        return ResponseEntity.status(HttpStatus.CREATED).body(model);
     }
 
     @ApiOperation(value = "Get a model", response = Model.class)
-- 
GitLab