--- /dev/null
+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
+ {
+
+
+ System.out.println("test1");
+
+ jalview.bin.Cache.initLogger();
+ disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
+
+ System.out.println("test2");
+
+ 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);
+
+ System.out.println("test3");
+
+ 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);
+
+ System.out.println("test5");
+
+ }
+
+ @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("Service action text:\n" + alifoldClient.getServiceActionText());
+
+
+ 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<<EOF\n");
+
+ AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
+ FormatAdapter.PASTE, "CLUSTAL");
+ 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.");
+ }
+
+}