Merge branch 'bug/JAL-3807_jpred-with-slivka' into alpha/JAL-3066_Jalview_212_slivka...
[jalview.git] / src / jalview / ws / jws2 / JPredClient.java
diff --git a/src/jalview/ws/jws2/JPredClient.java b/src/jalview/ws/jws2/JPredClient.java
new file mode 100644 (file)
index 0000000..1413dfe
--- /dev/null
@@ -0,0 +1,69 @@
+package jalview.ws.jws2;
+
+import javax.swing.JMenuItem;
+
+import jalview.analysis.SeqsetUtils;
+import jalview.bin.Cache;
+import jalview.datamodel.AlignmentView;
+import jalview.datamodel.SequenceI;
+import jalview.gui.AlignFrame;
+import jalview.ws.WSClient;
+import jalview.ws.WSMenuEntryProviderI;
+import jalview.ws.api.JPredServiceI;
+import jalview.ws.api.ServiceWithParameters;
+
+public class JPredClient extends WSClient
+{
+  JPredServiceI server;
+
+  public JPredClient(ServiceWithParameters sh, String title,
+      AlignmentView alView, AlignFrame alFrame, boolean viewOnly)
+  {
+    server = (JPredServiceI) sh.getEndpoint();
+    wsInfo = setWebService(sh, false);
+    startClient(title, alView, alFrame, viewOnly);
+  }
+
+  private void startClient(String title, AlignmentView view,
+      AlignFrame frame, boolean viewOnly)
+  {
+    var msf = view.getSequences();
+    var seq = msf[0].getSeq('-');
+    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('-');
+    }
+    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);
+    wsInfo.setVisible(true);
+    thread.start();
+  }
+
+  // sh parameter should be moved to the WSMenuEntryProvider interface
+  public static WSMenuEntryProviderI getMenuEntryProvider(ServiceWithParameters sh)
+  {
+    return (menu, frame) -> {
+      final JMenuItem mi = new JMenuItem(sh.getName());
+      mi.setToolTipText(sh.getHostURL());
+      mi.addActionListener((event) -> {
+        var view = frame.gatherSeqOrMsaForSecStrPrediction();
+        new JPredClient(sh, frame.getTitle(), view, frame, true);
+      });
+      menu.add(mi);
+    };
+  }
+}