/* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) * Copyright (C) 2015 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.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.gui.Jalview2XML; import jalview.io.AnnotationFile; import jalview.io.FormatAdapter; import jalview.io.StockholmFileTest; import jalview.ws.jws2.Jws2Discoverer; import jalview.ws.jws2.RNAalifoldClient; import jalview.ws.jws2.SequenceAnnotationWSClient; import jalview.ws.jws2.jabaws2.Jws2Instance; import jalview.ws.params.AutoCalcSetting; import java.awt.Component; import java.util.ArrayList; import java.util.List; import javax.swing.JMenu; import javax.swing.JMenuItem; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import compbio.metadata.WrongParameterException; public class RNAStructExportImport { public static String testseqs = "examples/RF00031_folded.stk"; public static Jws2Discoverer disc; public static Jws2Instance rnaalifoldws; jalview.ws.jws2.RNAalifoldClient alifoldClient; public static jalview.gui.AlignFrame af = null; @BeforeClass(alwaysRun = true) public static void setUpBeforeClass() throws Exception { jalview.bin.Cache.initLogger(); disc = JalviewJabawsTestUtils.getJabawsDiscoverer(false); for (Jws2Instance svc : disc.getServices()) { if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws")) { rnaalifoldws = svc; } } System.out.println("State of rnaalifoldws: " + rnaalifoldws); if (rnaalifoldws == null) { Assert.fail("no web service"); } jalview.io.FileLoader fl = new jalview.io.FileLoader(false); af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.FormatAdapter.FILE); assertNotNull("Couldn't load test data ('" + testseqs + "')", af); // remove any existing annotation List aal = new ArrayList(); for (AlignmentAnnotation rna : af.getViewport().getAlignment() .getAlignmentAnnotation()) { if (rna.isRNA()) { aal.add(rna); } } for (AlignmentAnnotation rna : aal) { af.getViewport().getAlignment().deleteAnnotation(rna); } af.getViewport().alignmentChanged(af.alignPanel); // why is af.alignPanel // public? } @AfterClass public static void tearDownAfterClass() throws Exception { if (af != null) { af.setVisible(false); af.dispose(); } } @Test(groups = { "Functional" }) public void testRNAAliFoldValidStructure() { alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null); af.getViewport().getCalcManager().startWorker(alifoldClient); do { try { Thread.sleep(50); } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); AlignmentI orig_alig = af.getViewport().getAlignment(); for (AlignmentAnnotation aa : orig_alig.getAlignmentAnnotation()) { if (alifoldClient.involves(aa)) { if (aa.isRNA()) { assertTrue( "Did not create valid structure from RNAALiFold prediction", aa.isValidStruc()); } } } } @Test(groups = { "Functional" }) public void testRNAStructExport() { alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null); af.getViewport().getCalcManager().startWorker(alifoldClient); do { try { Thread.sleep(50); } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); AlignmentI orig_alig = af.getViewport().getAlignment(); testAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig); } public static void testAnnotationFileIO(String testname, AlignmentI al) { try { // what format would be appropriate for RNAalifold annotations? String aligfileout = new FormatAdapter().formatSequences("PFAM", al.getSequencesArray()); 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) rnaalifoldws .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); } } alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, opts); af.getViewport().getCalcManager().startWorker(alifoldClient); do { try { Thread.sleep(50); } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); AutoCalcSetting oldacs = af.getViewport().getCalcIdSettingsFor( alifoldClient.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, "testRnalifold_param.jar", "trial parameter writeout")); assertTrue("Couldn't read back the Jar file", (nalf = new Jalview2XML( false).loadJalviewAlign("testRnalifold_param.jar")) != null); if (nalf != null) { AutoCalcSetting acs = af.getViewport().getCalcIdSettingsFor( alifoldClient.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, rnaalifoldws, 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( rnaalifoldws.getAlignAnalysisUI().getAAconToggle())) { i.doClick(); break; } } } while (af.getViewport().isCalcInProgress()) { try { Thread.sleep(200); } catch (Exception x) { } ; } AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor( alifoldClient.getCalcId()); assertTrue( "Calc ID settings after recalculation has not been recovered.", acs2.getWsParamFile().equals(oldsettings)); } } }