GPL license added
[jalview.git] / src / jalview / gui / Jalview2XML.java
1 /*\r
2 * Jalview - A Sequence Alignment Editor and Viewer\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4 *\r
5 * This program is free software; you can redistribute it and/or\r
6 * modify it under the terms of the GNU General Public License\r
7 * as published by the Free Software Foundation; either version 2\r
8 * of the License, or (at your option) any later version.\r
9 *\r
10 * This program is distributed in the hope that it will be useful,\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 * GNU General Public License for more details.\r
14 *\r
15 * You should have received a copy of the GNU General Public License\r
16 * along with this program; if not, write to the Free Software\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18 */\r
19 \r
20 package jalview.gui;\r
21 \r
22 import java.io.*;\r
23 import java.util.*;\r
24 import java.util.jar.*;\r
25 \r
26 import jalview.binding.*;\r
27 import jalview.schemes.*;\r
28 import javax.swing.JInternalFrame;\r
29 import java.net.URL;\r
30 import jalview.io.SequenceFeatureFetcher;\r
31 \r
32 \r
33 public class Jalview2XML\r
34 {\r
35 \r
36   // SAVES SEVERAL ALIGNEMENT WINDOWS TO SAME JARFILE\r
37   public static void SaveState(File statefile)\r
38   {\r
39       long creation = System.currentTimeMillis();\r
40       JInternalFrame[] frames = Desktop.desktop.getAllFrames();\r
41       if(frames==null)\r
42         return;\r
43 \r
44       try{\r
45         FileOutputStream fos = new FileOutputStream(statefile);\r
46         JarOutputStream jout = new JarOutputStream(fos);\r
47         //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS\r
48         ////////////////////////////////////////////////////\r
49         PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));\r
50 \r
51         Vector shortNames = new Vector();\r
52         //REVERSE ORDER\r
53         for (int i = frames.length-1; i > -1; i--)\r
54         {\r
55           if (frames[i] instanceof AlignFrame)\r
56           {\r
57             AlignFrame af = (AlignFrame) frames[i];\r
58 \r
59             String shortName = af.getTitle();\r
60 \r
61             if(shortName.indexOf(File.separatorChar)>-1)\r
62               shortName = shortName.substring(\r
63                     shortName.lastIndexOf(File.separatorChar)+1);\r
64 \r
65             int count=1;\r
66             while( shortNames.contains(shortName) )\r
67             {\r
68               if(shortName.endsWith("_"+(count-1)))\r
69                 shortName = shortName.substring(0, shortName.lastIndexOf("_"));\r
70 \r
71               shortName = shortName.concat("_"+count);\r
72               count++;\r
73             }\r
74             shortNames.addElement(shortName);\r
75 \r
76             if(!shortName.endsWith(".xml"))\r
77               shortName = shortName+".xml";\r
78 \r
79             SaveState( af, creation, shortName, jout, out);\r
80            }\r
81         }\r
82         out.close();\r
83         jout.close();\r
84       }\r
85       catch(Exception ex){ex.printStackTrace();}\r
86   }\r
87 \r
88   // USE THIS METHOD TO SAVE A SINGLE ALIGNMENT WINDOW\r
89   public static void SaveState( AlignFrame af, String jarFile, String fileName)\r
90   {\r
91     try{\r
92       FileOutputStream fos = new FileOutputStream(jarFile);\r
93       JarOutputStream jout = new JarOutputStream(fos);\r
94       //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS\r
95       ////////////////////////////////////////////////////\r
96       PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));\r
97 \r
98       SaveState(af, System.currentTimeMillis(), fileName, jout, out);\r
99       out.close();\r
100       jout.close();\r
101     }catch(Exception ex){}\r
102   }\r
103 \r
104   public static void SaveState( AlignFrame af, long timeStamp,\r
105       String fileName, JarOutputStream jout, PrintWriter out)\r
106   {\r
107 \r
108     Vector seqids = new Vector();\r
109     Vector userColours = new Vector();\r
110 \r
111     AlignViewport av = af.viewport;\r
112 \r
113     JalviewModel object = new JalviewModel();\r
114     object.setVamsasModel( new VamsasModel() );\r
115 \r
116     object.setCreationDate( new java.util.Date(timeStamp) );\r
117 \r
118     jalview.datamodel.AlignmentI jal = af.viewport.alignment;\r
119 \r
120     SequenceSet vamsasSet = new SequenceSet();\r
121     Sequence vamsasSeq;\r
122     JalviewModelSequence jms = new JalviewModelSequence();\r
123 \r
124     vamsasSet.setGapChar(jal.getGapCharacter()+"");\r
125 \r
126     JSeq jseq;\r
127 \r
128 \r
129     //SAVE SEQUENCES\r
130     int id = 0;\r
131     for(int i=0; i<jal.getHeight(); i++)\r
132     {\r
133       seqids.add(jal.getSequenceAt(i));\r
134 \r
135       vamsasSeq = new Sequence( );\r
136       vamsasSeq.setId(id+"");\r
137       vamsasSeq.setName(jal.getSequenceAt(i).getName());\r
138       vamsasSeq.setSequence(jal.getSequenceAt(i).getSequence());\r
139 \r
140       jseq = new JSeq();\r
141       jseq.setStart(jal.getSequenceAt(i).getStart());\r
142       jseq.setEnd(jal.getSequenceAt(i).getEnd());\r
143 \r
144       jseq.setColour(jal.getSequenceAt(i).getColor().getRGB());\r
145 \r
146       jseq.setId( id );\r
147 \r
148       jms.addJSeq(jseq);\r
149       vamsasSet.addSequence(vamsasSeq);\r
150       id++;\r
151     }\r
152 \r
153     //SAVE TREES\r
154     if(af.viewport.currentTree!=null)\r
155     {\r
156       object.getVamsasModel().addTree(af.viewport.currentTree.toString());\r
157     }\r
158 \r
159     //SAVE ANNOTATIONS\r
160     if(jal.getAlignmentAnnotation()!=null)\r
161     {\r
162 \r
163       jalview.datamodel.AlignmentAnnotation [] aa = jal.getAlignmentAnnotation();\r
164       for(int i=0; i<aa.length; i++)\r
165       {\r
166         if(aa[i].label.equals("Quality")\r
167         || aa[i].label.equals("Conservation")\r
168         || aa[i].label.equals("Consensus"))\r
169        {    continue;}\r
170 \r
171         Annotation an = new Annotation();\r
172         an.setDescription(aa[i].description);\r
173         an.setGraph(aa[i].isGraph);\r
174         an.setLabel(aa[i].label);\r
175 \r
176         AnnotationElement ae;\r
177 \r
178         for(int a=0; a<aa[i].annotations.length; a++)\r
179         {\r
180           if(aa[i]==null || aa[i].annotations[a]==null)\r
181             continue;\r
182 \r
183           ae = new AnnotationElement();\r
184           ae.setDescription(aa[i].annotations[a].description);\r
185           ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);\r
186           ae.setValue(aa[i].annotations[a].value);\r
187           ae.setPosition(a);\r
188           ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure+"");\r
189           an.addAnnotationElement(ae);\r
190         }\r
191 \r
192         vamsasSet.addAnnotation(an);\r
193       }\r
194 \r
195     }\r
196 \r
197     //SAVE GROUPS\r
198     if(jal.getGroups()!=null)\r
199     {\r
200       JGroup [] groups = new JGroup[jal.getGroups().size()];\r
201       for(int i=0; i<groups.length; i++)\r
202       {\r
203         groups[i] = new JGroup();\r
204         jalview.datamodel.SequenceGroup sg\r
205             = (jalview.datamodel.SequenceGroup)jal.getGroups().elementAt(i);\r
206         groups[i].setStart( sg.getStartRes() );\r
207         groups[i].setEnd( sg.getEndRes() );\r
208         groups[i].setName( sg.getName());\r
209 \r
210         if(sg.cs instanceof ConservationColourScheme)\r
211           groups[i].setConsThreshold( ((ConservationColourScheme)sg.cs).inc);\r
212 \r
213         if (sg.cs instanceof ResidueColourScheme)\r
214           groups[i].setPidThreshold( ( (ResidueColourScheme) sg.cs).getThreshold());\r
215         else if (sg.cs instanceof ScoreColourScheme)\r
216           groups[i].setPidThreshold( ( (ScoreColourScheme) sg.cs).getThreshold());\r
217 \r
218 \r
219         if (sg.cs instanceof jalview.schemes.UserColourScheme)\r
220           groups[i].setColour(SetUserColourScheme(sg.cs, userColours, jms));\r
221         else\r
222           groups[i].setColour(ColourSchemeProperty.getColourName(sg.cs));\r
223 \r
224         groups[i].setOutlineColour(sg.getOutlineColour().getRGB());\r
225         groups[i].setDisplayBoxes(sg.getDisplayBoxes());\r
226         groups[i].setDisplayText(sg.getDisplayText());\r
227         groups[i].setColourText(sg.getColourText());\r
228 \r
229         for(int s=0; s<sg.getSize(); s++)\r
230         {\r
231           jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence)sg.getSequenceAt(s);\r
232           int index = seqids.indexOf(seq);\r
233           groups[i].addSeq(index);\r
234         }\r
235 \r
236       }\r
237       jms.setJGroup(groups);\r
238 \r
239     }\r
240 \r
241     ///////////SAVE VIEWPORT\r
242     Viewport view = new Viewport();\r
243    view.setTitle(af.getTitle());\r
244    view.setXpos(af.getX());\r
245    view.setYpos(af.getY());\r
246    view.setWidth(af.getWidth());\r
247    view.setHeight(af.getHeight());\r
248    view.setStartRes(av.startRes);\r
249    view.setStartSeq(av.startSeq);\r
250 \r
251 \r
252  if( av.getGlobalColourScheme() instanceof jalview.schemes.UserColourScheme)\r
253    view.setBgColour( SetUserColourScheme(av.getGlobalColourScheme(),\r
254                                          userColours, jms) );\r
255  else\r
256    view.setBgColour( ColourSchemeProperty.getColourName\r
257                      ( av.getGlobalColourScheme()));\r
258 \r
259    ColourSchemeI cs = av.getGlobalColourScheme();\r
260    if(cs instanceof ConservationColourScheme)\r
261      view.setConsThreshold( ((ConservationColourScheme)cs).inc);\r
262 \r
263    if (cs instanceof ResidueColourScheme)\r
264      view.setPidThreshold( ( (ResidueColourScheme) cs).getThreshold());\r
265   else if (cs instanceof ScoreColourScheme)\r
266      view.setPidThreshold( ( (ScoreColourScheme) cs).getThreshold());\r
267 \r
268 \r
269    view.setConservationSelected(av.getConservationSelected());\r
270    view.setPidSelected(av.getAbovePIDThreshold());\r
271    view.setFontName(av.font.getFontName());\r
272    view.setFontSize(av.font.getSize());\r
273    view.setFontStyle(av.font.getStyle());\r
274    view.setRenderGaps(av.renderGaps);\r
275    view.setShowAnnotation(av.getShowAnnotation());\r
276    view.setShowBoxes(av.getShowBoxes());\r
277    view.setShowColourText(av.getColourText());\r
278    view.setShowConservation(av.showConservation);\r
279    view.setShowFullId(av.getShowFullId());\r
280    view.setShowIdentity(av.showIdentity);\r
281    view.setShowQuality(av.showQuality);\r
282    view.setShowSequenceFeatures(av.showSequenceFeatures);\r
283    view.setShowText(av.getShowText());\r
284    view.setWrapAlignment(av.getWrapAlignment());\r
285 \r
286    jms.addViewport( view );\r
287 \r
288     object.setJalviewModelSequence(jms);\r
289     object.getVamsasModel().addSequenceSet(vamsasSet);\r
290 \r
291 \r
292     try\r
293     {\r
294      if(!fileName.endsWith(".xml"))\r
295               fileName = fileName+".xml";\r
296 \r
297      JarEntry entry = new JarEntry(fileName);\r
298      jout.putNextEntry(entry);\r
299 \r
300       object.marshal(out);\r
301     }\r
302     catch (Exception ex)\r
303     {\r
304       ex.printStackTrace();\r
305     }\r
306   }\r
307 \r
308   static String SetUserColourScheme(jalview.schemes.ColourSchemeI cs,\r
309                                     Vector userColours,\r
310                                     JalviewModelSequence jms)\r
311   {\r
312     String id=null;\r
313     jalview.schemes.UserColourScheme ucs = (jalview.schemes.UserColourScheme)cs;\r
314     if (!userColours.contains(ucs))\r
315     {\r
316       userColours.add(ucs);\r
317       java.awt.Color [] colours = ucs.getColours();\r
318       jalview.binding.UserColours uc = new jalview.binding.UserColours();\r
319       jalview.binding.UserColourScheme jbucs = new jalview.binding.UserColourScheme();\r
320       for(int i=0; i<colours.length; i++)\r
321       {\r
322              jalview.binding.Colour col = new jalview.binding.Colour();\r
323              col.setRGB( jalview.util.Format.getHexString(colours[i]) );\r
324              jbucs.addColour(col);\r
325       }\r
326       id = "ucs"+userColours.indexOf(ucs);\r
327       uc.setId(id);\r
328       uc.setUserColourScheme(jbucs);\r
329       jms.addUserColours(uc);\r
330     }\r
331     return id;\r
332   }\r
333 \r
334   static jalview.schemes.UserColourScheme GetUserColourScheme(JalviewModelSequence jms, String id)\r
335   {\r
336     UserColours [] uc = jms.getUserColours();\r
337     UserColours colours=null;\r
338     for(int i=0; i<uc.length; i++)\r
339     {\r
340        if(uc[i].getId().equals(id))\r
341        {  colours = uc[i]; break;  }\r
342     }\r
343     int csize = colours.getUserColourScheme().getColourCount();\r
344     java.awt.Color [] newColours = new java.awt.Color[csize];\r
345 \r
346     for(int i=0; i<csize;i++)\r
347       newColours[i] = new java.awt.Color(\r
348         Integer.parseInt( colours.getUserColourScheme().getColour(i).getRGB(), 16) );\r
349 \r
350     return  new jalview.schemes.UserColourScheme(newColours);\r
351 \r
352   }\r
353 \r
354 \r
355   public static void LoadJalviewAlign(String file)\r
356   {\r
357     JalviewModel object = new JalviewModel();\r
358     try{\r
359       //UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING\r
360 \r
361       URL url = null;\r
362       if( file.startsWith("http://"))\r
363        url = new URL(file);\r
364 \r
365       JarInputStream jin = null;\r
366       JarEntry jarentry=null;\r
367       int entryCount = 1;\r
368       do{\r
369         if (url != null)\r
370           jin = new JarInputStream(url.openStream());\r
371         else\r
372           jin = new JarInputStream(new FileInputStream(file));\r
373 \r
374         for(int i=0; i<entryCount; i++)\r
375           jarentry = jin.getNextJarEntry();\r
376 \r
377         if(jarentry!=null)\r
378         {\r
379           InputStreamReader in = new InputStreamReader(jin, "UTF-8");\r
380           object = (JalviewModel) object.unmarshal(in);\r
381           LoadFromObject(object);\r
382           entryCount++;\r
383         }\r
384       }while(jarentry!=null);\r
385 \r
386     }\r
387     catch(Exception ex)\r
388     {   System.err.println("Exception whilst loading jalview XML file : "+ex+"\n");\r
389      ex.printStackTrace(); return; }\r
390 \r
391   }\r
392 \r
393   static void LoadFromObject(JalviewModel object)\r
394   {\r
395      Vector seqids = new Vector();\r
396      SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0);\r
397      Sequence [] vamsasSeq = vamsasSet.getSequence();\r
398 \r
399      JalviewModelSequence jms = object.getJalviewModelSequence();\r
400      //////////////////////////////////\r
401      //LOAD SEQUENCES\r
402      jalview.datamodel.Sequence [] jseqs = new jalview.datamodel.Sequence[vamsasSeq.length];\r
403      JSeq [] JSEQ = object.getJalviewModelSequence().getJSeq();\r
404      for(int i=0; i<vamsasSeq.length; i++)\r
405      {\r
406        jseqs[i] = new jalview.datamodel.Sequence(vamsasSeq[i].getName(),\r
407                                                  vamsasSeq[i].getSequence());\r
408 \r
409        jseqs[i].setStart( JSEQ[i].getStart());\r
410        jseqs[i].setEnd( JSEQ[i].getEnd());\r
411        jseqs[i].setColor( new java.awt.Color(JSEQ[i].getColour()) );\r
412        seqids.add(jseqs[i]);\r
413      }\r
414 \r
415      /////////////////////////////////\r
416      jalview.datamodel.Alignment al = new jalview.datamodel.Alignment(jseqs);\r
417      /////////////////////////////////\r
418 \r
419      //////////////////////////////////\r
420      //LOAD ANNOTATIONS\r
421      if(vamsasSet.getAnnotation()!=null)\r
422      {\r
423        Annotation[] an = vamsasSet.getAnnotation();\r
424        for (int i = 0; i < an.length; i++)\r
425        {\r
426          AnnotationElement[] ae = an[i].getAnnotationElement();\r
427          jalview.datamodel.Annotation anot[]\r
428              = new jalview.datamodel.Annotation[al.getWidth()];\r
429          for (int aa = 0; aa < ae.length; aa++)\r
430          {\r
431            anot[ae[aa].getPosition()]\r
432                = new jalview.datamodel.Annotation(\r
433                    ae[aa].getDisplayCharacter(),\r
434                    ae[aa].getDescription(),\r
435                    ae[aa].getSecondaryStructure().charAt(0),\r
436                    ae[aa].getValue()\r
437                );\r
438          }\r
439 \r
440 \r
441           jalview.datamodel.AlignmentAnnotation jaa = null;\r
442           if(an[i].getGraph())\r
443             jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),\r
444                                         an[i].getDescription(), anot,\r
445                                         0,0,1);\r
446           else\r
447             jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),\r
448                                         an[i].getDescription(), anot);\r
449           al.addAnnotation(jaa);\r
450        }\r
451      }\r
452 \r
453       /////////////////////////////////\r
454       // LOAD VIEWPORT\r
455       Viewport[] views = jms.getViewport();\r
456       Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER\r
457 \r
458       AlignFrame af = new AlignFrame(al);\r
459     //  af.changeColour() );\r
460 \r
461     /////////////////////////\r
462     //LOAD GROUPS\r
463     if (jms.getJGroupCount()>0)\r
464     {\r
465       JGroup[] groups = jms.getJGroup();\r
466       for (int i = 0; i < groups.length; i++)\r
467       {\r
468        ColourSchemeI cs=null;\r
469        if(groups[i].getColour()!=null)\r
470        {\r
471          if (groups[i].getColour().startsWith("ucs"))\r
472            cs = GetUserColourScheme(jms, groups[i].getColour());\r
473          else\r
474            cs = ColourSchemeProperty.getColour(al, groups[i].getColour());\r
475 \r
476          if (cs instanceof ResidueColourScheme)\r
477            ( (ResidueColourScheme) cs).setThreshold(groups[i].getPidThreshold());\r
478          else if (cs instanceof ScoreColourScheme)\r
479            ( (ScoreColourScheme) cs).setThreshold(groups[i].getPidThreshold());\r
480        }\r
481 \r
482         jalview.datamodel.SequenceGroup sg = new jalview.datamodel.SequenceGroup\r
483                 (groups[i].getName(),\r
484                  cs,\r
485                  groups[i].getDisplayBoxes(),\r
486                  groups[i].getDisplayText(),\r
487                  groups[i].getColourText(),\r
488                  groups[i].getStart(),\r
489                  groups[i].getEnd()) ;\r
490         sg.setOutlineColour( new java.awt.Color(groups[i].getOutlineColour()));\r
491         int [] ids = groups[i].getSeq();\r
492         for(int s=0; s<ids.length; s++)\r
493             sg.addSequence( (jalview.datamodel.SequenceI)seqids.elementAt( ids[s] ));\r
494 \r
495         if(groups[i].getConsThreshold()!=0)\r
496         {\r
497           jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",\r
498               ResidueProperties.propHash, 3,\r
499               sg.sequences, 0,\r
500               sg.getWidth() - 1);\r
501           c.calculate();\r
502           c.verdict(false, 25);\r
503           cs = new ConservationColourScheme(c, cs);\r
504           sg.cs = cs;\r
505         }\r
506 \r
507 \r
508         al.addGroup(sg);\r
509       }\r
510     }\r
511 \r
512 \r
513     Desktop.addInternalFrame(af, view.getTitle(), AlignFrame.NEW_WINDOW_WIDTH, AlignFrame.NEW_WINDOW_HEIGHT);\r
514     af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(), view.getHeight());\r
515     af.viewport.setStartRes( view.getStartRes() );\r
516     af.viewport.setStartSeq( view.getStartSeq() );\r
517     af.viewport.showConservation = view.getShowConservation();\r
518     af.viewport.showQuality = view.getShowQuality();\r
519     af.viewport.showIdentity= view.getShowIdentity();\r
520     af.viewport.setAbovePIDThreshold( view.getPidSelected() );\r
521     af.viewport.setColourText( view.getShowColourText() );\r
522     af.viewport.setConservationSelected( view.getConservationSelected());\r
523     af.viewport.setShowFullId( view.getShowFullId());\r
524     af.viewport.setFont( new java.awt.Font( view.getFontName(),\r
525                                             view.getFontStyle(),\r
526                                             view.getFontSize()));\r
527     af.alignPanel.fontChanged();\r
528 \r
529     af.sequenceFeatures_actionPerformed(null);\r
530     af.viewport.setRenderGaps( view.getRenderGaps() );\r
531 \r
532     af.viewport.setWrapAlignment( view.getWrapAlignment() );\r
533     if(view.getWrapAlignment())\r
534     {\r
535       af.alignPanel.setWrapAlignment(view.getWrapAlignment());\r
536     }\r
537     else\r
538     {\r
539       af.viewport.setShowAnnotation(view.getShowAnnotation());\r
540       af.alignPanel.setAnnotationVisible(view.getShowAnnotation());\r
541     }\r
542 \r
543     af.viewport.setShowBoxes( view.getShowBoxes() );\r
544     af.viewport.setShowText( view.getShowText() );\r
545 \r
546     ColourSchemeI cs=null;\r
547     if(view.getBgColour()!=null)\r
548     {\r
549 \r
550       if (view.getBgColour().startsWith("ucs"))\r
551         cs = GetUserColourScheme(jms, view.getBgColour());\r
552       else\r
553         cs = ColourSchemeProperty.getColour(al, view.getBgColour());\r
554 \r
555       if (cs instanceof ConservationColourScheme)\r
556         ( (ConservationColourScheme) cs).inc = view.getConsThreshold();\r
557 \r
558       if (cs instanceof ResidueColourScheme)\r
559         ( (ResidueColourScheme) cs).setThreshold(view.getPidThreshold());\r
560       else if (cs instanceof ScoreColourScheme)\r
561         ( (ScoreColourScheme) cs).setThreshold(view.getPidThreshold());\r
562 \r
563     }\r
564     af.viewport.setGlobalColourScheme( cs );\r
565 \r
566 \r
567     af.viewport.setColourAppliesToAllGroups(false);\r
568     af.changeColour(af.viewport.getGlobalColourScheme());\r
569     af.viewport.setColourAppliesToAllGroups(true);\r
570 \r
571     System.out.println(view.getShowSequenceFeatures());\r
572     if( view.getShowSequenceFeatures() );\r
573     {\r
574       SequenceFeatureFetcher sft = new SequenceFeatureFetcher(al, af.alignPanel);\r
575     }\r
576 \r
577     //LOAD TREES - THIS RELEASE ONLY ALLOWS 1 TREE\r
578     if(object.getVamsasModel().getTreeCount()>0)\r
579     {\r
580       try{\r
581         af.ShowNewickTree(new jalview.io.NewickFile(\r
582             (String)object.getVamsasModel().getTree(0)), "Tree");\r
583       }catch(Exception ex){ex.printStackTrace();}\r
584     }\r
585 \r
586   }\r
587 }\r
588 \r
589 \r
590 \r