JAL-3807 - Add single sequence capabilities to jws2.JPredClient
[jalview.git] / src / jalview / ws / jws2 / JPredClient.java
1 package jalview.ws.jws2;
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.WSClient;
11 import jalview.ws.WSMenuEntryProviderI;
12 import jalview.ws.api.JPredServiceI;
13 import jalview.ws.api.ServiceWithParameters;
14
15 public class JPredClient extends WSClient
16 {
17   JPredServiceI server;
18
19   public JPredClient(ServiceWithParameters sh, String title,
20       AlignmentView alView, AlignFrame alFrame, boolean viewOnly)
21   {
22     server = (JPredServiceI) sh.getEndpoint();
23     wsInfo = setWebService(sh, false);
24     startClient(title, alView, alFrame, viewOnly);
25   }
26
27   private void startClient(String title, AlignmentView view,
28       AlignFrame frame, boolean viewOnly)
29   {
30     var msf = view.getSequences();
31     var seq = msf[0].getSeq('-');
32     int[] delMap = null;
33     if (viewOnly)
34       delMap = view.getVisibleContigMapFor(seq.gapMap());
35     var aln = new SequenceI[msf.length];
36     for (int i = 0; i < msf.length; i++)
37     {
38       aln[i] = msf[i].getSeq('-');
39     }
40     var sequenceInfo = msf.length > 1 ? SeqsetUtils.uniquify(aln, true)
41             : SeqsetUtils.SeqCharacterHash(seq);
42     if (viewOnly)
43     {
44       String seqs[] = view.getSequenceStrings('-');
45       for (int i = 0; i < msf.length; i++)
46         aln[i].setSequence(seqs[i]);
47       seq.setSequence(seqs[0]);
48     }
49     var thread = new JPredThread(wsInfo, title, server, sequenceInfo, aln,
50         delMap, view, frame, WsURL);
51     wsInfo.setthisService(thread);
52     wsInfo.setVisible(true);
53     thread.start();
54   }
55
56   // sh parameter should be moved to the WSMenuEntryProvider interface
57   public static WSMenuEntryProviderI getMenuEntryProvider(ServiceWithParameters sh)
58   {
59     return (menu, frame) -> {
60       final JMenuItem mi = new JMenuItem(sh.getName());
61       mi.setToolTipText(sh.getHostURL());
62       mi.addActionListener((event) -> {
63         var view = frame.gatherSeqOrMsaForSecStrPrediction();
64         new JPredClient(sh, frame.getTitle(), view, frame, true);
65       });
66       menu.add(mi);
67     };
68   }
69 }