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); }; } }