package jalview.ws; 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.api.JPredMutlipleAlignmentServiceI; import jalview.ws.api.ServiceWithParameters; public class JPredClient extends WSClient { JPredMutlipleAlignmentServiceI server; public JPredClient(ServiceWithParameters sh, String title, AlignmentView alView, AlignFrame alFrame, boolean viewOnly) { server = (JPredMutlipleAlignmentServiceI) 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('-'); if (msf.length <= 1) throw new RuntimeException("You need more than one sequence."); 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 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(); if (view.getSequences().length > 1) { new JPredClient(sh, frame.getTitle(), view, frame, true); } else { Cache.log.error("Single sequence not supported"); } }); menu.add(mi); }; } }