009e38856e425a7b52ad2a2c1d8ffcdd70ab5f28
[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
8 import java.awt.event.ActionEvent;
9 import java.io.IOError;
10 import java.io.IOException;
11 import java.net.URISyntaxException;
12
13 import javax.swing.JMenu;
14 import javax.swing.JMenuItem;
15
16 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
17 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
18
19 public class SlivkaWSDiscoverer
20   implements Runnable, WSMenuEntryProviderI
21 {
22   private static SlivkaWSDiscoverer instance = null;
23   private SlivkaClient client;
24
25   private SlivkaWSDiscoverer() {
26     try
27     {
28       client = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203);
29     } catch (URISyntaxException e)
30     {
31       throw new RuntimeException(e);
32     }
33   }
34
35   public static SlivkaWSDiscoverer getInstance()
36   {
37     if (instance == null) {
38                 instance = new SlivkaWSDiscoverer();
39         }
40     return instance;
41   }
42
43   @Override
44   public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
45   {
46     JMenu slivkaMenu = new JMenu("Slivka");
47     wsmenu.add(slivkaMenu);
48     JMenu categoryMenu = new JMenu("Alignment");
49     slivkaMenu.add(categoryMenu);
50
51     try
52     {
53       for (SlivkaService service: client.getServices()) {
54         msaClassifier: {
55           for (String classifier: service.classifiers) {
56             if (classifier.contains("Multiple sequence alignment")) {
57               break msaClassifier;
58             }
59           }
60           continue;
61         }
62         SlivkaWSInstance instance = new SlivkaWSInstance(client, service);
63         JMenuItem defaultEntry = new JMenuItem(String.format("%s with defaults", service.label));
64         defaultEntry.addActionListener((ActionEvent evt) -> {
65           AlignmentView msa = alignFrame.gatherSequencesForAlignment();
66           if (msa != null) {
67             new MsaWSClient(
68                 instance, alignFrame.getTitle(), msa, false, true,
69                 alignFrame.getViewport().getAlignment().getDataset(),
70                 alignFrame
71             );
72           }
73         });
74         categoryMenu.add(defaultEntry);
75         
76         JMenuItem customEntry = new JMenuItem(String.format("%s with custom parameters", service.label));
77         customEntry.addActionListener((ActionEvent evt) -> {
78           AlignmentView msa = alignFrame.gatherSequencesForAlignment();
79           if (msa != null) {
80             try
81             {
82             SlivkaParamSet paramSet = new SlivkaParamSet(service);
83               new MsaWSClient(
84                   instance, paramSet, null, true, alignFrame.getTitle(), msa, false, true,
85                   alignFrame.getViewport().getAlignment().getDataset(), alignFrame);
86             } catch (IOException exc)
87             {
88               throw new IOError(exc);
89             }
90           }
91         });
92         categoryMenu.add(customEntry);
93         
94         categoryMenu.addSeparator();
95       }
96     } catch (IOException e)
97     {
98       // TODO Auto-generated catch block
99       e.printStackTrace();
100     }
101   }
102
103   @Override
104   public void run()
105   {
106
107   }
108 }