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
53 jalview.bin.Cache.initLogger();
54 disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
56 for (Jws2Instance svc : disc.getServices())
59 if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws"))
65 System.out.println("State of rnaalifoldws: " + rnaalifoldws);
67 if (rnaalifoldws == null) System.exit(0);
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()
92 alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null);
94 af.getViewport().getCalcManager().startWorker(alifoldClient);
102 } catch (InterruptedException x)
106 } while (af.getViewport().getCalcManager().isWorking());
109 AlignmentI orig_alig = af.getViewport().getAlignment();
111 testAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig);
115 public static void testAnnotationFileIO(String testname, AlignmentI al)
119 // what format would be appropriate for RNAalifold annotations?
120 String aligfileout = new FormatAdapter().formatSequences("PFAM",
121 al.getSequencesArray());
124 String anfileout = new AnnotationFile().printAnnotations(
125 al.getAlignmentAnnotation(), al.getGroups(),
130 + "\nAlignment annotation file was not regenerated. Null string",
135 + "\nAlignment annotation file was not regenerated. Empty string",
136 anfileout.length() > "JALVIEW_ANNOTATION".length());
138 System.out.println("Output annotation file:\n" + anfileout
141 // again what format would be appropriate?
142 AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
143 FormatAdapter.PASTE, "PFAM");
147 + "\nregenerated annotation file did not annotate alignment.",
148 new AnnotationFile().readAnnotationFile(al_new, anfileout,
149 FormatAdapter.PASTE));
151 // test for consistency in io
152 StockholmFileTest.testAlignmentEquivalence(al, al_new);
154 } catch (Exception e)
160 + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
164 public void testRnaalifoldSettingsRecovery()
166 List<compbio.metadata.Argument> opts = new ArrayList<compbio.metadata.Argument>();
167 for (compbio.metadata.Argument rg : (List<compbio.metadata.Argument>) rnaalifoldws
168 .getRunnerConfig().getArguments())
170 if (rg.getDescription().contains("emperature"))
175 } catch (WrongParameterException q)
177 fail("Couldn't set the temperature parameter "
178 + q.getStackTrace());
182 if (rg.getDescription().contains("max"))
187 alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, opts);
189 af.getViewport().getCalcManager().startWorker(alifoldClient);
196 } catch (InterruptedException x)
200 } while (af.getViewport().getCalcManager().isWorking());
201 AutoCalcSetting oldacs = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
202 String oldsettings = oldacs.getWsParamFile();
203 // write out parameters
204 jalview.gui.AlignFrame nalf=null;
205 assertTrue("Couldn't write out the Jar file",new Jalview2XML(false).SaveAlignment(af, "testRnalifold_param.jar","trial parameter writeout"));
206 assertTrue("Couldn't read back the Jar file",(nalf = new Jalview2XML(false).LoadJalviewAlign("testRnalifold_param.jar"))!=null);
209 AutoCalcSetting acs = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
210 assertTrue("Calc ID settings not recovered from viewport stash", acs.equals(oldacs));
211 assertTrue("Serialised Calc ID settings not identical to those recovered from viewport stash", acs.getWsParamFile().equals(oldsettings));
212 JMenu nmenu=new JMenu();
213 new SequenceAnnotationWSClient().attachWSMenuEntry(nmenu, rnaalifoldws, af);
214 assertTrue("Couldn't get menu entry for service",nmenu.getItemCount()>0);
215 for (Component itm: nmenu.getMenuComponents())
217 if (itm instanceof JMenuItem)
219 JMenuItem i = (JMenuItem) itm;
220 if (i.getText().equals(rnaalifoldws.getAlignAnalysisUI().getAAconToggle()))
227 while (af.getViewport().isCalcInProgress())
229 try { Thread.sleep(200);
230 } catch (Exception x) {};
232 AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
233 assertTrue("Calc ID settings after recalculation has not been recovered.", acs2.getWsParamFile().equals(oldsettings));