From f2c3034788f7e6eb19b9e6560bd8aaedccd354d7 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Thu, 22 Dec 2016 12:03:49 +0100
Subject: [PATCH] refactoring : try to reduce NPath complexity

---
 .../java/eu/hbp/mip/model/Experiment.java     | 74 +++++++++----------
 1 file changed, 34 insertions(+), 40 deletions(-)

diff --git a/src/main/java/eu/hbp/mip/model/Experiment.java b/src/main/java/eu/hbp/mip/model/Experiment.java
index 964fedbe5..f249fddba 100644
--- a/src/main/java/eu/hbp/mip/model/Experiment.java
+++ b/src/main/java/eu/hbp/mip/model/Experiment.java
@@ -86,65 +86,59 @@ public class Experiment {
     }
 
     public ExperimentQuery prepareQuery() {
-        List<VariableId> variables = new LinkedList<>();
-        List<VariableId> covariables = new LinkedList<>();
-        List<VariableId> grouping = new LinkedList<>();
-        List<Filter> filters = new LinkedList<>();
-        List<eu.hbp.mip.messages.external.Algorithm> algorithms = new LinkedList<>();
-        List<Validation> validations = new LinkedList<>();
-
         if (model == null || model.getQuery() == null)
             return new ExperimentQuery(null, null, null, null, null, null);
 
-        for (Variable v: model.getQuery().getVariables()
-                ) {
-            variables.add(new VariableId(v.getCode()));
-        }
-
-        for (Variable v: model.getQuery().getCovariables()
-             ) {
-            covariables.add(new VariableId(v.getCode()));
-        }
-
-        for (Variable v: model.getQuery().getGrouping()
-                ) {
-            grouping.add(new VariableId(v.getCode()));
-        }
-
+        List<eu.hbp.mip.messages.external.Algorithm> algorithms = new LinkedList<>();
         Type algoList = new TypeToken<LinkedList<eu.hbp.mip.model.Algorithm>>(){}.getType();
         List<eu.hbp.mip.model.Algorithm> algos = new Gson().fromJson(this.algorithms, algoList);
         for (eu.hbp.mip.model.Algorithm a: algos
              ) {
-            HashMap<String, String> params = new HashMap<>();
-            for (AlgorithmParam ap: a.getParameters()
-                 ) {
-                params = params.updated(ap.getCode(), ap.getValue());
-            }
-            algorithms.add(new Algorithm(a.getCode(), a.getName(), params));
+            algorithms.add(new Algorithm(a.getCode(), a.getName(), algoParamsToHashMap(a.getParameters())));
         }
 
+        List<Validation> validations = new LinkedList<>();
         Type validList = new TypeToken<LinkedList<eu.hbp.mip.model.ExperimentValidator>>(){}.getType();
         List<eu.hbp.mip.model.ExperimentValidator> valids = new Gson().fromJson(this.validations, validList);
         for (ExperimentValidator v: valids
                 ) {
-            HashMap<String, String> params = new HashMap<>();
-            for (AlgorithmParam ap: v.getParameters()
-                    ) {
-                params = params.updated(ap.getCode(), ap.getValue());
-            }
-            validations.add(new Validation(v.getCode(), v.getName(), params));
+            validations.add(new Validation(v.getCode(), v.getName(), algoParamsToHashMap(v.getParameters())));
         }
 
-        Seq<VariableId> variablesSeq = JavaConverters.asScalaIteratorConverter(variables.iterator()).asScala().toSeq().toList();
-        Seq<VariableId> covariablesSeq = JavaConverters.asScalaIteratorConverter(covariables.iterator()).asScala().toSeq().toList();
-        Seq<VariableId> groupingSeq = JavaConverters.asScalaIteratorConverter(grouping.iterator()).asScala().toSeq().toList();
-        Seq<Filter> filtersSeq = JavaConverters.asScalaIteratorConverter(filters.iterator()).asScala().toSeq().toList();
-        Seq<Algorithm> algorithmsSeq = JavaConverters.asScalaIteratorConverter(algorithms.iterator()).asScala().toSeq().toList();
-        Seq<Validation> validationsSeq = JavaConverters.asScalaIteratorConverter(validations.iterator()).asScala().toSeq().toList();
+        Seq<VariableId> variablesSeq = JavaConverters.asScalaIteratorConverter(
+                variablesToVariableIds(model.getQuery().getVariables()).iterator()).asScala().toSeq().toList();
+        Seq<VariableId> covariablesSeq = JavaConverters.asScalaIteratorConverter(
+                variablesToVariableIds(model.getQuery().getCovariables()).iterator()).asScala().toSeq().toList();
+        Seq<VariableId> groupingSeq = JavaConverters.asScalaIteratorConverter(
+                variablesToVariableIds(model.getQuery().getGrouping()).iterator()).asScala().toSeq().toList();
+        Seq<Filter> filtersSeq = JavaConverters.asScalaIteratorConverter(
+                new LinkedList<Filter>().iterator()).asScala().toSeq().toList();
+        Seq<Algorithm> algorithmsSeq = JavaConverters.asScalaIteratorConverter(
+                algorithms.iterator()).asScala().toSeq().toList();
+        Seq<Validation> validationsSeq = JavaConverters.asScalaIteratorConverter(
+                validations.iterator()).asScala().toSeq().toList();
 
         return new ExperimentQuery(variablesSeq, covariablesSeq, groupingSeq, filtersSeq, algorithmsSeq, validationsSeq);
     }
 
+    private HashMap<String, String> algoParamsToHashMap(List<AlgorithmParam> aps) {
+        HashMap<String, String> params = new HashMap<>();
+        for (AlgorithmParam ap: aps
+             ) {
+            params = params.updated(ap.getCode(), ap.getValue());
+        }
+        return params;
+    }
+
+    private List<VariableId> variablesToVariableIds(List<Variable> vars) {
+        List<VariableId> varIds = new LinkedList<>();
+        for (Variable v: vars
+                ) {
+            varIds.add(new VariableId(v.getCode()));
+        }
+        return varIds;
+    }
+
     public String computeExaremeQuery() {
         List<ExaremeQueryElement> queryElements = new LinkedList<>();
         for (Variable var : model.getQuery().getVariables())
-- 
GitLab