5 import java.util.jar.*;
\r
7 import jalview.binding.*;
\r
8 import jalview.schemes.*;
\r
9 import javax.swing.JInternalFrame;
\r
12 public class Jalview2XML
\r
15 // SAVES SEVERAL ALIGNEMENT WINDOWS TO SAME JARFILE
\r
16 public static void SaveState(File statefile)
\r
18 long creation = System.currentTimeMillis();
\r
19 JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
21 FileOutputStream fos = new FileOutputStream(statefile);
\r
22 JarOutputStream jout = new JarOutputStream(fos);
\r
23 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
24 ////////////////////////////////////////////////////
\r
25 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));
\r
27 Vector shortNames = new Vector();
\r
28 for (int i = 0; i < frames.length; i++)
\r
30 if (frames[i] instanceof AlignFrame)
\r
32 AlignFrame af = (AlignFrame) frames[i];
\r
34 String shortName = af.getTitle();
\r
36 shortName = shortName.replace('/', '_');
\r
37 shortName = shortName.replace('\\', '_');
\r
40 while( shortNames.contains(shortName) )
\r
42 if(shortName.endsWith("_"+(count-1)))
\r
43 shortName = shortName.substring(0, shortName.lastIndexOf("_"));
\r
45 shortName = shortName.concat("_"+count);
\r
48 shortNames.addElement(shortName);
\r
50 if(!shortName.endsWith(".xml"))
\r
51 shortName = shortName+".xml";
\r
53 SaveState( af, creation, shortName, jout, out);
\r
59 catch(Exception ex){ex.printStackTrace();}
\r
62 // USE THIS METHOD TO SAVE A SINGLE ALIGNMENT WINDOW
\r
63 public static void SaveState( AlignFrame af, String jarFile, String fileName)
\r
66 FileOutputStream fos = new FileOutputStream(jarFile);
\r
67 JarOutputStream jout = new JarOutputStream(fos);
\r
68 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
69 ////////////////////////////////////////////////////
\r
70 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));
\r
72 SaveState(af, System.currentTimeMillis(), fileName, jout, out);
\r
75 }catch(Exception ex){}
\r
78 public static void SaveState( AlignFrame af, long timeStamp,
\r
79 String fileName, JarOutputStream jout, PrintWriter out)
\r
82 Vector seqids = new Vector();
\r
84 AlignViewport av = af.viewport;
\r
86 JalviewModel object = new JalviewModel();
\r
87 object.setVamsasModel( new VamsasModel() );
\r
89 object.setCreationDate( new java.util.Date(timeStamp) );
\r
91 jalview.datamodel.AlignmentI jal = af.viewport.alignment;
\r
93 SequenceSet vamsasSet = new SequenceSet();
\r
95 JalviewModelSequence jms = new JalviewModelSequence();
\r
97 vamsasSet.setGapChar(jal.getGapCharacter()+"");
\r
104 for(int i=0; i<jal.getHeight(); i++)
\r
106 seqids.add(jal.getSequenceAt(i));
\r
108 vamsasSeq = new Sequence( );
\r
109 vamsasSeq.setId(id+"");
\r
110 vamsasSeq.setName(jal.getSequenceAt(i).getName());
\r
111 vamsasSeq.setSequence(jal.getSequenceAt(i).getSequence());
\r
114 jseq.setStart(jal.getSequenceAt(i).getStart());
\r
115 jseq.setEnd(jal.getSequenceAt(i).getEnd());
\r
117 jseq.setColour(jal.getSequenceAt(i).getColor().getRGB());
\r
122 vamsasSet.addSequence(vamsasSeq);
\r
127 if(af.viewport.currentTree!=null)
\r
129 object.getVamsasModel().addTree(af.viewport.currentTree.toString());
\r
133 if(jal.getAlignmentAnnotation()!=null)
\r
136 jalview.datamodel.AlignmentAnnotation [] aa = jal.getAlignmentAnnotation();
\r
137 for(int i=0; i<aa.length; i++)
\r
139 if(aa[i].label.equals("Quality")
\r
140 || aa[i].label.equals("Conservation")
\r
141 || aa[i].label.equals("Consensus"))
\r
144 Annotation an = new Annotation();
\r
145 an.setDescription(aa[i].description);
\r
146 an.setGraph(aa[i].isGraph);
\r
147 an.setLabel(aa[i].label);
\r
149 AnnotationElement ae;
\r
151 for(int a=0; a<aa[i].annotations.length; a++)
\r
153 if(aa[i]==null || aa[i].annotations[a]==null)
\r
156 ae = new AnnotationElement();
\r
157 ae.setDescription(aa[i].annotations[a].description);
\r
158 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
159 ae.setValue(aa[i].annotations[a].value);
\r
161 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure+"");
\r
162 an.addAnnotationElement(ae);
\r
165 vamsasSet.addAnnotation(an);
\r
171 if(jal.getGroups()!=null)
\r
173 JGroup [] groups = new JGroup[jal.getGroups().size()];
\r
174 for(int i=0; i<groups.length; i++)
\r
176 groups[i] = new JGroup();
\r
177 jalview.datamodel.SequenceGroup sg
\r
178 = (jalview.datamodel.SequenceGroup)jal.getGroups().elementAt(i);
\r
179 groups[i].setStart( sg.getStartRes() );
\r
180 groups[i].setEnd( sg.getEndRes() );
\r
181 groups[i].setName( sg.getName());
\r
183 if(sg.cs instanceof ConservationColourScheme)
\r
184 groups[i].setConsThreshold( ((ConservationColourScheme)sg.cs).inc);
\r
186 if (sg.cs instanceof ResidueColourScheme)
\r
187 groups[i].setPidThreshold( ( (ResidueColourScheme) sg.cs).getThreshold());
\r
188 else if (sg.cs instanceof ScoreColourScheme)
\r
189 groups[i].setPidThreshold( ( (ScoreColourScheme) sg.cs).getThreshold());
\r
192 groups[i].setColour( ColourSchemeProperty.getColourName(sg.cs) );
\r
193 groups[i].setOutlineColour(sg.getOutlineColour().getRGB());
\r
194 groups[i].setDisplayBoxes(sg.getDisplayBoxes());
\r
195 groups[i].setDisplayText(sg.getDisplayText());
\r
196 groups[i].setColourText(sg.getColourText());
\r
198 for(int s=0; s<sg.getSize(); s++)
\r
200 jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence)sg.getSequenceAt(s);
\r
201 int index = seqids.indexOf(seq);
\r
202 groups[i].addSeq(index);
\r
207 jms.setJGroup(groups);
\r
211 ///////////SAVE VIEWPORT
\r
212 Viewport view = new Viewport();
\r
213 view.setTitle(af.getTitle());
\r
214 view.setXpos(af.getX());
\r
215 view.setYpos(af.getY());
\r
216 view.setWidth(af.getWidth());
\r
217 view.setHeight(af.getHeight());
\r
218 view.setStartRes(av.startRes);
\r
219 view.setStartSeq(av.startSeq);
\r
220 view.setBgColour( ColourSchemeProperty.getColourName
\r
221 ( av.getGlobalColourScheme()));
\r
223 ColourSchemeI cs = av.getGlobalColourScheme();
\r
224 if(cs instanceof ConservationColourScheme)
\r
225 view.setConsThreshold( ((ConservationColourScheme)cs).inc);
\r
227 if (cs instanceof ResidueColourScheme)
\r
228 view.setPidThreshold( ( (ResidueColourScheme) cs).getThreshold());
\r
229 else if (cs instanceof ScoreColourScheme)
\r
230 view.setPidThreshold( ( (ScoreColourScheme) cs).getThreshold());
\r
233 view.setConservationSelected(av.getConservationSelected());
\r
234 view.setPidSelected(av.getAbovePIDThreshold());
\r
235 view.setFontName(av.font.getFontName());
\r
236 view.setFontSize(av.font.getSize());
\r
237 view.setFontStyle(av.font.getStyle());
\r
238 view.setRenderGaps(av.renderGaps);
\r
239 view.setShowAnnotation(av.getShowAnnotation());
\r
240 view.setShowBoxes(av.getShowBoxes());
\r
241 view.setShowColourText(av.getColourText());
\r
242 view.setShowConservation(av.showConservation);
\r
243 view.setShowFullId(av.getShowFullId());
\r
244 view.setShowIdentity(av.showIdentity);
\r
245 view.setShowQuality(av.showQuality);
\r
246 view.setShowSequenceFeatures(av.showSequenceFeatures);
\r
247 view.setShowText(av.getShowText());
\r
248 view.setWrapAlignment(av.getWrapAlignment());
\r
250 jms.addViewport( view );
\r
252 object.setJalviewModelSequence(jms);
\r
253 object.getVamsasModel().addSequenceSet(vamsasSet);
\r
258 if(!fileName.endsWith(".xml"))
\r
259 fileName = fileName+".xml";
\r
261 JarEntry entry = new JarEntry(fileName);
\r
262 jout.putNextEntry(entry);
\r
264 object.marshal(out);
\r
266 catch (Exception ex)
\r
268 ex.printStackTrace();
\r
273 public static void LoadJalviewAlign(String file)
\r
275 JalviewModel object = new JalviewModel();
\r
277 //UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING
\r
278 JarInputStream jin = new JarInputStream(new FileInputStream(file));
\r
279 JarEntry jarentry=null;
\r
280 int entryCount = 1;
\r
282 jin = new JarInputStream(new FileInputStream(file));
\r
283 for(int i=0; i<entryCount; i++)
\r
284 jarentry = jin.getNextJarEntry();
\r
288 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
289 object = (JalviewModel) object.unmarshal(in);
\r
290 LoadFromObject(object);
\r
293 }while(jarentry!=null);
\r
296 catch(Exception ex)
\r
297 { System.out.println("HERE"+ex); return; }
\r
301 static void LoadFromObject(JalviewModel object)
\r
303 Vector seqids = new Vector();
\r
304 SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0);
\r
305 Sequence [] vamsasSeq = vamsasSet.getSequence();
\r
307 JalviewModelSequence jms = object.getJalviewModelSequence();
\r
308 //////////////////////////////////
\r
310 jalview.datamodel.Sequence [] jseqs = new jalview.datamodel.Sequence[vamsasSeq.length];
\r
311 JSeq [] JSEQ = object.getJalviewModelSequence().getJSeq();
\r
312 for(int i=0; i<vamsasSeq.length; i++)
\r
314 jseqs[i] = new jalview.datamodel.Sequence(vamsasSeq[i].getName(),
\r
315 vamsasSeq[i].getSequence());
\r
317 jseqs[i].setStart( JSEQ[i].getStart());
\r
318 jseqs[i].setEnd( JSEQ[i].getEnd());
\r
319 jseqs[i].setColor( new java.awt.Color(JSEQ[i].getColour()) );
\r
320 seqids.add(jseqs[i]);
\r
323 /////////////////////////////////
\r
324 jalview.datamodel.Alignment al = new jalview.datamodel.Alignment(jseqs);
\r
325 /////////////////////////////////
\r
327 //////////////////////////////////
\r
329 if(vamsasSet.getAnnotation()!=null)
\r
331 Annotation[] an = vamsasSet.getAnnotation();
\r
332 for (int i = 0; i < an.length; i++)
\r
334 AnnotationElement[] ae = an[i].getAnnotationElement();
\r
335 jalview.datamodel.Annotation anot[]
\r
336 = new jalview.datamodel.Annotation[al.getWidth()];
\r
337 for (int aa = 0; aa < ae.length; aa++)
\r
339 anot[ae[aa].getPosition()]
\r
340 = new jalview.datamodel.Annotation(
\r
341 ae[aa].getDisplayCharacter(),
\r
342 ae[aa].getDescription(),
\r
343 ae[aa].getSecondaryStructure().charAt(0),
\r
349 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
350 if(an[i].getGraph())
\r
351 jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
\r
352 an[i].getDescription(), anot,
\r
355 jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
\r
356 an[i].getDescription(), anot);
\r
357 al.addAnnotation(jaa);
\r
361 /////////////////////////////////
\r
363 Viewport[] views = jms.getViewport();
\r
364 Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER
\r
366 AlignFrame af = new AlignFrame(al);
\r
367 // af.changeColour() );
\r
369 /////////////////////////
\r
371 if (jms.getJGroupCount()>0)
\r
373 JGroup[] groups = jms.getJGroup();
\r
374 for (int i = 0; i < groups.length; i++)
\r
376 ColourSchemeI cs = ColourSchemeProperty.getColour(al, groups[i].getColour() );
\r
377 if (cs instanceof ResidueColourScheme)
\r
378 ( (ResidueColourScheme) cs).setThreshold(groups[i].getPidThreshold());
\r
379 else if (cs instanceof ScoreColourScheme)
\r
380 ( (ScoreColourScheme) cs).setThreshold(groups[i].getPidThreshold());
\r
382 jalview.datamodel.SequenceGroup sg = new jalview.datamodel.SequenceGroup
\r
383 (groups[i].getName(),
\r
385 groups[i].getDisplayBoxes(),
\r
386 groups[i].getDisplayText(),
\r
387 groups[i].getColourText(),
\r
388 groups[i].getStart(),
\r
389 groups[i].getEnd()) ;
\r
390 sg.setOutlineColour( new java.awt.Color(groups[i].getOutlineColour()));
\r
391 int [] ids = groups[i].getSeq();
\r
392 for(int s=0; s<ids.length; s++)
\r
393 sg.addSequence( (jalview.datamodel.SequenceI)seqids.elementAt( ids[s] ));
\r
395 if(groups[i].getConsThreshold()!=0)
\r
397 jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",
\r
398 ResidueProperties.propHash, 3,
\r
400 sg.getWidth() - 1);
\r
402 c.verdict(false, 25);
\r
403 cs = new ConservationColourScheme(c, cs);
\r
413 Desktop.addInternalFrame(af, view.getTitle(), AlignFrame.NEW_WINDOW_WIDTH, AlignFrame.NEW_WINDOW_HEIGHT);
\r
414 af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(), view.getHeight());
\r
415 af.viewport.setStartRes( view.getStartRes() );
\r
416 af.viewport.setStartSeq( view.getStartSeq() );
\r
417 af.viewport.showConservation = view.getShowConservation();
\r
418 af.viewport.showQuality = view.getShowQuality();
\r
419 af.viewport.showIdentity= view.getShowIdentity();
\r
420 af.viewport.setAbovePIDThreshold( view.getPidSelected() );
\r
421 af.viewport.setColourText( view.getShowColourText() );
\r
422 af.viewport.setConservationSelected( view.getConservationSelected());
\r
423 af.viewport.setShowFullId( view.getShowFullId());
\r
424 af.viewport.setFont( new java.awt.Font( view.getFontName(),
\r
425 view.getFontStyle(),
\r
426 view.getFontSize()));
\r
427 af.alignPanel.fontChanged();
\r
428 af.viewport.setRenderGaps( view.getRenderGaps() );
\r
430 af.viewport.setWrapAlignment( view.getWrapAlignment() );
\r
431 if(view.getWrapAlignment())
\r
433 af.alignPanel.setWrapAlignment(view.getWrapAlignment());
\r
437 af.viewport.setShowAnnotation(view.getShowAnnotation());
\r
438 af.alignPanel.setAnnotationVisible(view.getShowAnnotation());
\r
441 af.viewport.setShowBoxes( view.getShowBoxes() );
\r
442 af.viewport.setShowText( view.getShowText() );
\r
444 af.viewport.setGlobalColourScheme( ColourSchemeProperty.getColour(al, view.getBgColour()));
\r
445 af.viewport.setColourAppliesToAllGroups(false);
\r
446 af.changeColour( af.viewport.getGlobalColourScheme() );
\r
447 af.viewport.setColourAppliesToAllGroups(true);
\r
449 ColourSchemeI cs = af.viewport.getGlobalColourScheme();
\r
450 if(cs instanceof ConservationColourScheme)
\r
451 ( (ConservationColourScheme) cs).inc = view.getConsThreshold();
\r
453 if (cs instanceof ResidueColourScheme)
\r
454 ( (ResidueColourScheme) cs).setThreshold(view.getPidThreshold());
\r
455 else if (cs instanceof ScoreColourScheme)
\r
456 ( (ScoreColourScheme) cs).setThreshold(view.getPidThreshold());
\r
458 //LOAD TREES - THIS RELEASE ONLY ALLOWS 1 TREE
\r
459 if(object.getVamsasModel().getTreeCount()>0)
\r
462 af.ShowNewickTree(new jalview.io.NewickFile(
\r
463 (String)object.getVamsasModel().getTree(0)), "Tree");
\r
464 }catch(Exception ex){ex.printStackTrace();}
\r