5 import java.util.jar.*;
\r
7 import jalview.binding.*;
\r
8 import jalview.schemes.*;
\r
9 import javax.swing.JInternalFrame;
\r
10 import java.net.URL;
\r
13 public class Jalview2XML
\r
16 // SAVES SEVERAL ALIGNEMENT WINDOWS TO SAME JARFILE
\r
17 public static void SaveState(File statefile)
\r
19 long creation = System.currentTimeMillis();
\r
20 JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
25 FileOutputStream fos = new FileOutputStream(statefile);
\r
26 JarOutputStream jout = new JarOutputStream(fos);
\r
27 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
28 ////////////////////////////////////////////////////
\r
29 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));
\r
31 Vector shortNames = new Vector();
\r
33 for (int i = frames.length-1; i > -1; i--)
\r
35 if (frames[i] instanceof AlignFrame)
\r
37 AlignFrame af = (AlignFrame) frames[i];
\r
39 String shortName = af.getTitle();
\r
41 if(shortName.indexOf(File.separatorChar)>-1)
\r
42 shortName = shortName.substring(
\r
43 shortName.lastIndexOf(File.separatorChar)+1);
\r
46 while( shortNames.contains(shortName) )
\r
48 if(shortName.endsWith("_"+(count-1)))
\r
49 shortName = shortName.substring(0, shortName.lastIndexOf("_"));
\r
51 shortName = shortName.concat("_"+count);
\r
54 shortNames.addElement(shortName);
\r
56 if(!shortName.endsWith(".xml"))
\r
57 shortName = shortName+".xml";
\r
59 SaveState( af, creation, shortName, jout, out);
\r
65 catch(Exception ex){ex.printStackTrace();}
\r
68 // USE THIS METHOD TO SAVE A SINGLE ALIGNMENT WINDOW
\r
69 public static void SaveState( AlignFrame af, String jarFile, String fileName)
\r
72 FileOutputStream fos = new FileOutputStream(jarFile);
\r
73 JarOutputStream jout = new JarOutputStream(fos);
\r
74 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
75 ////////////////////////////////////////////////////
\r
76 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));
\r
78 SaveState(af, System.currentTimeMillis(), fileName, jout, out);
\r
81 }catch(Exception ex){}
\r
84 public static void SaveState( AlignFrame af, long timeStamp,
\r
85 String fileName, JarOutputStream jout, PrintWriter out)
\r
88 Vector seqids = new Vector();
\r
89 Vector userColours = new Vector();
\r
91 AlignViewport av = af.viewport;
\r
93 JalviewModel object = new JalviewModel();
\r
94 object.setVamsasModel( new VamsasModel() );
\r
96 object.setCreationDate( new java.util.Date(timeStamp) );
\r
98 jalview.datamodel.AlignmentI jal = af.viewport.alignment;
\r
100 SequenceSet vamsasSet = new SequenceSet();
\r
101 Sequence vamsasSeq;
\r
102 JalviewModelSequence jms = new JalviewModelSequence();
\r
104 vamsasSet.setGapChar(jal.getGapCharacter()+"");
\r
111 for(int i=0; i<jal.getHeight(); i++)
\r
113 seqids.add(jal.getSequenceAt(i));
\r
115 vamsasSeq = new Sequence( );
\r
116 vamsasSeq.setId(id+"");
\r
117 vamsasSeq.setName(jal.getSequenceAt(i).getName());
\r
118 vamsasSeq.setSequence(jal.getSequenceAt(i).getSequence());
\r
121 jseq.setStart(jal.getSequenceAt(i).getStart());
\r
122 jseq.setEnd(jal.getSequenceAt(i).getEnd());
\r
124 jseq.setColour(jal.getSequenceAt(i).getColor().getRGB());
\r
129 vamsasSet.addSequence(vamsasSeq);
\r
134 if(af.viewport.currentTree!=null)
\r
136 object.getVamsasModel().addTree(af.viewport.currentTree.toString());
\r
140 if(jal.getAlignmentAnnotation()!=null)
\r
143 jalview.datamodel.AlignmentAnnotation [] aa = jal.getAlignmentAnnotation();
\r
144 for(int i=0; i<aa.length; i++)
\r
146 if(aa[i].label.equals("Quality")
\r
147 || aa[i].label.equals("Conservation")
\r
148 || aa[i].label.equals("Consensus"))
\r
151 Annotation an = new Annotation();
\r
152 an.setDescription(aa[i].description);
\r
153 an.setGraph(aa[i].isGraph);
\r
154 an.setLabel(aa[i].label);
\r
156 AnnotationElement ae;
\r
158 for(int a=0; a<aa[i].annotations.length; a++)
\r
160 if(aa[i]==null || aa[i].annotations[a]==null)
\r
163 ae = new AnnotationElement();
\r
164 ae.setDescription(aa[i].annotations[a].description);
\r
165 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
166 ae.setValue(aa[i].annotations[a].value);
\r
168 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure+"");
\r
169 an.addAnnotationElement(ae);
\r
172 vamsasSet.addAnnotation(an);
\r
178 if(jal.getGroups()!=null)
\r
180 JGroup [] groups = new JGroup[jal.getGroups().size()];
\r
181 for(int i=0; i<groups.length; i++)
\r
183 groups[i] = new JGroup();
\r
184 jalview.datamodel.SequenceGroup sg
\r
185 = (jalview.datamodel.SequenceGroup)jal.getGroups().elementAt(i);
\r
186 groups[i].setStart( sg.getStartRes() );
\r
187 groups[i].setEnd( sg.getEndRes() );
\r
188 groups[i].setName( sg.getName());
\r
190 if(sg.cs instanceof ConservationColourScheme)
\r
191 groups[i].setConsThreshold( ((ConservationColourScheme)sg.cs).inc);
\r
193 if (sg.cs instanceof ResidueColourScheme)
\r
194 groups[i].setPidThreshold( ( (ResidueColourScheme) sg.cs).getThreshold());
\r
195 else if (sg.cs instanceof ScoreColourScheme)
\r
196 groups[i].setPidThreshold( ( (ScoreColourScheme) sg.cs).getThreshold());
\r
199 if (sg.cs instanceof jalview.schemes.UserColourScheme)
\r
200 groups[i].setColour(SetUserColourScheme(sg.cs, userColours, jms));
\r
202 groups[i].setColour(ColourSchemeProperty.getColourName(sg.cs));
\r
204 groups[i].setOutlineColour(sg.getOutlineColour().getRGB());
\r
205 groups[i].setDisplayBoxes(sg.getDisplayBoxes());
\r
206 groups[i].setDisplayText(sg.getDisplayText());
\r
207 groups[i].setColourText(sg.getColourText());
\r
209 for(int s=0; s<sg.getSize(); s++)
\r
211 jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence)sg.getSequenceAt(s);
\r
212 int index = seqids.indexOf(seq);
\r
213 groups[i].addSeq(index);
\r
217 jms.setJGroup(groups);
\r
221 ///////////SAVE VIEWPORT
\r
222 Viewport view = new Viewport();
\r
223 view.setTitle(af.getTitle());
\r
224 view.setXpos(af.getX());
\r
225 view.setYpos(af.getY());
\r
226 view.setWidth(af.getWidth());
\r
227 view.setHeight(af.getHeight());
\r
228 view.setStartRes(av.startRes);
\r
229 view.setStartSeq(av.startSeq);
\r
232 if( av.getGlobalColourScheme() instanceof jalview.schemes.UserColourScheme)
\r
233 view.setBgColour( SetUserColourScheme(av.getGlobalColourScheme(),
\r
234 userColours, jms) );
\r
236 view.setBgColour( ColourSchemeProperty.getColourName
\r
237 ( av.getGlobalColourScheme()));
\r
239 ColourSchemeI cs = av.getGlobalColourScheme();
\r
240 if(cs instanceof ConservationColourScheme)
\r
241 view.setConsThreshold( ((ConservationColourScheme)cs).inc);
\r
243 if (cs instanceof ResidueColourScheme)
\r
244 view.setPidThreshold( ( (ResidueColourScheme) cs).getThreshold());
\r
245 else if (cs instanceof ScoreColourScheme)
\r
246 view.setPidThreshold( ( (ScoreColourScheme) cs).getThreshold());
\r
249 view.setConservationSelected(av.getConservationSelected());
\r
250 view.setPidSelected(av.getAbovePIDThreshold());
\r
251 view.setFontName(av.font.getFontName());
\r
252 view.setFontSize(av.font.getSize());
\r
253 view.setFontStyle(av.font.getStyle());
\r
254 view.setRenderGaps(av.renderGaps);
\r
255 view.setShowAnnotation(av.getShowAnnotation());
\r
256 view.setShowBoxes(av.getShowBoxes());
\r
257 view.setShowColourText(av.getColourText());
\r
258 view.setShowConservation(av.showConservation);
\r
259 view.setShowFullId(av.getShowFullId());
\r
260 view.setShowIdentity(av.showIdentity);
\r
261 view.setShowQuality(av.showQuality);
\r
262 view.setShowSequenceFeatures(av.showSequenceFeatures);
\r
263 view.setShowText(av.getShowText());
\r
264 view.setWrapAlignment(av.getWrapAlignment());
\r
266 jms.addViewport( view );
\r
268 object.setJalviewModelSequence(jms);
\r
269 object.getVamsasModel().addSequenceSet(vamsasSet);
\r
274 if(!fileName.endsWith(".xml"))
\r
275 fileName = fileName+".xml";
\r
277 JarEntry entry = new JarEntry(fileName);
\r
278 jout.putNextEntry(entry);
\r
280 object.marshal(out);
\r
282 catch (Exception ex)
\r
284 ex.printStackTrace();
\r
288 static String SetUserColourScheme(jalview.schemes.ColourSchemeI cs,
\r
289 Vector userColours,
\r
290 JalviewModelSequence jms)
\r
293 jalview.schemes.UserColourScheme ucs = (jalview.schemes.UserColourScheme)cs;
\r
294 if (!userColours.contains(ucs))
\r
296 userColours.add(ucs);
\r
297 java.awt.Color [] colours = ucs.getColours();
\r
298 jalview.binding.UserColours uc = new jalview.binding.UserColours();
\r
299 jalview.binding.UserColourScheme jbucs = new jalview.binding.UserColourScheme();
\r
300 for(int i=0; i<colours.length; i++)
\r
302 jalview.binding.Colour col = new jalview.binding.Colour();
\r
303 col.setRGB( jalview.util.Format.getHexString(colours[i]) );
\r
304 jbucs.addColour(col);
\r
306 id = "ucs"+userColours.indexOf(ucs);
\r
308 uc.setUserColourScheme(jbucs);
\r
309 jms.addUserColours(uc);
\r
314 static jalview.schemes.UserColourScheme GetUserColourScheme(JalviewModelSequence jms, String id)
\r
316 UserColours [] uc = jms.getUserColours();
\r
317 UserColours colours=null;
\r
318 for(int i=0; i<uc.length; i++)
\r
320 if(uc[i].getId().equals(id))
\r
321 { colours = uc[i]; break; }
\r
323 int csize = colours.getUserColourScheme().getColourCount();
\r
324 java.awt.Color [] newColours = new java.awt.Color[csize];
\r
326 for(int i=0; i<csize;i++)
\r
327 newColours[i] = new java.awt.Color(
\r
328 Integer.parseInt( colours.getUserColourScheme().getColour(i).getRGB(), 16) );
\r
330 return new jalview.schemes.UserColourScheme(newColours);
\r
335 public static void LoadJalviewAlign(String file)
\r
337 JalviewModel object = new JalviewModel();
\r
339 //UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING
\r
342 if( file.startsWith("http://"))
\r
343 url = new URL(file);
\r
345 JarInputStream jin = null;
\r
346 JarEntry jarentry=null;
\r
347 int entryCount = 1;
\r
350 jin = new JarInputStream(url.openStream());
\r
352 jin = new JarInputStream(new FileInputStream(file));
\r
354 for(int i=0; i<entryCount; i++)
\r
355 jarentry = jin.getNextJarEntry();
\r
359 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
360 object = (JalviewModel) object.unmarshal(in);
\r
361 LoadFromObject(object);
\r
364 }while(jarentry!=null);
\r
367 catch(Exception ex)
\r
368 { System.err.println("Exception whilst loading jalview XML file : "+ex+"\n");
\r
369 ex.printStackTrace(); return; }
\r
373 static void LoadFromObject(JalviewModel object)
\r
375 Vector seqids = new Vector();
\r
376 SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0);
\r
377 Sequence [] vamsasSeq = vamsasSet.getSequence();
\r
379 JalviewModelSequence jms = object.getJalviewModelSequence();
\r
380 //////////////////////////////////
\r
382 jalview.datamodel.Sequence [] jseqs = new jalview.datamodel.Sequence[vamsasSeq.length];
\r
383 JSeq [] JSEQ = object.getJalviewModelSequence().getJSeq();
\r
384 for(int i=0; i<vamsasSeq.length; i++)
\r
386 jseqs[i] = new jalview.datamodel.Sequence(vamsasSeq[i].getName(),
\r
387 vamsasSeq[i].getSequence());
\r
389 jseqs[i].setStart( JSEQ[i].getStart());
\r
390 jseqs[i].setEnd( JSEQ[i].getEnd());
\r
391 jseqs[i].setColor( new java.awt.Color(JSEQ[i].getColour()) );
\r
392 seqids.add(jseqs[i]);
\r
395 /////////////////////////////////
\r
396 jalview.datamodel.Alignment al = new jalview.datamodel.Alignment(jseqs);
\r
397 /////////////////////////////////
\r
399 //////////////////////////////////
\r
401 if(vamsasSet.getAnnotation()!=null)
\r
403 Annotation[] an = vamsasSet.getAnnotation();
\r
404 for (int i = 0; i < an.length; i++)
\r
406 AnnotationElement[] ae = an[i].getAnnotationElement();
\r
407 jalview.datamodel.Annotation anot[]
\r
408 = new jalview.datamodel.Annotation[al.getWidth()];
\r
409 for (int aa = 0; aa < ae.length; aa++)
\r
411 anot[ae[aa].getPosition()]
\r
412 = new jalview.datamodel.Annotation(
\r
413 ae[aa].getDisplayCharacter(),
\r
414 ae[aa].getDescription(),
\r
415 ae[aa].getSecondaryStructure().charAt(0),
\r
421 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
422 if(an[i].getGraph())
\r
423 jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
\r
424 an[i].getDescription(), anot,
\r
427 jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
\r
428 an[i].getDescription(), anot);
\r
429 al.addAnnotation(jaa);
\r
433 /////////////////////////////////
\r
435 Viewport[] views = jms.getViewport();
\r
436 Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER
\r
438 AlignFrame af = new AlignFrame(al);
\r
439 // af.changeColour() );
\r
441 /////////////////////////
\r
443 if (jms.getJGroupCount()>0)
\r
445 JGroup[] groups = jms.getJGroup();
\r
446 for (int i = 0; i < groups.length; i++)
\r
448 ColourSchemeI cs=null;
\r
449 if(groups[i].getColour()!=null)
\r
451 if (groups[i].getColour().startsWith("ucs"))
\r
452 cs = GetUserColourScheme(jms, groups[i].getColour());
\r
454 cs = ColourSchemeProperty.getColour(al, groups[i].getColour());
\r
456 if (cs instanceof ResidueColourScheme)
\r
457 ( (ResidueColourScheme) cs).setThreshold(groups[i].getPidThreshold());
\r
458 else if (cs instanceof ScoreColourScheme)
\r
459 ( (ScoreColourScheme) cs).setThreshold(groups[i].getPidThreshold());
\r
462 jalview.datamodel.SequenceGroup sg = new jalview.datamodel.SequenceGroup
\r
463 (groups[i].getName(),
\r
465 groups[i].getDisplayBoxes(),
\r
466 groups[i].getDisplayText(),
\r
467 groups[i].getColourText(),
\r
468 groups[i].getStart(),
\r
469 groups[i].getEnd()) ;
\r
470 sg.setOutlineColour( new java.awt.Color(groups[i].getOutlineColour()));
\r
471 int [] ids = groups[i].getSeq();
\r
472 for(int s=0; s<ids.length; s++)
\r
473 sg.addSequence( (jalview.datamodel.SequenceI)seqids.elementAt( ids[s] ));
\r
475 if(groups[i].getConsThreshold()!=0)
\r
477 jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",
\r
478 ResidueProperties.propHash, 3,
\r
480 sg.getWidth() - 1);
\r
482 c.verdict(false, 25);
\r
483 cs = new ConservationColourScheme(c, cs);
\r
493 Desktop.addInternalFrame(af, view.getTitle(), AlignFrame.NEW_WINDOW_WIDTH, AlignFrame.NEW_WINDOW_HEIGHT);
\r
494 af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(), view.getHeight());
\r
495 af.viewport.setStartRes( view.getStartRes() );
\r
496 af.viewport.setStartSeq( view.getStartSeq() );
\r
497 af.viewport.showConservation = view.getShowConservation();
\r
498 af.viewport.showQuality = view.getShowQuality();
\r
499 af.viewport.showIdentity= view.getShowIdentity();
\r
500 af.viewport.setAbovePIDThreshold( view.getPidSelected() );
\r
501 af.viewport.setColourText( view.getShowColourText() );
\r
502 af.viewport.setConservationSelected( view.getConservationSelected());
\r
503 af.viewport.setShowFullId( view.getShowFullId());
\r
504 af.viewport.setFont( new java.awt.Font( view.getFontName(),
\r
505 view.getFontStyle(),
\r
506 view.getFontSize()));
\r
507 af.alignPanel.fontChanged();
\r
508 af.viewport.setRenderGaps( view.getRenderGaps() );
\r
510 af.viewport.setWrapAlignment( view.getWrapAlignment() );
\r
511 if(view.getWrapAlignment())
\r
513 af.alignPanel.setWrapAlignment(view.getWrapAlignment());
\r
517 af.viewport.setShowAnnotation(view.getShowAnnotation());
\r
518 af.alignPanel.setAnnotationVisible(view.getShowAnnotation());
\r
521 af.viewport.setShowBoxes( view.getShowBoxes() );
\r
522 af.viewport.setShowText( view.getShowText() );
\r
524 ColourSchemeI cs=null;
\r
525 if(view.getBgColour()!=null)
\r
528 if (view.getBgColour().startsWith("ucs"))
\r
529 cs = GetUserColourScheme(jms, view.getBgColour());
\r
531 cs = ColourSchemeProperty.getColour(al, view.getBgColour());
\r
533 if (cs instanceof ConservationColourScheme)
\r
534 ( (ConservationColourScheme) cs).inc = view.getConsThreshold();
\r
536 if (cs instanceof ResidueColourScheme)
\r
537 ( (ResidueColourScheme) cs).setThreshold(view.getPidThreshold());
\r
538 else if (cs instanceof ScoreColourScheme)
\r
539 ( (ScoreColourScheme) cs).setThreshold(view.getPidThreshold());
\r
542 af.viewport.setGlobalColourScheme( cs );
\r
545 af.viewport.setColourAppliesToAllGroups(false);
\r
546 af.changeColour(af.viewport.getGlobalColourScheme());
\r
547 af.viewport.setColourAppliesToAllGroups(true);
\r
550 //LOAD TREES - THIS RELEASE ONLY ALLOWS 1 TREE
\r
551 if(object.getVamsasModel().getTreeCount()>0)
\r
554 af.ShowNewickTree(new jalview.io.NewickFile(
\r
555 (String)object.getVamsasModel().getTree(0)), "Tree");
\r
556 }catch(Exception ex){ex.printStackTrace();}
\r