6b3856a3f8992641bfdd7b09449cff5706c340b2
[jalview.git] / src / jalview / ws / slivkaws / SlivkaWSDiscoverer.java
1 package jalview.ws.slivkaws;
2
3 import jalview.datamodel.AlignmentView;
4 import jalview.gui.AlignFrame;
5 import jalview.ws.WSMenuEntryProviderI;
6 import jalview.ws.jws2.MsaWSClient;
7 import jalview.ws.jws2.SequenceAnnotationWSClient;
8
9 import java.awt.event.ActionEvent;
10 import java.io.IOError;
11 import java.io.IOException;
12 import java.net.URISyntaxException;
13
14 import javax.swing.JMenu;
15 import javax.swing.JMenuItem;
16
17 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
18 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
19
20 public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
21 {
22   private static SlivkaWSDiscoverer instance = null;
23
24   private SlivkaClient client;
25
26   private SlivkaWSDiscoverer()
27   {
28     try
29     {
30       client = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203);
31     } catch (URISyntaxException e)
32     {
33       throw new RuntimeException(e);
34     }
35   }
36
37   public static SlivkaWSDiscoverer getInstance()
38   {
39     if (instance == null)
40     {
41       instance = new SlivkaWSDiscoverer();
42     }
43     return instance;
44   }
45
46   @Override
47   public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
48   {
49     JMenu slivkaMenu = new JMenu("Slivka");
50     wsmenu.add(slivkaMenu);
51
52     JMenu alignmentMenu = new JMenu("Sequence Alignment");
53     slivkaMenu.add(alignmentMenu);
54     try
55     {
56       for (SlivkaService service : client.getServices())
57       {
58         msaClassifier:
59         {
60           for (String classifier : service.classifiers)
61           {
62             if (classifier.contains("Multiple sequence alignment"))
63             {
64               break msaClassifier;
65             }
66           }
67           continue;
68         }
69         SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(client, service);
70         JMenuItem defaultEntry = new JMenuItem(String.format("%s with defaults", service.label));
71         defaultEntry.addActionListener((ActionEvent evt) -> {
72           AlignmentView msa = alignFrame.gatherSequencesForAlignment();
73           if (msa != null)
74           {
75             new MsaWSClient(instance, alignFrame.getTitle(), msa, false, true,
76                 alignFrame.getViewport().getAlignment().getDataset(), alignFrame);
77           }
78         });
79         alignmentMenu.add(defaultEntry);
80
81         JMenuItem customEntry = new JMenuItem(String.format("%s with custom parameters", service.label));
82         customEntry.addActionListener((ActionEvent evt) -> {
83           AlignmentView msa = alignFrame.gatherSequencesForAlignment();
84           if (msa != null)
85           {
86             try
87             {
88               SlivkaParamSet paramSet = new SlivkaParamSet(service);
89               new MsaWSClient(instance, paramSet, null, true, alignFrame.getTitle(), msa, false, true,
90                   alignFrame.getViewport().getAlignment().getDataset(), alignFrame);
91             } catch (IOException exc)
92             {
93               throw new IOError(exc);
94             }
95           }
96         });
97         alignmentMenu.add(customEntry);
98
99         alignmentMenu.addSeparator();
100       }
101     } catch (IOException e)
102     {
103       // TODO Auto-generated catch block
104       e.printStackTrace();
105     }
106
107     JMenu disorderMenu = new JMenu("Protein sequence analysis");
108     slivkaMenu.add(disorderMenu);
109     try
110     {
111       for (SlivkaService service : client.getServices())
112       {
113         msaClassifier:
114         {
115           for (String classifier : service.classifiers)
116           {
117             if (classifier.contains("Protein sequence analysis"))
118             {
119               break msaClassifier;
120             }
121           }
122           continue;
123         }
124         JMenuItem menuEntry = new JMenuItem(String.format("%s with custom parameters", service.label));
125         disorderMenu.add(menuEntry);
126         SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(client, service);
127         menuEntry.addActionListener((ActionEvent evt) -> {
128           try
129           {
130             SlivkaParamSet paramSet = new SlivkaParamSet(service);
131             SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
132             client.initSequenceAnnotationWSClient(serviceInstance, alignFrame, paramSet, true);
133           } catch (IOException e)
134           {
135             throw new IOError(e);
136           }
137
138         });
139       }
140     } catch (IOException e)
141     {
142       throw new IOError(e);
143     }
144   }
145
146   @Override
147   public void run()
148   {
149
150   }
151 }