From f370f15876f06b51c5ba2473b351c0b5a0271b29 Mon Sep 17 00:00:00 2001
From: David Hoksza <david.hoksza@uni.lu>
Date: Tue, 13 Feb 2018 14:27:49 +0100
Subject: [PATCH] Fixed issues with annotator params not updating after adding
 or removal of annotator in frontend + problems with params names after
 introduction of params tooltips.

---
 .../services/annotators/KeggAnnotator.java    |   3 +-
 .../js/gui/admin/ChooseAnnotatorsDialog.js    | 186 ++++++++++--------
 2 files changed, 102 insertions(+), 87 deletions(-)

diff --git a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java
index 4f4238e70c..2097537be8 100644
--- a/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java
+++ b/annotation/src/main/java/lcsb/mapviewer/annotation/services/annotators/KeggAnnotator.java
@@ -78,7 +78,7 @@ public class KeggAnnotator extends ElementAnnotator implements IExternalService
 				String.class,
 				"Space-delimited list of organisms codes for which homologous genes"
 				+ " (GENE section in the KEGG enzyme record) should be imported."
-				+ " Currently ATH (Arabidopsis Thaliana) is supported.");
+				+ " Currently only ATH (Arabidopsis Thaliana) is supported.");
 		this.addParameterDefinition(paramDef);
 	}
 
@@ -230,7 +230,6 @@ public class KeggAnnotator extends ElementAnnotator implements IExternalService
 						String[] tairCodes = m.group(1).trim().split(" ");
 						for (String tairCode: tairCodes) {
 							tairCode = tairCode.split("\\(")[0]; //some codes are in the form AT1G08510(FATB)
-							logger.debug("Adding tair code " + tairCode);
 							result.add(createMiriamData(MiriamType.TAIR_LOCUS, tairCode));
 			            }
 					}
diff --git a/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js b/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js
index 77a57eb5e4..46f8472784 100644
--- a/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js
+++ b/frontend-js/src/main/js/gui/admin/ChooseAnnotatorsDialog.js
@@ -58,7 +58,7 @@ ChooseAnnotatorsDialog.prototype.createGui = function () {
 };
 
 function onChangeParameterValue(element, user){  
-  var name = $(element).siblings(".minerva-annotator-param-name").text();
+  var name = $(element).siblings(".minerva-annotator-param-name")[0].childNodes[0].nodeValue;
   var annotatorClassName = $(element).parent().parent().attr('name');
      
   var data = new UserPreferences();
@@ -84,8 +84,7 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) {
     var element = $("[name='annotatorListBox']", self.getElement())[0];
     var annotatorsParams = $(".minerva-annotators-params", self.getElement())[0];
     Functions.removeChildren(element);
-    Functions.removeChildren(annotatorsParams);
-
+    
     var selectElement = Functions.createElement({
       type: "select",
       className: "minerva-multi-select"
@@ -94,8 +93,6 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) {
     var annotators = configuration.getElementAnnotators(elementType);
 
     var selectedAnnotators = user.getPreferences().getElementAnnotators(elementType.className);
-    var existingAnnotatorsParameters = user.getPreferences().getAnnotatorsParameters();
-
 
     for (var i = 0; i < annotators.length; i++) {
       var annotator = annotators[i];
@@ -103,95 +100,110 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) {
       for (var j = 0; j < selectedAnnotators.length; j++) {
         if (annotator.getName() === selectedAnnotators[j]) {
           selected = true;
-          
-          var paramsDefs = annotator.getParametersDefinitions();
-          if (paramsDefs.length > 0) {
+        }      
+      }
+      var option = new Option();
+      option.value = annotator.getClassName();
+      option.attributes.selected = selected;
+      option.innerHTML = "<div>" + annotator.getName() + "</div>";
+      selectElement.appendChild(option);
+    };
+
+    function createAnnotatorsParams(){
+      var existingAnnotatorsParameters = user.getPreferences().getAnnotatorsParameters();
+
+      Functions.removeChildren(annotatorsParams);
+      for (var i = 0; i < annotators.length; i++) {
+        var annotator = annotators[i];
+        for (var j = 0; j < selectedAnnotators.length; j++) {
+          if (annotator.getName() === selectedAnnotators[j]) {
             
-            annotatorsParams.appendChild(Functions.createElement({
-              type: "div",    
-              className: "minerva-annotators-params-header",
-              content: '<div>Available parameters</div>'
-            }))
-
-            var annotatorParams = Functions.createElement({
-              type: "div",    
-              className: "minerva-annotator-params",
-              name: annotator.getClassName()
-            });
+            var paramsDefs = annotator.getParametersDefinitions();
+            if (paramsDefs.length > 0) {
+              
+              annotatorsParams.appendChild(Functions.createElement({
+                type: "div",    
+                className: "minerva-annotators-params-header",
+                content: '<div>Available parameters</div>'
+              }))
   
-            annotatorParams.appendChild(Functions.createElement({
-              type: "div",    
-              className: "minerva-annotator-params-header",
-              content: annotator.getName()
-            }));
-
-            for (var k = 0; k < paramsDefs.length; k++) {
-              var param = paramsDefs[k];              
-              var paramElement = Functions.createElement({
+              var annotatorParams = Functions.createElement({
                 type: "div",    
-                className: "minerva-annotator-param"
-              });
-
-              var paramName = Functions.createElement({
-                type: "div",
-                className: "minerva-annotator-param-name",
-                content: param.name
-              });
-
-              var toolTip = Functions.createElement({
-                type: "span",
-                className: "annotator-tooltip",
-                content: param.description
+                className: "minerva-annotator-params",
+                name: annotator.getClassName()
               });
-
-              paramName.appendChild(toolTip)
-              paramElement.appendChild(paramName);    
-
-              var paramValue;
-
-              var existingParamValue;
-              if (existingAnnotatorsParameters[annotator.getClassName()]) {
-                existingParamValue = existingAnnotatorsParameters[annotator.getClassName()][param.name]
-              }
-
-              if (param.type.indexOf("String") >= 0) {
-                paramValue = Functions.createElement({
-                  type: "textarea",
-                  onchange: function(){return onChangeParameterValue(this, user);}
+    
+              annotatorParams.appendChild(Functions.createElement({
+                type: "div",    
+                className: "minerva-annotator-params-header",
+                content: annotator.getName()
+              }));
+  
+              for (var k = 0; k < paramsDefs.length; k++) {
+                var param = paramsDefs[k];              
+                var paramElement = Functions.createElement({
+                  type: "div",    
+                  className: "minerva-annotator-param"
                 });
-                if (existingParamValue) paramValue.value = existingParamValue;
-              } else if (param.type.indexOf("Integer") >= 0) {
-                paramValue = Functions.createElement({
-                  type: "input",
-                  inputType: "number",
-                  onchange: function(){return onChangeParameterValue(this, user);}
+  
+                var paramName = Functions.createElement({
+                  type: "div",
+                  className: "minerva-annotator-param-name",
+                  content: param.name
                 });
-                if (existingParamValue) paramValue.value = existingParamValue;
-              } else if (param.type.indexOf("Boolean") >= 0) {
-                paramValue = Functions.createElement({
-                  type: "input",
-                  inputType: "checkbox",
-                  onchange: function(){return onChangeParameterValue(this, user);}
+  
+                var toolTip = Functions.createElement({
+                  type: "span",
+                  className: "annotator-tooltip",
+                  content: param.description
                 });
-                paramValue.checked = (existingParamValue && existingParamValue === 'true');
-              } else {
-                throw new InvalidAlgorithmError("Unknown annotator parameter type");
-              }    
-              
-              paramElement.appendChild(paramValue);
-              annotatorParams.appendChild(paramElement);              
+  
+                paramName.appendChild(toolTip)
+                paramElement.appendChild(paramName);    
+  
+                var paramValue;
+  
+                var existingParamValue;
+                if (existingAnnotatorsParameters[annotator.getClassName()]) {
+                  existingParamValue = existingAnnotatorsParameters[annotator.getClassName()][param.name]
+                }
+  
+                if (param.type.indexOf("String") >= 0) {
+                  paramValue = Functions.createElement({
+                    type: "textarea",
+                    onchange: function(){return onChangeParameterValue(this, user);}
+                  });
+                  if (existingParamValue) paramValue.value = existingParamValue;
+                } else if (param.type.indexOf("Integer") >= 0) {
+                  paramValue = Functions.createElement({
+                    type: "input",
+                    inputType: "number",
+                    onchange: function(){return onChangeParameterValue(this, user);}
+                  });
+                  if (existingParamValue) paramValue.value = existingParamValue;
+                } else if (param.type.indexOf("Boolean") >= 0) {
+                  paramValue = Functions.createElement({
+                    type: "input",
+                    inputType: "checkbox",
+                    onchange: function(){return onChangeParameterValue(this, user);}
+                  });
+                  paramValue.checked = (existingParamValue && existingParamValue === 'true');
+                } else {
+                  throw new InvalidAlgorithmError("Unknown annotator parameter type");
+                }    
+                
+                paramElement.appendChild(paramValue);
+                annotatorParams.appendChild(paramElement);              
+              }
+  
+              annotatorsParams.appendChild(annotatorParams);
             }
+          }      
+        }
+      };
 
-            annotatorsParams.appendChild(annotatorParams);
-          }
-        }      
-      }
-      var option = new Option();
-      option.value = annotator.getClassName();
-      option.attributes.selected = selected;
-      option.innerHTML = "<div>" + annotator.getName() + "</div>";
-      selectElement.appendChild(option);
-    };
+    }
+    createAnnotatorsParams();
 
     element.appendChild(selectElement);
     new DualListbox(selectElement, {
@@ -205,6 +217,8 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) {
         }
         selectedAnnotators.push(annotator.getName());
 
+        createAnnotatorsParams();
+
         var data = new UserPreferences();
 
         var elementAnnotators = {};
@@ -225,6 +239,8 @@ ChooseAnnotatorsDialog.prototype.setElementType = function (elementType) {
           selectedAnnotators.splice(index, 1);
         }
 
+        createAnnotatorsParams();
+        
         var data = new UserPreferences();
 
         var elementAnnotators = {};
-- 
GitLab