/* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b2) * 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.AlignmentI; import jalview.gui.Jalview2XML; import jalview.io.AnnotationFile; import jalview.io.FormatAdapter; import jalview.io.StockholmFileTest; import jalview.ws.jws2.JPred301Client; import jalview.ws.jws2.JabaParamStore; import jalview.ws.jws2.Jws2Discoverer; 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.Argument; import compbio.metadata.WrongParameterException; public class JpredJabaStructExportImport { public static String testseqs = "examples/uniref50.fa"; public static Jws2Discoverer disc; public static Jws2Instance jpredws; jalview.ws.jws2.JPred301Client jpredClient; 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("jpred")) { jpredws = svc; } } System.out.println("State of jpredws: " + jpredws); Assert.assertNotNull(jpredws, "jpredws is null!"); 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); } @AfterClass public static void tearDownAfterClass() throws Exception { if (af != null) { af.setVisible(false); af.dispose(); } } @Test(groups = { "Functional" }) public void testJPredStructOneSeqOnly() { af.selectAllSequenceMenuItem_actionPerformed(null); af.getViewport() .getSelectionGroup() .addOrRemove( af.getViewport().getSelectionGroup().getSequenceAt(0), false); af.hideSelSequences_actionPerformed(null); 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(groups = { "Functional" }) public void testJPredStructExport() { 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()); AlignmentI orig_alig = af.getViewport().getAlignment(); testAnnotationFileIO("Testing JPredWS 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) 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); } } 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)); } } }