Merge branch 'alpha/origin_2022_JAL-3066_Jalview_212_slivka-integration' into spike...
[jalview.git] / src / jalview / ws / slivkaws / SlivkaParamSet.java
index 7e81684..c8b99db 100644 (file)
 package jalview.ws.slivkaws;
 
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.WsParamSetI;
 import jalview.ws.params.simple.BooleanOption;
 import jalview.ws.params.simple.DoubleParameter;
 import jalview.ws.params.simple.IntegerParameter;
 import jalview.ws.params.simple.StringParameter;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import uk.ac.dundee.compbio.slivkaclient.BooleanField;
-import uk.ac.dundee.compbio.slivkaclient.ChoiceField;
-import uk.ac.dundee.compbio.slivkaclient.DecimalField;
-import uk.ac.dundee.compbio.slivkaclient.FormField;
-import uk.ac.dundee.compbio.slivkaclient.IntegerField;
-import uk.ac.dundee.compbio.slivkaclient.SlivkaForm;
+import uk.ac.dundee.compbio.slivkaclient.Parameter;
 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
-import uk.ac.dundee.compbio.slivkaclient.TextField;
-
-
 
 public class SlivkaParamSet implements WsParamSetI
 {
   private SlivkaService service;
+
   private List<ArgumentI> args = new ArrayList<>();
 
-  SlivkaParamSet(SlivkaService service) throws IOException {
+  SlivkaParamSet(SlivkaService service)
+  {
     this.service = service;
-    SlivkaForm form = service.getForm();
-    for (FormField field : form.getFields())
+    for (Parameter param : service.getParameters())
     {
-      switch (field.getType()) {
-      case BOOLEAN:
-        BooleanField boolField = (BooleanField) field;
-        args.add(new BooleanOption(
-            field.getName(), field.getDescription(), field.getLabel(),
-            field.isRequired(), boolField.getDefault(), null
-        ));
-        break;
-      case TEXT:
-        TextField textField = (TextField) field;
-        args.add(new StringParameter(
-            field.getName(), field.getDescription(), field.isRequired(),
-            textField.getDefault(), textField.getDefault()
-        ));
-        break;
-      case INTEGER:
-        IntegerField intField = (IntegerField) field;
-        args.add(new IntegerParameter(
-            field.getName(), field.getDescription(), field.isRequired(),
-            intField.getDefault(), intField.getMin(), intField.getMax()
-        ));
-        break;
-      case DECIMAL:
-        DecimalField doubleField = (DecimalField) field;
-        args.add(new DoubleParameter(
-            field.getName(), field.getDescription(), field.isRequired(),
-            doubleField.getDefault(), doubleField.getMin(),
-            doubleField.getMax()
-        ));
-        break;
-      case CHOICE:
-        ChoiceField choiceField = (ChoiceField) field;
-        List<String> choices = new ArrayList<>(choiceField.getChoices());
-        if (field.hasMultipleValues()) {
-          int counter = 0;
-          for (String choice : choices) {
+      Object defaultValue = param.getDefault() instanceof List
+          ? ((List<?>) param.getDefault()).get(0)
+          : param.getDefault();
+      if (param instanceof Parameter.FlagParameter)
+      {
+        args.add(new BooleanOption(param.getId(), param.getDescription(),
+            param.getName(), param.isRequired(), (Boolean) defaultValue, null));
+      }
+      else if (param instanceof Parameter.TextParameter)
+      {
+        args.add(new StringParameter(param.getId(), param.getDescription(),
+            param.isRequired(), (String) defaultValue, (String) defaultValue));
+      }
+      else if (param instanceof Parameter.IntegerParameter)
+      {
+        Integer min = ((Parameter.IntegerParameter) param).getMin();
+        Integer max = ((Parameter.IntegerParameter) param).getMax();
+        Integer defVal = defaultValue != null
+            ? ((Number) defaultValue).intValue()
+            : null;
+        args.add(new IntegerParameter(param.getId(), param.getDescription(),
+            param.isRequired(), defVal, (min == null) ? Integer.MIN_VALUE : min,
+            (max == null) ? Integer.MAX_VALUE : max));
+      }
+      else if (param instanceof Parameter.DecimalParameter)
+      {
+        Double min = ((Parameter.DecimalParameter) param).getMin();
+        Double max = ((Parameter.DecimalParameter) param).getMax();
+        Double defVal = defaultValue != null
+            ? ((Number) defaultValue).doubleValue()
+            : null;
+        args.add(new DoubleParameter(param.getId(), param.getDescription(),
+            param.isRequired(), defVal, (min == null) ? -Double.MAX_VALUE : min,
+            (max == null) ? Double.MAX_VALUE : max));
+      }
+      else if (param instanceof Parameter.ChoiceParameter)
+      {
+        List<String> choices = ((Parameter.ChoiceParameter) param)
+            .getChoices();
+        if (param.isArray())
+        {
+          int i = 0;
+          List<?> selected = param.getDefault() != null
+              ? (List<?>) param.getDefault()
+              : Collections.EMPTY_LIST;
+          for (String choice : choices)
+          {
             args.add(new BooleanOption(
-                String.format("%s$%d", field.getName(), counter++),
-                field.getDescription(), choice, field.isRequired(),
-                choice.equals(choiceField.getDefault()), choice,
-                null
-            ));
+                String.format("%s$%d", param.getId(), i++),
+                param.getDescription(), choice, param.isRequired(),
+                selected.contains(choice), choice, null));
           }
         }
         else
         {
           args.add(new StringParameter(
-              field.getName(), field.getDescription(),
-              field.isRequired(), choiceField.getDefault(), choiceField.getDefault(),
-              choices, choices
-          ));
+              param.getId(), param.getDescription(),
+              param.isRequired(), (String) param.getDefault(),
+              (String) defaultValue, choices, choices));
         }
-        break;
-      case FILE:
-      default:
-        continue;
+      }
+      else if (param instanceof Parameter.FileParameter)
+      {
+        // skip: files are provided from sequences
+      }
+      else
+      {
+        String defaultVal = param.getDefault() != null
+            ? param.getDefault().toString()
+            : null;
+        args.add(new StringParameter(param.getId(), param.getDescription(),
+            param.isRequired(), defaultVal, defaultVal));
       }
     }
   }
@@ -101,13 +110,13 @@ public class SlivkaParamSet implements WsParamSetI
   @Override
   public String getDescription()
   {
-    return "";
+    return service.getDescription();
   }
 
   @Override
   public String[] getApplicableUrls()
   {
-    return new String[] { service.getURL().toString() };
+    return new String[] { service.getUrl().toString() };
   }
 
   @Override