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.PreferredServiceRegistry;
8 import java.beans.PropertyChangeSupport;
9 import java.io.IOError;
10 import java.io.IOException;
11 import java.net.URISyntaxException;
12 import java.util.ArrayList;
13 import java.util.List;
15 import javax.swing.JMenu;
17 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
18 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
20 public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI
22 private static SlivkaWSDiscoverer instance = null;
24 private SlivkaClient slivkaClient;
26 private SlivkaWSDiscoverer()
30 slivkaClient = new SlivkaClient(
31 "gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203);
32 } catch (URISyntaxException e)
34 throw new RuntimeException(e);
38 public static SlivkaWSDiscoverer getInstance()
42 instance = new SlivkaWSDiscoverer();
47 List<ServiceWithParameters> getServiceInstances()
49 List<ServiceWithParameters> instances = new ArrayList<>();
50 for (SlivkaService service : services)
52 for (String classifier : service.classifiers)
54 if (classifier.contains("Multiple sequence alignment"))
57 .add(new SlivkaMsaServiceInstance(slivkaClient, service));
59 else if (classifier.contains("Protein sequence analysis"))
61 instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
65 .contains("Sequence alignment analysis (conservation)"))
67 instances.add(new SlivkaAnnotationServiceInstance(slivkaClient,
76 private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
80 public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
82 JMenu slivkaMenu = new JMenu("Slivka");
83 wsmenu.add(slivkaMenu);
85 JMenu alignmentMenu = new JMenu("Sequence Alignment");
86 slivkaMenu.add(alignmentMenu);
87 JMenu disorderMenu = new JMenu("Protein sequence analysis");
88 slivkaMenu.add(disorderMenu);
89 JMenu conservationMenu = new JMenu("Conservation");
90 slivkaMenu.add(conservationMenu);
91 PreferredServiceRegistry.getRegistry().populateWSMenuEntry(
92 getServiceInstances(),
93 changeSupport, slivkaMenu, alignFrame, null);
97 List<SlivkaService>services=null;
99 volatile boolean started = false, finished = false;
101 Thread discoverer = null;
105 discoverer = Thread.currentThread();
109 services = slivkaClient.getServices();
110 } catch (IOException e)
112 throw new IOError(e);
117 public static List<ServiceWithParameters> getServices()
119 SlivkaWSDiscoverer us = getInstance();
120 if (us.services == null)
124 return us.getServiceInstances();
127 public boolean hasServices()
129 return finished == true && services != null && services.size() > 0;
132 public boolean isRunning()
134 return discoverer != null && discoverer.isAlive();