package jalview.ws.slivkaws; import jalview.gui.AlignFrame; import jalview.ws.WSMenuEntryProviderI; import jalview.ws.jws2.MsaWSClient; import jalview.ws.jws2.SequenceAnnotationWSClient; import java.io.IOError; import java.io.IOException; import java.net.URISyntaxException; import javax.swing.JMenu; 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 slivkaClient; private SlivkaWSDiscoverer() { try { slivkaClient = 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; } private void addMsaServiceClient(JMenu alignmentMenu, SlivkaService service, AlignFrame alignFrame) { SlivkaMsaServiceInstance instance = new SlivkaMsaServiceInstance( slivkaClient, service); MsaWSClient client = new MsaWSClient(); client.attachWSMenuEntry(alignmentMenu, instance, alignFrame); alignmentMenu.addSeparator(); } private void addDisorderServiceClient(JMenu disorderMenu, SlivkaService service, AlignFrame alignFrame) { SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance( slivkaClient, service, false); SequenceAnnotationWSClient client = new SequenceAnnotationWSClient(); client.attachWSMenuEntry(disorderMenu, serviceInstance, alignFrame); disorderMenu.addSeparator(); } private void addConservationServiceClient(JMenu conservationMenu, SlivkaService service, AlignFrame alignFrame) { SlivkaAnnotationServiceInstance serviceInstance = new SlivkaAnnotationServiceInstance( slivkaClient, service, true); SequenceAnnotationWSClient client = new SequenceAnnotationWSClient(); client.attachWSMenuEntry(conservationMenu, serviceInstance, alignFrame); conservationMenu.addSeparator(); } @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); try { for (SlivkaService service : slivkaClient.getServices()) { for (String classifier : service.classifiers) { if (classifier.contains("Multiple sequence alignment")) { addMsaServiceClient(alignmentMenu, service, alignFrame); } else if (classifier.contains("Protein sequence analysis")) { addDisorderServiceClient(disorderMenu, service, alignFrame); } else if (classifier .contains("Sequence alignment analysis (conservation)")) { addConservationServiceClient(conservationMenu, service, alignFrame); } } } } catch (IOException e) { throw new IOError(e); } } @Override public void run() { } }