1531e2d170da18c85e608e348b558291a67d6d2b
[jalview.git] / src / jalview / ws / slivkaws / SlivkaWSDiscoverer.java
1 package jalview.ws.slivkaws;
2
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;
9
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;
16
17 import javax.swing.JMenu;
18
19 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
20 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
21
22 public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
23 {
24   private static SlivkaWSDiscoverer instance = null;
25
26   private SlivkaClient slivkaClient;
27
28   private SlivkaWSDiscoverer()
29   {
30     try
31     {
32       slivkaClient = new SlivkaClient("localhost", 4954);
33     } catch (URISyntaxException e)
34     {
35       throw new RuntimeException(e);
36     }
37   }
38
39   public static SlivkaWSDiscoverer getInstance()
40   {
41     if (instance == null)
42     {
43       instance = new SlivkaWSDiscoverer();
44     }
45     return instance;
46   }
47
48   private void addMsaServiceClient(JMenu alignmentMenu,
49           SlivkaService service, AlignFrame alignFrame)
50   {
51     SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(
52             slivkaClient, service);
53     MsaWSClient client = new MsaWSClient();
54     client.attachWSMenuEntry(alignmentMenu, instance, alignFrame);
55     alignmentMenu.addSeparator();
56   }
57
58   private void addDisorderServiceClient(JMenu disorderMenu,
59           SlivkaService service, AlignFrame alignFrame)
60   {
61     SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(
62             slivkaClient, service, false);
63
64     SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
65     client.attachWSMenuEntry(disorderMenu, serviceInstance, alignFrame);
66     disorderMenu.addSeparator();
67   }
68
69   private void addConservationServiceClient(JMenu conservationMenu,
70           SlivkaService service, AlignFrame alignFrame)
71   {
72     SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(
73             slivkaClient, service, true);
74     SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
75     client.attachWSMenuEntry(conservationMenu, serviceInstance, alignFrame);
76     conservationMenu.addSeparator();
77   }
78
79   private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
80           this);
81
82   @Override
83   public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
84   {
85     JMenu slivkaMenu = new JMenu("Slivka");
86     wsmenu.add(slivkaMenu);
87
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);
94     try
95     {
96       List<ServiceWithParameters> instances = new ArrayList<>();
97       for (SlivkaService service : slivkaClient.getServices())
98       {
99         for (String classifier : service.classifiers)
100         {
101           if (classifier.contains("Multiple sequence alignment"))
102           {
103             instances.add(
104                     new SlivkaMsaServiceInstance(slivkaClient, service));
105             // addMsaServiceClient(alignmentMenu, service, alignFrame);
106           }
107           else if (classifier.contains("Protein sequence analysis"))
108           {
109             instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
110                     service, false));
111             // addDisorderServiceClient(disorderMenu, service, alignFrame);
112           }
113           else if (classifier
114                   .contains("Sequence alignment analysis (conservation)"))
115           {
116             instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
117                     service, true));
118             // addConservationServiceClient(conservationMenu, service,
119             // alignFrame);
120           }
121
122         }
123       }
124       PreferredServiceRegistry.getRegistry().populateWSMenuEntry(instances,
125               changeSupport, slivkaMenu, alignFrame, null);
126     } catch (IOException e)
127     {
128       throw new IOError(e);
129     }
130   }
131
132   @Override
133   public void run()
134   {
135
136   }
137 }