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