JAL-3070 call checkDone() ASAP to avoid race condition for threads watching state...
[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.jws2.MsaWSClient;
6 import jalview.ws.jws2.SequenceAnnotationWSClient;
7
8 import java.io.IOError;
9 import java.io.IOException;
10 import java.net.URISyntaxException;
11
12 import javax.swing.JMenu;
13
14 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
15 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
16
17 public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
18 {
19   private static SlivkaWSDiscoverer instance = null;
20
21   private SlivkaClient slivkaClient;
22
23   private SlivkaWSDiscoverer()
24   {
25     try
26     {
27       slivkaClient = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203);
28     } catch (URISyntaxException e)
29     {
30       throw new RuntimeException(e);
31     }
32   }
33
34   public static SlivkaWSDiscoverer getInstance()
35   {
36     if (instance == null)
37     {
38       instance = new SlivkaWSDiscoverer();
39     }
40     return instance;
41   }
42
43   private void addMsaServiceClient(JMenu alignmentMenu,
44           SlivkaService service, AlignFrame alignFrame)
45   {
46     SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(
47             slivkaClient, service);
48     MsaWSClient client = new MsaWSClient();
49     client.attachWSMenuEntry(alignmentMenu, instance, alignFrame);
50     alignmentMenu.addSeparator();
51   }
52
53   private void addDisorderServiceClient(JMenu disorderMenu,
54           SlivkaService service, AlignFrame alignFrame)
55   {
56     SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(
57             slivkaClient, service, false);
58     SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
59     client.attachWSMenuEntry(disorderMenu, serviceInstance, alignFrame);
60     disorderMenu.addSeparator();
61   }
62
63   private void addConservationServiceClient(JMenu conservationMenu,
64           SlivkaService service, AlignFrame alignFrame)
65   {
66     SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(
67             slivkaClient, service, true);
68     SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
69     client.attachWSMenuEntry(conservationMenu, serviceInstance, alignFrame);
70     conservationMenu.addSeparator();
71   }
72
73   @Override
74   public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
75   {
76     JMenu slivkaMenu = new JMenu("Slivka");
77     wsmenu.add(slivkaMenu);
78
79     JMenu alignmentMenu = new JMenu("Sequence Alignment");
80     slivkaMenu.add(alignmentMenu);
81     JMenu disorderMenu = new JMenu("Protein sequence analysis");
82     slivkaMenu.add(disorderMenu);
83     JMenu conservationMenu = new JMenu("Conservation");
84     slivkaMenu.add(conservationMenu);
85     try
86     {
87       for (SlivkaService service : slivkaClient.getServices())
88       {
89         for (String classifier : service.classifiers)
90         {
91           if (classifier.contains("Multiple sequence alignment"))
92           {
93             addMsaServiceClient(alignmentMenu, service, alignFrame);
94           }
95           else if (classifier.contains("Protein sequence analysis"))
96           {
97             addDisorderServiceClient(disorderMenu, service, alignFrame);
98           }
99           else if (classifier
100                   .contains("Sequence alignment analysis (conservation)"))
101           {
102             addConservationServiceClient(conservationMenu, service,
103                     alignFrame);
104           }
105
106         }
107       }
108     } catch (IOException e)
109     {
110       throw new IOError(e);
111     }
112   }
113
114   @Override
115   public void run()
116   {
117
118   }
119 }