formatting
[jalview.git] / test / jalview / ws / jabaws / RNAStructExportImport.java
1 package jalview.ws.jabaws;
2
3 import static org.junit.Assert.*;
4
5 import java.awt.Component;
6 import java.util.ArrayList;
7 import java.util.Arrays;
8 import java.util.List;
9 import java.util.Vector;
10
11 import javax.swing.JMenu;
12 import javax.swing.JMenuItem;
13
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;
29
30 import org.junit.AfterClass;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
33
34 import compbio.metadata.WrongParameterException;
35
36 public class RNAStructExportImport
37 {
38   public static String testseqs = "examples/unfolded_RF00031.aln";
39
40   public static Jws2Discoverer disc;
41
42   public static Jws2Instance rnaalifoldws;
43
44   jalview.ws.jws2.RNAalifoldClient alifoldClient;
45
46   public static jalview.gui.AlignFrame af = null;
47
48   @BeforeClass
49   public static void setUpBeforeClass() throws Exception
50   {
51         
52         
53     jalview.bin.Cache.initLogger();
54     disc = JalviewJabawsTestUtils.getJabawsDiscoverer();
55     
56     for (Jws2Instance svc : disc.getServices())
57     {
58         
59       if (svc.getServiceTypeURI().toLowerCase().contains("rnaalifoldws"))
60       {
61         rnaalifoldws = svc;
62       }
63     }
64     
65     System.out.println("State of rnaalifoldws: " + rnaalifoldws);
66     
67     if (rnaalifoldws == null) System.exit(0);
68     
69     jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
70     
71     af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.FormatAdapter.FILE);
72     
73     assertNotNull("Couldn't load test data ('" + testseqs + "')", af);
74     
75   }
76
77   @AfterClass
78   public static void tearDownAfterClass() throws Exception
79   {
80     if (af != null)
81     {
82       af.setVisible(false);
83       af.dispose();
84     }
85   }
86
87   @Test
88   public void testRNAStructExport()
89   {
90         
91         
92     alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, null);
93     
94     af.getViewport().getCalcManager().startWorker(alifoldClient);
95     
96     
97     do
98     {
99       try
100       {
101         Thread.sleep(50);
102       } catch (InterruptedException x)
103       {
104       }
105       ;
106     } while (af.getViewport().getCalcManager().isWorking());
107     
108     
109     AlignmentI orig_alig = af.getViewport().getAlignment();
110     
111     testAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig);
112
113   }
114
115   public static void testAnnotationFileIO(String testname, AlignmentI al)
116   {
117     try
118     {
119         // what format would be appropriate for RNAalifold annotations?
120       String aligfileout = new FormatAdapter().formatSequences("PFAM",
121               al.getSequencesArray());
122       
123       
124       String anfileout = new AnnotationFile().printAnnotations(
125               al.getAlignmentAnnotation(), al.getGroups(),
126               al.getProperties());
127       assertTrue(
128               "Test "
129                       + testname
130                       + "\nAlignment annotation file was not regenerated. Null string",
131               anfileout != null);
132       assertTrue(
133               "Test "
134                       + testname
135                       + "\nAlignment annotation file was not regenerated. Empty string",
136               anfileout.length() > "JALVIEW_ANNOTATION".length());
137
138       System.out.println("Output annotation file:\n" + anfileout
139               + "\n<<EOF\n");
140
141       // again what format would be appropriate?
142       AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
143               FormatAdapter.PASTE, "PFAM");
144       assertTrue(
145               "Test "
146                       + testname
147                       + "\nregenerated annotation file did not annotate alignment.",
148               new AnnotationFile().readAnnotationFile(al_new, anfileout,
149                       FormatAdapter.PASTE));
150
151       // test for consistency in io
152       StockholmFileTest.testAlignmentEquivalence(al, al_new);
153       return;
154     } catch (Exception e)
155     {
156       e.printStackTrace();
157     }
158     fail("Test "
159             + testname
160             + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
161   }
162
163   @Test
164   public void testRnaalifoldSettingsRecovery()
165   {
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())
169     {
170       if (rg.getDescription().contains("emperature"))
171       {
172         try
173         {
174           rg.setValue("292");
175         } catch (WrongParameterException q)
176         {
177           fail("Couldn't set the temperature parameter "
178                   + q.getStackTrace());
179         }
180         opts.add(rg);
181       }
182       if (rg.getDescription().contains("max"))
183       {
184         opts.add(rg);
185       }
186     }
187     alifoldClient = new RNAalifoldClient(rnaalifoldws, af, null, opts);
188     
189     af.getViewport().getCalcManager().startWorker(alifoldClient);
190     
191     do
192     {
193       try
194       {
195         Thread.sleep(50);
196       } catch (InterruptedException x)
197       {
198       }
199       ;
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);
207     if (nalf!=null)
208     {
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())
216       {
217         if (itm instanceof JMenuItem)
218         {
219           JMenuItem i = (JMenuItem) itm;
220           if (i.getText().equals(rnaalifoldws.getAlignAnalysisUI().getAAconToggle()))
221                   {
222             i.doClick();
223             break;
224                   }
225         }
226       }
227       while (af.getViewport().isCalcInProgress())
228       {
229         try { Thread.sleep(200);
230         } catch (Exception x) {};
231       }
232       AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor(alifoldClient.getCalcId());
233       assertTrue("Calc ID settings after recalculation has not been recovered.", acs2.getWsParamFile().equals(oldsettings));
234     }
235   }
236 }