X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fslivkaws%2FSlivkaWSDiscoverer.java;h=1b3a273519f2d7f3507a0d19bd902245d7544d59;hb=354311765aa6a7b597da92ef319b8b03191eba8e;hp=e9d0d53de2b98ca7dbe84dff83fa317de6cbf5b4;hpb=450e45b30f7bd3913fca34511e534fec955b8195;p=jalview.git diff --git a/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java b/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java index e9d0d53..1b3a273 100644 --- a/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java +++ b/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java @@ -1,17 +1,18 @@ package jalview.ws.slivkaws; -import jalview.datamodel.AlignmentView; import jalview.gui.AlignFrame; import jalview.ws.WSMenuEntryProviderI; -import jalview.ws.jws2.MsaWSClient; +import jalview.ws.api.ServiceWithParameters; +import jalview.ws.jws2.PreferredServiceRegistry; -import java.awt.event.ActionEvent; +import java.beans.PropertyChangeSupport; import java.io.IOError; import java.io.IOException; import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.List; import javax.swing.JMenu; -import javax.swing.JMenuItem; import uk.ac.dundee.compbio.slivkaclient.SlivkaClient; import uk.ac.dundee.compbio.slivkaclient.SlivkaService; @@ -20,13 +21,13 @@ public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI { private static SlivkaWSDiscoverer instance = null; - private SlivkaClient client; + private SlivkaClient slivkaClient; private SlivkaWSDiscoverer() { try { - client = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203); + slivkaClient = new SlivkaClient("http://www.compbio.dundee.ac.uk/slivka"); } catch (URISyntaxException e) { throw new RuntimeException(e); @@ -42,71 +43,111 @@ public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI return instance; } - @Override - public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame) + /** + * TODO: tests needed for logic for determining type of each discovered + * service. Then reimplement this routine ! + * + * @return (MSA instances, one AAUI type instance, and the remaining all + * sequence analysis instances taking 1 sequence only) + */ + List getServiceInstances() { - JMenu slivkaMenu = new JMenu("Slivka"); - wsmenu.add(slivkaMenu); - JMenu categoryMenu = new JMenu("Alignment"); - slivkaMenu.add(categoryMenu); - - try + List instances = new ArrayList<>(); + for (SlivkaService service : services) { - for (SlivkaService service : client.getServices()) + ServiceWithParameters newinstance = null; + for (String classifier : service.classifiers) { - msaClassifier: + if (classifier.contains("Multiple sequence alignment")) { - for (String classifier : service.classifiers) - { - if (classifier.contains("Multiple sequence alignment")) - { - break msaClassifier; - } - } - continue; + // MSA services always overwrite + newinstance = new SlivkaMsaServiceInstance(slivkaClient, service); } - SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance(client, service); - JMenuItem defaultEntry = new JMenuItem(String.format("%s with defaults", service.label)); - defaultEntry.addActionListener((ActionEvent evt) -> { - AlignmentView msa = alignFrame.gatherSequencesForAlignment(); - if (msa != null) - { - new MsaWSClient(instance, alignFrame.getTitle(), msa, false, true, - alignFrame.getViewport().getAlignment().getDataset(), alignFrame); - } - }); - categoryMenu.add(defaultEntry); - - JMenuItem customEntry = new JMenuItem(String.format("%s with custom parameters", service.label)); - customEntry.addActionListener((ActionEvent evt) -> { - AlignmentView msa = alignFrame.gatherSequencesForAlignment(); - if (msa != null) - { - try - { - SlivkaParamSet paramSet = new SlivkaParamSet(service); - new MsaWSClient(instance, paramSet, null, true, alignFrame.getTitle(), msa, false, true, - alignFrame.getViewport().getAlignment().getDataset(), alignFrame); - } catch (IOException exc) + if (classifier.contains("Protein sequence analysis")) + { + if (newinstance == null) { - throw new IOError(exc); + newinstance = (new SlivkaAnnotationServiceInstance( + slivkaClient, + + service, false)); } } - }); - categoryMenu.add(customEntry); - categoryMenu.addSeparator(); + if (classifier + .contains("Sequence alignment analysis (conservation)")) + { + // always overwrite other instances + newinstance = new SlivkaAnnotationServiceInstance(slivkaClient, + service, true); + } + } + if (newinstance != null) + { + instances.add(newinstance); } - } catch (IOException e) - { - // TODO Auto-generated catch block - e.printStackTrace(); } + return instances; } + private PropertyChangeSupport changeSupport = new PropertyChangeSupport( + this); + + @Override + public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame) + { + JMenu slivkaMenu = new JMenu("Slivka"); + wsmenu.add(slivkaMenu); + + JMenu alignmentMenu = new JMenu("Sequence Alignment"); + slivkaMenu.add(alignmentMenu); + JMenu disorderMenu = new JMenu("Protein sequence analysis"); + slivkaMenu.add(disorderMenu); + JMenu conservationMenu = new JMenu("Conservation"); + slivkaMenu.add(conservationMenu); + PreferredServiceRegistry.getRegistry().populateWSMenuEntry( + getServiceInstances(), + changeSupport, slivkaMenu, alignFrame, null); + + } + + Listservices=null; + + volatile boolean started = false, finished = false; + + Thread discoverer = null; @Override public void run() { + discoverer = Thread.currentThread(); + started = true; + try + { + services = slivkaClient.getServices(); + } catch (IOException e) + { + throw new IOError(e); + } + finished = true; + } + + public static List getServices() + { + SlivkaWSDiscoverer us = getInstance(); + if (us.services == null) + { + us.run(); + } + return us.getServiceInstances(); + } + public boolean hasServices() + { + return finished == true && services != null && services.size() > 0; + } + + public boolean isRunning() + { + return discoverer != null && discoverer.isAlive(); } }