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();
48 * TODO: tests needed for logic for determining type of each discovered
49 * service. Then reimplement this routine !
51 * @return (MSA instances, one AAUI type instance, and the remaining all
52 * sequence analysis instances taking 1 sequence only)
54 List<ServiceWithParameters> getServiceInstances()
56 List<ServiceWithParameters> instances = new ArrayList<>();
57 for (SlivkaService service : services)
59 ServiceWithParameters newinstance = null;
60 for (String classifier : service.classifiers)
62 if (classifier.contains("Multiple sequence alignment"))
64 // MSA services always overwrite
65 newinstance = new SlivkaMsaServiceInstance(slivkaClient, service);
67 if (classifier.contains("Protein sequence analysis"))
69 if (newinstance == null)
71 newinstance = (new SlivkaAnnotationServiceInstance(
79 .contains("Sequence alignment analysis (conservation)"))
81 // always overwrite other instances
82 newinstance = new SlivkaAnnotationServiceInstance(slivkaClient,
86 if (newinstance != null)
88 instances.add(newinstance);
94 private PropertyChangeSupport changeSupport = new PropertyChangeSupport(
98 public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame)
100 JMenu slivkaMenu = new JMenu("Slivka");
101 wsmenu.add(slivkaMenu);
103 JMenu alignmentMenu = new JMenu("Sequence Alignment");
104 slivkaMenu.add(alignmentMenu);
105 JMenu disorderMenu = new JMenu("Protein sequence analysis");
106 slivkaMenu.add(disorderMenu);
107 JMenu conservationMenu = new JMenu("Conservation");
108 slivkaMenu.add(conservationMenu);
109 PreferredServiceRegistry.getRegistry().populateWSMenuEntry(
110 getServiceInstances(),
111 changeSupport, slivkaMenu, alignFrame, null);
115 List<SlivkaService>services=null;
117 volatile boolean started = false, finished = false;
119 Thread discoverer = null;
123 discoverer = Thread.currentThread();
127 services = slivkaClient.getServices();
128 } catch (IOException e)
130 throw new IOError(e);
135 public static List<ServiceWithParameters> getServices()
137 SlivkaWSDiscoverer us = getInstance();
138 if (us.services == null)
142 return us.getServiceInstances();
145 public boolean hasServices()
147 return finished == true && services != null && services.size() > 0;
150 public boolean isRunning()
152 return discoverer != null && discoverer.isAlive();