--- /dev/null
+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);
+ };
+ }
+}