--- /dev/null
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
+ * Copyright (C) 2014 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.ws.jabaws;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+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.ArgumentI;
+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.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.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
+ 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);
+
+ if (jpredws == null)
+ System.exit(0);
+
+ 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
+ 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<Argument> 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();
+ fail("Jpred Client didn't run with hardwired default parameters.");
+ }
+
+ } catch (InterruptedException x)
+ {
+ }
+ ;
+ } while (af.getViewport().getCalcManager().isWorking());
+
+ }
+
+ @Test
+ 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().printAnnotations(
+ al.getAlignmentAnnotation(), al.getGroups(),
+ al.getProperties());
+ 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<<EOF\n");
+
+ // again what format would be appropriate?
+ AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
+ FormatAdapter.PASTE, "PFAM");
+ assertTrue(
+ "Test "
+ + testname
+ + "\nregenerated annotation file did not annotate alignment.",
+ new AnnotationFile().readAnnotationFile(al_new, anfileout,
+ FormatAdapter.PASTE));
+
+ // test for consistency in io
+ StockholmFileTest.testAlignmentEquivalence(al, al_new);
+ return;
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ fail("Test "
+ + testname
+ + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
+ }
+
+ // @Test
+ public void testJpredwsSettingsRecovery()
+ {
+ fail("not implemnented");
+ List<compbio.metadata.Argument> opts = new ArrayList<compbio.metadata.Argument>();
+ for (compbio.metadata.Argument rg : (List<compbio.metadata.Argument>) jpredws
+ .getRunnerConfig().getArguments())
+ {
+ if (rg.getDescription().contains("emperature"))
+ {
+ try
+ {
+ rg.setValue("292");
+ } catch (WrongParameterException q)
+ {
+ 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));
+ }
+ }
+}