JAL-3807 - Add single sequence capabilities to jws2.JPredClient
[jalview.git] / src / jalview / ws / jws2 / JPredClient.java
index 68bcb6c..1413dfe 100644 (file)
@@ -9,17 +9,17 @@ import jalview.datamodel.SequenceI;
 import jalview.gui.AlignFrame;
 import jalview.ws.WSClient;
 import jalview.ws.WSMenuEntryProviderI;
-import jalview.ws.api.JPredMutlipleAlignmentServiceI;
+import jalview.ws.api.JPredServiceI;
 import jalview.ws.api.ServiceWithParameters;
 
 public class JPredClient extends WSClient
 {
-  JPredMutlipleAlignmentServiceI server;
+  JPredServiceI server;
 
   public JPredClient(ServiceWithParameters sh, String title,
       AlignmentView alView, AlignFrame alFrame, boolean viewOnly)
   {
-    server = (JPredMutlipleAlignmentServiceI) sh.getEndpoint();
+    server = (JPredServiceI) sh.getEndpoint();
     wsInfo = setWebService(sh, false);
     startClient(title, alView, alFrame, viewOnly);
   }
@@ -29,16 +29,23 @@ public class JPredClient extends WSClient
   {
     var msf = view.getSequences();
     var seq = msf[0].getSeq('-');
-    if (msf.length <= 1)
-      throw new RuntimeException("You need more than one sequence.");
+    int[] delMap = null;
+    if (viewOnly)
+      delMap = view.getVisibleContigMapFor(seq.gapMap());
     var aln = new SequenceI[msf.length];
     for (int i = 0; i < msf.length; i++)
     {
       aln[i] = msf[i].getSeq('-');
     }
-    int[] delMap = viewOnly ?
-      view.getVisibleContigMapFor(seq.gapMap()) : null;
-    var sequenceInfo = SeqsetUtils.uniquify(aln, true);
+    var sequenceInfo = msf.length > 1 ? SeqsetUtils.uniquify(aln, true)
+            : SeqsetUtils.SeqCharacterHash(seq);
+    if (viewOnly)
+    {
+      String seqs[] = view.getSequenceStrings('-');
+      for (int i = 0; i < msf.length; i++)
+        aln[i].setSequence(seqs[i]);
+      seq.setSequence(seqs[0]);
+    }
     var thread = new JPredThread(wsInfo, title, server, sequenceInfo, aln,
         delMap, view, frame, WsURL);
     wsInfo.setthisService(thread);
@@ -54,14 +61,7 @@ public class JPredClient extends WSClient
       mi.setToolTipText(sh.getHostURL());
       mi.addActionListener((event) -> {
         var view = frame.gatherSeqOrMsaForSecStrPrediction();
-        if (view.getSequences().length > 1)
-        {
-          new JPredClient(sh, frame.getTitle(), view, frame, true);
-        }
-        else
-        {
-          Cache.log.error("Single sequence not supported");
-        }
+        new JPredClient(sh, frame.getTitle(), view, frame, true);
       });
       menu.add(mi);
     };