package jalview.ws.jabaws; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Vector; import jalview.api.AlignCalcManagerI; import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.io.AnnotationFile; import jalview.io.FormatAdapter; import jalview.io.StockholmFileTest; import jalview.ws.jws2.AADisorderClient; import jalview.ws.jws2.Jws2Discoverer; import jalview.ws.jws2.RNAalifoldClient; import jalview.ws.jws2.jabaws2.Jws2Instance; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; public class RNAStructExportImport { public static String testseqs = "examples/unfolded_RF00031.aln"; public static Jws2Discoverer disc; public static Jws2Instance rnaalifoldws; jalview.ws.jws2.RNAalifoldClient alifoldClient; public static jalview.gui.AlignFrame af = null; @BeforeClass public static void setUpBeforeClass() throws Exception { jalview.bin.Cache.initLogger(); disc = JalviewJabawsTestUtils.getJabawsDiscoverer(); for (Jws2Instance svc : disc.getServices()) { System.out.println("Service type: " + svc.serviceType); if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws")) { rnaalifoldws = svc; } } System.out.println("State of rnaalifoldws: " + rnaalifoldws); if (rnaalifoldws == null) System.exit(0); jalview.io.FileLoader fl = new jalview.io.FileLoader(false); // Following this method a long way we find some (probably important!) // code that I have just commented out! 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 for patches to JAL-1294 */ @Test public void testRNAStructExport() { alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null); System.out.println("START FOLDING"); af.getViewport().getCalcManager().startWorker(alifoldClient); do { try { Thread.sleep(50); } catch (InterruptedException x) { } ; } while (af.getViewport().getCalcManager().isWorking()); System.out.println("END FOLDING"); // ALL FOR TESTING AlignCalcManagerI test = af.getViewport().getCalcManager(); RNAalifoldClient testWorker = ((RNAalifoldClient)test.getRegisteredWorkersOfClass(RNAalifoldClient.class).get(0)); testWorker.updateResultAnnotation(true); System.out.println("Annotation from RNAalifoldclient"); for (Annotation ann : testWorker.ourAnnots.get(0).annotations) { System.out.print(ann.toString()+"|"); } System.out.println(); // Why are the AlignViewport.alignment and the RNAalifoldClient alignment // Annotations different AlignmentI orig_alig = af.getViewport().getAlignment(); System.out.println("orig_alig has class: " + orig_alig.getClass()); // some time before here but after the RNAalifoldClient Update method // the alignment annotation is replaced.... System.out.println("orig_alig annotation:\n"); for (AlignmentAnnotation an : orig_alig.getAlignmentAnnotation()) { for (Annotation ann : an.annotations) { System.out.print(ann.toString()+"|"); } System.out.println(); } testAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig); } public static void testAnnotationFileIO(String testname, AlignmentI al) { try { String aligfileout = new FormatAdapter().formatSequences("CLUSTAL", al.getSequencesArray()); // test // System.out.println("aligfileout:\n" + aligfileout); 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<