1 package jalview.ws.jabaws;
3 import static org.junit.Assert.*;
5 import java.awt.Component;
6 import java.util.ArrayList;
7 import java.util.Arrays;
9 import java.util.Vector;
11 import javax.swing.JMenu;
12 import javax.swing.JMenuItem;
14 import jalview.api.AlignCalcManagerI;
15 import jalview.datamodel.AlignmentAnnotation;
16 import jalview.datamodel.AlignmentI;
17 import jalview.datamodel.Annotation;
18 import jalview.gui.Jalview2XML;
19 import jalview.io.AnnotationFile;
20 import jalview.io.FormatAdapter;
21 import jalview.io.StockholmFileTest;
22 import jalview.ws.jws2.AADisorderClient;
23 import jalview.ws.jws2.Jws2Discoverer;
24 import jalview.ws.jws2.RNAalifoldClient;
25 import jalview.ws.jws2.SequenceAnnotationWSClient;
26 import jalview.ws.jws2.dm.JabaOption;
27 import jalview.ws.jws2.jabaws2.Jws2Instance;
28 import jalview.ws.params.AutoCalcSetting;
30 import org.junit.AfterClass;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
34 import compbio.metadata.WrongParameterException;
36 public class RNAStructExportImport
38 public static String testseqs = "examples/unfolded_RF00031.aln";
40 public static Jws2Discoverer disc;
42 public static Jws2Instance rnaalifoldws;
44 jalview.ws.jws2.RNAalifoldClient alifoldClient;
46 public static jalview.gui.AlignFrame af = null;
49 public static void setUpBeforeClass() throws Exception
52 jalview.bin.Cache.initLogger();
53 disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
55 for (Jws2Instance svc : disc.getServices())
58 if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws"))
64 System.out.println("State of rnaalifoldws: " + rnaalifoldws);
66 if (rnaalifoldws == null)
69 jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
71 af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.FormatAdapter.FILE);
73 assertNotNull("Couldn't load test data ('" + testseqs + "')", af);
78 public static void tearDownAfterClass() throws Exception
88 public void testRNAStructExport()
91 alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null);
93 af.getViewport().getCalcManager().startWorker(alifoldClient);
100 } catch (InterruptedException x)
104 } while (af.getViewport().getCalcManager().isWorking());
106 AlignmentI orig_alig = af.getViewport().getAlignment();
108 testAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig);
112 public static void testAnnotationFileIO(String testname, AlignmentI al)
116 // what format would be appropriate for RNAalifold annotations?
117 String aligfileout = new FormatAdapter().formatSequences("PFAM",
118 al.getSequencesArray());
120 String anfileout = new AnnotationFile().printAnnotations(
121 al.getAlignmentAnnotation(), al.getGroups(),
126 + "\nAlignment annotation file was not regenerated. Null string",
131 + "\nAlignment annotation file was not regenerated. Empty string",
132 anfileout.length() > "JALVIEW_ANNOTATION".length());
134 System.out.println("Output annotation file:\n" + anfileout
137 // again what format would be appropriate?
138 AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
139 FormatAdapter.PASTE, "PFAM");
143 + "\nregenerated annotation file did not annotate alignment.",
144 new AnnotationFile().readAnnotationFile(al_new, anfileout,
145 FormatAdapter.PASTE));
147 // test for consistency in io
148 StockholmFileTest.testAlignmentEquivalence(al, al_new);
150 } catch (Exception e)
156 + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
160 public void testRnaalifoldSettingsRecovery()
162 List<compbio.metadata.Argument> opts = new ArrayList<compbio.metadata.Argument>();
163 for (compbio.metadata.Argument rg : (List<compbio.metadata.Argument>) rnaalifoldws
164 .getRunnerConfig().getArguments())
166 if (rg.getDescription().contains("emperature"))
171 } catch (WrongParameterException q)
173 fail("Couldn't set the temperature parameter "
174 + q.getStackTrace());
178 if (rg.getDescription().contains("max"))
183 alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, opts);
185 af.getViewport().getCalcManager().startWorker(alifoldClient);
192 } catch (InterruptedException x)
196 } while (af.getViewport().getCalcManager().isWorking());
197 AutoCalcSetting oldacs = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
198 String oldsettings = oldacs.getWsParamFile();
199 // write out parameters
200 jalview.gui.AlignFrame nalf=null;
201 assertTrue("Couldn't write out the Jar file",new Jalview2XML(false).SaveAlignment(af, "testRnalifold_param.jar","trial parameter writeout"));
202 assertTrue("Couldn't read back the Jar file",(nalf = new Jalview2XML(false).LoadJalviewAlign("testRnalifold_param.jar"))!=null);
205 AutoCalcSetting acs = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
206 assertTrue("Calc ID settings not recovered from viewport stash", acs.equals(oldacs));
207 assertTrue("Serialised Calc ID settings not identical to those recovered from viewport stash", acs.getWsParamFile().equals(oldsettings));
208 JMenu nmenu=new JMenu();
209 new SequenceAnnotationWSClient().attachWSMenuEntry(nmenu, rnaalifoldws, af);
210 assertTrue("Couldn't get menu entry for service",nmenu.getItemCount()>0);
211 for (Component itm: nmenu.getMenuComponents())
213 if (itm instanceof JMenuItem)
215 JMenuItem i = (JMenuItem) itm;
216 if (i.getText().equals(rnaalifoldws.getAlignAnalysisUI().getAAconToggle()))
223 while (af.getViewport().isCalcInProgress())
225 try { Thread.sleep(200);
226 } catch (Exception x) {};
228 AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
229 assertTrue("Calc ID settings after recalculation has not been recovered.", acs2.getWsParamFile().equals(oldsettings));