1 package jalview.ws.slivkaws;
3 import jalview.gui.AlignFrame;
4 import jalview.ws.WSMenuEntryProviderI;
5 import jalview.ws.api.ServiceWithParameters;
6 import jalview.ws.jws2.MsaWSClient;
7 import jalview.ws.jws2.PreferredServiceRegistry;
8 import jalview.ws.jws2.SequenceAnnotationWSClient;
10 import java.beans.PropertyChangeSupport;
11 import java.io.IOError;
12 import java.io.IOException;
13 import java.net.URISyntaxException;
14 import java.util.ArrayList;
15 import java.util.List;
17 import javax.swing.JMenu;
19 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
20 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
22 public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
24 private static SlivkaWSDiscoverer instance = null;
26 private SlivkaClient slivkaClient;
28 private SlivkaWSDiscoverer()
32 slivkaClient = new SlivkaClient("localhost", 4954);
33 } catch (URISyntaxException e)
35 throw new RuntimeException(e);
39 public static SlivkaWSDiscoverer getInstance()
43 instance = new SlivkaWSDiscoverer();
48 private void addMsaServiceClient(JMenu alignmentMenu,
49 SlivkaService service, AlignFrame alignFrame)
51 SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(
52 slivkaClient, service);
53 MsaWSClient client = new MsaWSClient();
54 client.attachWSMenuEntry(alignmentMenu, instance, alignFrame);
55 alignmentMenu.addSeparator();
58 private void addDisorderServiceClient(JMenu disorderMenu,
59 SlivkaService service, AlignFrame alignFrame)
61 SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(
62 slivkaClient, service, false);
64 SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
65 client.attachWSMenuEntry(disorderMenu, serviceInstance, alignFrame);
66 disorderMenu.addSeparator();
69 private void addConservationServiceClient(JMenu conservationMenu,
70 SlivkaService service, AlignFrame alignFrame)
72 SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(
73 slivkaClient, service, true);
74 SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
75 client.attachWSMenuEntry(conservationMenu, serviceInstance, alignFrame);
76 conservationMenu.addSeparator();
79 private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
83 public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
85 JMenu slivkaMenu = new JMenu("Slivka");
86 wsmenu.add(slivkaMenu);
88 JMenu alignmentMenu = new JMenu("Sequence Alignment");
89 slivkaMenu.add(alignmentMenu);
90 JMenu disorderMenu = new JMenu("Protein sequence analysis");
91 slivkaMenu.add(disorderMenu);
92 JMenu conservationMenu = new JMenu("Conservation");
93 slivkaMenu.add(conservationMenu);
96 List<ServiceWithParameters> instances = new ArrayList<>();
97 for (SlivkaService service : slivkaClient.getServices())
99 for (String classifier : service.classifiers)
101 if (classifier.contains("Multiple sequence alignment"))
104 new SlivkaMsaServiceInstance(slivkaClient, service));
105 // addMsaServiceClient(alignmentMenu, service, alignFrame);
107 else if (classifier.contains("Protein sequence analysis"))
109 instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
111 // addDisorderServiceClient(disorderMenu, service, alignFrame);
114 .contains("Sequence alignment analysis (conservation)"))
116 instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
118 // addConservationServiceClient(conservationMenu, service,
124 PreferredServiceRegistry.getRegistry().populateWSMenuEntry(instances,
125 changeSupport, slivkaMenu, alignFrame, null);
126 } catch (IOException e)
128 throw new IOError(e);