X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Fslivkaws%2FSlivkaWSDiscoverer.java;h=2b4a95818a37f7e6ee662ad851288b4dcd1bf704;hb=909f6b929c3940e68dcb1835755f43428c475c72;hp=dfa3d89d76fa59e2e7b88587e001e4b94152aeb8;hpb=883754873d00b3c3d4a2bf9c96ef352d20fa4d72;p=jalview.git diff --git a/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java b/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java index dfa3d89..2b4a958 100644 --- a/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java +++ b/src/jalview/ws/slivkaws/SlivkaWSDiscoverer.java @@ -1,89 +1,153 @@ 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; -public class SlivkaWSDiscoverer - implements Runnable, WSMenuEntryProviderI +public class SlivkaWSDiscoverer implements Runnable, WSMenuEntryProviderI { private static SlivkaWSDiscoverer instance = null; - private SlivkaClient client; - private ClustaloWS clustalo; - private SlivkaWSDiscoverer() { + private SlivkaClient slivkaClient; + + private SlivkaWSDiscoverer() + { try { - client = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203); + slivkaClient = new SlivkaClient("https://www.compbio.dundee.ac.uk/slivka"); } catch (URISyntaxException e) { throw new RuntimeException(e); } - clustalo = new ClustaloWS(client); } public static SlivkaWSDiscoverer getInstance() { - if (instance == null) { - instance = new SlivkaWSDiscoverer(); - } + if (instance == null) + { + instance = new SlivkaWSDiscoverer(); + } 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 submenu = new JMenu("Slivka"); - - JMenuItem noParamMenuItem = new JMenuItem("ClustalO with defaults"); - noParamMenuItem.addActionListener((ActionEvent e) -> { - AlignmentView msa = alignFrame.gatherSequencesForAlignment(); - if (msa != null) - { - new MsaWSClient( - clustalo, alignFrame.getTitle(), msa, false, true, - alignFrame.getViewport().getAlignment().getDataset(), - alignFrame); - } - }); - submenu.add(noParamMenuItem); - - JMenuItem parametrisedMenuItem = new JMenuItem("ClustalO with custom parameters"); - parametrisedMenuItem.addActionListener((ActionEvent evt) -> { - AlignmentView msa = alignFrame.gatherSequencesForAlignment(); - if (msa != null) + List instances = new ArrayList<>(); + for (SlivkaService service : services) + { + ServiceWithParameters newinstance = null; + for (String classifier : service.classifiers) { - try + if (classifier.contains("Multiple sequence alignment")) + { + // MSA services always overwrite + newinstance = new SlivkaMsaServiceInstance(slivkaClient, service); + } + if (classifier.contains("Protein sequence analysis")) { - SlivkaParamSet paramSet = new SlivkaParamSet(clustalo.getService()); - new MsaWSClient( - clustalo, paramSet, null, true, alignFrame.getTitle(), msa, false, true, - alignFrame.getViewport().getAlignment().getDataset(), alignFrame - ); - } catch (IOException e) + if (newinstance == null) + { + newinstance = (new SlivkaAnnotationServiceInstance( + slivkaClient, + + service, false)); + } + } + + if (classifier + .contains("Sequence alignment analysis (conservation)")) { - e.printStackTrace(); + // always overwrite other instances + newinstance = new SlivkaAnnotationServiceInstance(slivkaClient, + service, true); } } - }); - submenu.add(parametrisedMenuItem); + if (newinstance != null) + { + instances.add(newinstance); + } + } + return instances; + } + + private PropertyChangeSupport changeSupport = new PropertyChangeSupport( + this); - wsmenu.add(submenu); + @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(); } }