JAL-3066 Sequence annotation services.
[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   @Override
44   public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
45   {
46     JMenu slivkaMenu = new JMenu("Slivka");
47     wsmenu.add(slivkaMenu);
48
49     JMenu alignmentMenu = new JMenu("Sequence Alignment");
50     slivkaMenu.add(alignmentMenu);
51     try
52     {
53       for (SlivkaService service : slivkaClient.getServices())
54       {
55         msaClassifier:
56         {
57           for (String classifier : service.classifiers)
58           {
59             if (classifier.contains("Multiple sequence alignment"))
60             {
61               break msaClassifier;
62             }
63           }
64           continue;
65         }
66         SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(slivkaClient, service);
67         MsaWSClient client = new MsaWSClient();
68         client.attachWSMenuEntry(alignmentMenu, instance, alignFrame);
69         alignmentMenu.addSeparator();
70       }
71     } catch (IOException e)
72     {
73       // TODO Auto-generated catch block
74       e.printStackTrace();
75     }
76
77     JMenu disorderMenu = new JMenu("Protein sequence analysis");
78     slivkaMenu.add(disorderMenu);
79     try
80     {
81       for (SlivkaService service : slivkaClient.getServices())
82       {
83         msaClassifier:
84         {
85           for (String classifier : service.classifiers)
86           {
87             if (classifier.contains("Protein sequence analysis"))
88             {
89               break msaClassifier;
90             }
91           }
92           continue;
93         }
94         SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance(slivkaClient, service);
95         SequenceAnnotationWSClient client = new SequenceAnnotationWSClient();
96         client.attachWSMenuEntry(disorderMenu, serviceInstance, alignFrame);
97         disorderMenu.addSeparator();
98       }
99     } catch (IOException e)
100     {
101       throw new IOError(e);
102     }
103   }
104
105   @Override
106   public void run()
107   {
108
109   }
110 }