3 import javax.swing.JMenuItem;
5 import jalview.analysis.SeqsetUtils;
6 import jalview.bin.Cache;
7 import jalview.datamodel.AlignmentView;
8 import jalview.datamodel.SequenceI;
9 import jalview.gui.AlignFrame;
10 import jalview.ws.api.JPredMutlipleAlignmentServiceI;
11 import jalview.ws.api.ServiceWithParameters;
13 public class JPredClient extends WSClient
15 JPredMutlipleAlignmentServiceI server;
17 public JPredClient(ServiceWithParameters sh, String title,
18 AlignmentView alView, AlignFrame alFrame, boolean viewOnly)
20 server = (JPredMutlipleAlignmentServiceI) sh.getEndpoint();
21 wsInfo = setWebService(sh, false);
22 startClient(title, alView, alFrame, viewOnly);
25 private void startClient(String title, AlignmentView view,
26 AlignFrame frame, boolean viewOnly)
28 var msf = view.getSequences();
29 var seq = msf[0].getSeq('-');
31 throw new RuntimeException("You need more than one sequence.");
32 var aln = new SequenceI[msf.length];
33 for (int i = 0; i < msf.length; i++)
35 aln[i] = msf[i].getSeq('-');
37 int[] delMap = viewOnly ?
38 view.getVisibleContigMapFor(seq.gapMap()) : null;
39 var sequenceInfo = SeqsetUtils.uniquify(aln, true);
40 var thread = new JPredThread(wsInfo, title, server, sequenceInfo, aln,
41 delMap, view, frame, WsURL);
42 wsInfo.setthisService(thread);
43 wsInfo.setVisible(true);
47 // sh parameter should be moved to the WSMenuEntryProvider interface
48 public static WSMenuEntryProviderI getMenuEntryProvider(ServiceWithParameters sh)
50 return (menu, frame) -> {
51 final JMenuItem mi = new JMenuItem(sh.getName());
52 mi.setToolTipText(sh.getHostURL());
53 mi.addActionListener((event) -> {
54 var view = frame.gatherSeqOrMsaForSecStrPrediction();
55 if (view.getSequences().length > 1)
57 new JPredClient(sh, frame.getTitle(), view, frame, true);
61 Cache.log.error("Single sequence not supported");