Updated with latest from mchmmer branch
[jalview.git] / src / jalview / hmmer / HMMERParamStore.java
diff --git a/src/jalview/hmmer/HMMERParamStore.java b/src/jalview/hmmer/HMMERParamStore.java
new file mode 100644 (file)
index 0000000..c668481
--- /dev/null
@@ -0,0 +1,225 @@
+package jalview.hmmer;
+
+import jalview.bin.Cache;
+import jalview.gui.Preferences;
+import jalview.util.MessageManager;
+import jalview.ws.params.ArgumentI;
+import jalview.ws.params.ParamDatastoreI;
+import jalview.ws.params.WsParamSetI;
+import jalview.ws.params.simple.BooleanOption;
+import jalview.ws.params.simple.IntegerParameter;
+import jalview.ws.params.simple.LogarithmicParameter;
+import jalview.ws.params.simple.Option;
+import jalview.ws.params.simple.StringParameter;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Scanner;
+
+public final class HMMERParamStore implements ParamDatastoreI
+{
+  private static final String HMMBUILD = "hmmbuild";
+
+  private static final String HMMALIGN = "hmmalign";
+
+  private static final String HMMSEARCH = "hmmsearch";
+
+  String name;
+
+  List<WsParamSetI> presets = new ArrayList<>();
+
+  private HMMERParamStore(String nam)
+  {
+    this.name = nam;
+  }
+
+  public static HMMERParamStore forBuild()
+  {
+    return new HMMERParamStore(HMMBUILD);
+  }
+
+  public static HMMERParamStore forAlign()
+  {
+    return new HMMERParamStore(HMMALIGN);
+  }
+
+  public static HMMERParamStore forSearch()
+  {
+    return new HMMERParamStore(HMMSEARCH);
+  }
+
+  @Override
+  public List<WsParamSetI> getPresets()
+  {
+    return presets;
+  }
+
+  @Override
+  public WsParamSetI getPreset(String nam)
+  {
+    return null;
+  }
+
+  @Override
+  public List<ArgumentI> getServiceParameters()
+  {
+    List<ArgumentI> args = new ArrayList<>();
+    switch (name)
+    {
+    case HMMSEARCH:
+      getHMMSearchParams(args);
+      break;
+    case HMMALIGN:
+      getHMMAlignParams(args);
+      break;
+    case HMMBUILD:
+      getHMMBuildParams(args);
+      break;
+    default:
+    }
+
+    return args;
+  }
+
+  private void getHMMSearchParams(List<ArgumentI> args)
+  {
+    args.add(new IntegerParameter(
+            MessageManager.getString("label.number_of_results"),
+            MessageManager.getString("label.number_of_results_desc"), true,
+            100, 0, 100000));
+    String names = Cache.getProperty(Preferences.HMMSEARCH_DBS);
+    if (names != null && !names.isEmpty())
+    {
+      Collection<String> databases = new ArrayList<>();
+      databases.add(MessageManager.getString("label.this_alignment"));
+      Scanner nameScanner = new Scanner(names);
+
+      if (nameScanner.hasNext())
+      {
+        while (nameScanner.hasNext())
+        {
+          String next = nameScanner.next();
+          if ("null".equals(next))
+          {
+            Cache.setProperty(Preferences.HMMSEARCH_DBS, "");
+            Cache.setProperty(Preferences.HMMSEARCH_DB_PATHS, "");
+          }
+          else
+          {
+            databases.add(next);
+          }
+        }
+      }
+      nameScanner.close();
+      args.add(new Option(MessageManager.getString("label.database"),
+              MessageManager.getString("label.database_for_hmmsearch"),
+              true, MessageManager.getString("label.this_alignment"),
+              MessageManager.getString("label.this_alignment"), databases,
+              null));
+    }
+    args.add(new BooleanOption(
+            MessageManager.getString("label.auto_align_seqs"),
+            MessageManager.getString("label.auto_align_seqs_desc"), false,
+            false, true, null));
+    args.add(new BooleanOption(
+            MessageManager.getString("label.use_accessions"),
+            MessageManager.getString("label.use_accessions_desc"), false,
+            false, true, null));
+    args.add(new BooleanOption(
+            MessageManager.getString("label.trim_termini"),
+            MessageManager.getString("label.trim_termini_desc"), false,
+            false, true, null));
+    args.add(new LogarithmicParameter(
+            MessageManager.getString("label.seq_e_value"),
+            MessageManager.getString("label.seq_e_value_desc"), false, -3d,
+            -37.92977945, 1d, 10d));
+    /*
+    args.add(new DoubleParameter(
+            MessageManager.getString("label.seq_score"),
+            MessageManager.getString("label.seq_score_desc"), false,
+            0d, 0d, 10000d));
+       */
+    args.add(new LogarithmicParameter(
+            MessageManager.getString("label.dom_e_value_desc"),
+            MessageManager.getString("label.dom_e_value_desc"), false, -3d,
+            -37.92977945, 1d, 10d));
+    /*
+    args.add(new DoubleParameter(
+            MessageManager.getString("label.dom_score"),
+            MessageManager.getString("label.dom_score_desc"), false, 0d,
+            0d,
+            10000d));
+            */
+  }
+
+  private void getHMMAlignParams(List<ArgumentI> args)
+  {
+    args.add(new BooleanOption(
+            MessageManager.getString("label.trim_termini"),
+            MessageManager.getString("label.trim_termini_desc"),
+            false, false, true, null));
+  }
+
+  private void getHMMBuildParams(List<ArgumentI> args)
+  {
+    args.add(new StringParameter(MessageManager.getString("label.hmm_name"),
+            MessageManager.getString("label.hmm_name_desc"), true, ""));
+    // todo only enable Use Reference Annotation if RF is present
+    args.add(new BooleanOption(
+            MessageManager.getString("label.use_reference"),
+            MessageManager.getString("label.use_reference_desc"), true,
+            true, true, null));
+
+    Collection<String> options = new ArrayList<>();
+    options.add(MessageManager.getString("label.alignment"));
+    options.add(MessageManager.getString("label.groups_and_alignment"));
+    options.add(MessageManager.getString("label.groups"));
+    options.add(MessageManager.getString("label.selected_group"));
+
+    args.add(new Option(MessageManager.getString("label.hmmbuild_for"),
+            MessageManager.getString("label.hmmbuild_for_desc"), true,
+            MessageManager.getString("label.alignment"),
+            MessageManager.getString("label.alignment"), options, null));
+  }
+
+  @Override
+  public boolean presetExists(String forName)
+  {
+    return false;
+  }
+
+  @Override
+  public void deletePreset(String forName)
+  {
+  }
+
+  @Override
+  public void storePreset(String presetName, String text,
+          List<ArgumentI> jobParams)
+  {
+  }
+
+  @Override
+  public void updatePreset(String oldName, String presetName, String text,
+          List<ArgumentI> jobParams)
+  {
+  }
+
+  @Override
+  public WsParamSetI parseServiceParameterFile(String forName,
+          String description, String[] serviceURL, String parameters)
+          throws IOException
+  {
+    return null;
+  }
+
+  @Override
+  public String generateServiceParameterFile(WsParamSetI pset)
+          throws IOException
+  {
+    return null;
+  }
+
+}