/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ws.jabaws; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; import jalview.bin.Cache; import jalview.datamodel.AlignmentI; import jalview.gui.AlignFrame; import jalview.gui.Jalview2XML; import jalview.gui.JvOptionPane; import jalview.io.AnnotationFile; import jalview.io.DataSourceType; import jalview.io.FileFormat; import jalview.io.FileLoader; import jalview.io.FormatAdapter; import jalview.io.StockholmFileTest; import jalview.ws.jws2.JPred301Client; import jalview.ws.jws2.JabaParamStore; import jalview.ws.jws2.SequenceAnnotationWSClient; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.AutoCalcSetting; import java.awt.Component; import java.net.ConnectException; import java.util.ArrayList; import java.util.List; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.xml.ws.WebServiceException; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import compbio.data.msa.Category; import compbio.data.msa.JABAService; import compbio.metadata.Argument; import compbio.metadata.WrongParameterException; import compbio.ws.client.Jws2Client; import compbio.ws.client.Services; public class JpredJabaStructExportImport { @BeforeClass(alwaysRun = true) public void setUpJvOptionPane() { JvOptionPane.setInteractiveMode(false); JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION); } private static String testseqs = "examples/uniref50.fa"; private static Jws2Instance jpredws; private static AlignFrame af = null; @BeforeClass(alwaysRun = true) public static void setUpBeforeClass() throws ConnectException, WebServiceException { Cache.loadProperties("test/jalview/io/testProps.jvprops"); Cache.applicationProperties.setProperty("SHOW_ANNOTATIONS", Boolean.TRUE.toString()); Cache.applicationProperties.setProperty("SHOW_QUALITY", Boolean.FALSE.toString()); Cache.applicationProperties.setProperty("SHOW_CONSERVATION", Boolean.FALSE.toString()); Cache.applicationProperties.setProperty("SHOW_IDENTITY", Boolean.FALSE.toString()); Cache.initLogger(); getJabaws(); FileLoader fl = new FileLoader(false); af = fl.LoadFileWaitTillLoaded(testseqs, DataSourceType.FILE); assertNotNull("Couldn't load test data ('" + testseqs + "')", af); } /** * @throws WebServiceException * @throws ConnectException * */ static void getJabaws() throws ConnectException, WebServiceException { String jabaws = "http://www.compbio.dundee.ac.uk/jabaws"; JABAService service = null; for (Category category : Category.getCategories()) { for (Services srv : category.getServices()) { if ("JpredWS".equals(srv.name())) { service = Jws2Client.connect(jabaws, srv); } } } jpredws = new Jws2Instance(jabaws, "JpredWs", "Secondary Structure Prediction", "SERVICE: JpredWS version 3.0.3", service); Assert.assertNotNull(jpredws, "jpredws is null!"); } @AfterClass(alwaysRun = true) public static void tearDownAfterClass() throws Exception { if (af != null) { af.setVisible(false); af.dispose(); } } @Test(groups = { "Network" }) public void testJPredStructOneSeqOnly() { af.selectAllSequenceMenuItem_actionPerformed(null); af.getViewport() .getSelectionGroup() .addOrRemove( af.getViewport().getSelectionGroup().getSequenceAt(0), false); af.hideSelSequences_actionPerformed(null); JPred301Client jpredClient = new JPred301Client(jpredws, af, null, null); assertTrue( "Didn't find any default args to check for. Buggy implementation of hardwired arguments in client.", jpredClient.selectDefaultArgs().size() > 0); boolean success = false; af.getViewport().getCalcManager().startWorker(jpredClient); do { try { Thread.sleep(500); List args = JabaParamStore.getJabafromJwsArgs(af .getViewport() .getCalcIdSettingsFor(jpredClient.getCalcId()) .getArgumentSet()), defargs = jpredClient .selectDefaultArgs(); for (Argument rg : args) { for (Argument defg : defargs) { if (defg.equals(rg)) { success = true; } } } if (!success) { jpredClient.cancelCurrentJob(); Assert.fail("Jpred Client didn't run with hardwired default parameters."); } } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); } /* * test disabled pending completion of JAL-1601 * (JPred301Client is currently hidden in Jalview in * */ @Test(groups = { "Network" }) public void testJPredStructExport() throws InterruptedException { JPred301Client jpredClient = new JPred301Client(jpredws, af, null, null); af.getViewport().getCalcManager().startWorker(jpredClient); do { try { Thread.sleep(50); } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); synchronized (this) { wait(2000); } AlignmentI orig_alig = af.getViewport().getAlignment(); System.out.println("Alignment now has " + orig_alig.getAlignmentAnnotation().length + " annotations"); verifyAnnotationFileIO("Testing JPredWS Annotation IO", orig_alig); } protected static void verifyAnnotationFileIO(String testname, AlignmentI al) { try { // what format would be appropriate for RNAalifold annotations? String aligfileout = FileFormat.Fasta.getWriter(null).print( al.getSequencesArray(), true); String anfileout = new AnnotationFile() .printAnnotationsForAlignment(al); assertTrue( "Test " + testname + "\nAlignment annotation file was not regenerated. Null string", anfileout != null); assertTrue( "Test " + testname + "\nAlignment annotation file was not regenerated. Empty string", anfileout.length() > "JALVIEW_ANNOTATION".length()); System.out.println("Output annotation file:\n" + anfileout + "\n< opts = new ArrayList(); for (compbio.metadata.Argument rg : (List) jpredws .getRunnerConfig().getArguments()) { if (rg.getDescription().contains("emperature")) { try { rg.setValue("292"); } catch (WrongParameterException q) { Assert.fail("Couldn't set the temperature parameter " + q.getStackTrace()); } opts.add(rg); } if (rg.getDescription().contains("max")) { opts.add(rg); } } JPred301Client jpredClient = new JPred301Client(jpredws, af, null, opts); af.getViewport().getCalcManager().startWorker(jpredClient); do { try { Thread.sleep(50); } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); AutoCalcSetting oldacs = af.getViewport().getCalcIdSettingsFor( jpredClient.getCalcId()); String oldsettings = oldacs.getWsParamFile(); // write out parameters jalview.gui.AlignFrame nalf = null; assertTrue("Couldn't write out the Jar file", new Jalview2XML(false).saveAlignment(af, "testJPredWS_param.jar", "trial parameter writeout")); assertTrue("Couldn't read back the Jar file", (nalf = new Jalview2XML( false).loadJalviewAlign("testJpredWS_param.jar")) != null); if (nalf != null) { AutoCalcSetting acs = af.getViewport().getCalcIdSettingsFor( jpredClient.getCalcId()); assertTrue("Calc ID settings not recovered from viewport stash", acs.equals(oldacs)); assertTrue( "Serialised Calc ID settings not identical to those recovered from viewport stash", acs.getWsParamFile().equals(oldsettings)); JMenu nmenu = new JMenu(); new SequenceAnnotationWSClient() .attachWSMenuEntry(nmenu, jpredws, af); assertTrue("Couldn't get menu entry for service", nmenu.getItemCount() > 0); for (Component itm : nmenu.getMenuComponents()) { if (itm instanceof JMenuItem) { JMenuItem i = (JMenuItem) itm; if (i.getText().equals( jpredws.getAlignAnalysisUI().getAAconToggle())) { i.doClick(); break; } } } while (af.getViewport().isCalcInProgress()) { try { Thread.sleep(200); } catch (Exception x) { } ; } AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor( jpredClient.getCalcId()); assertTrue( "Calc ID settings after recalculation has not been recovered.", acs2.getWsParamFile().equals(oldsettings)); } } }