f431a0c62717127f81af0a7cec4844d71c46cdc2
[jalview.git] / src / jalview / ws / JPredClient.java
1 package jalview.ws;
2
3 import javax.swing.JMenuItem;
4
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;
12
13 public class JPredClient extends WSClient
14 {
15   JPredMutlipleAlignmentServiceI server;
16
17   public JPredClient(ServiceWithParameters sh, String title,
18       AlignmentView alView, AlignFrame alFrame, boolean viewOnly)
19   {
20     server = (JPredMutlipleAlignmentServiceI) sh.getEndpoint();
21     wsInfo = setWebService(sh, false);
22     startClient(title, alView, alFrame, viewOnly);
23   }
24
25   private void startClient(String title, AlignmentView view,
26       AlignFrame frame, boolean viewOnly)
27   {
28     var msf = view.getSequences();
29     var seq = msf[0].getSeq('-');
30     if (msf.length <= 1)
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++)
34     {
35       aln[i] = msf[i].getSeq('-');
36     }
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);
44     thread.start();
45   }
46
47   // sh parameter should be moved to the WSMenuEntryProvider interface
48   public static WSMenuEntryProviderI getMenuEntryProvider(ServiceWithParameters sh)
49   {
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)
56         {
57           new JPredClient(sh, frame.getTitle(), view, frame, true);
58         }
59         else
60         {
61           Cache.log.error("Single sequence not supported");
62         }
63       });
64       menu.add(mi);
65     };
66   }
67 }