package jalview.ws.slivkaws; import jalview.datamodel.AlignmentView; import jalview.gui.AlignFrame; import jalview.ws.WSMenuEntryProviderI; import jalview.ws.jws2.MsaWSClient; import java.awt.event.ActionEvent; import java.io.IOError; import java.io.IOException; import java.net.URISyntaxException; 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 { private static SlivkaWSDiscoverer instance = null; private SlivkaClient client; private SlivkaWSDiscoverer() { try { client = new SlivkaClient("gjb-www-1.cluster.lifesci.dundee.ac.uk", 3203); } catch (URISyntaxException e) { throw new RuntimeException(e); } } public static SlivkaWSDiscoverer getInstance() { if (instance == null) { instance = new SlivkaWSDiscoverer(); } return instance; } @Override public void attachWSMenuEntry(JMenu wsmenu, final AlignFrame alignFrame) { JMenu slivkaMenu = new JMenu("Slivka"); wsmenu.add(slivkaMenu); JMenu categoryMenu = new JMenu("Alignment"); slivkaMenu.add(categoryMenu); try { for (SlivkaService service : client.getServices()) { msaClassifier: { for (String classifier : service.classifiers) { if (classifier.contains("Multiple sequence alignment")) { break msaClassifier; } } continue; } 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) { throw new IOError(exc); } } }); categoryMenu.add(customEntry); categoryMenu.addSeparator(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { } }