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 public static void SaveState(File statefile)
\r
17 long creation = System.currentTimeMillis();
\r
18 JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
20 JalviewState state = new JalviewState();
\r
22 Vector shortNames = new Vector();
\r
23 for (int i = 0; i < frames.length; i++)
\r
25 if (frames[i] instanceof AlignFrame)
\r
27 AlignFrame af = (AlignFrame) frames[i];
\r
29 String shortName = af.getTitle();
\r
31 shortName = shortName.replace('/', '_');
\r
32 shortName = shortName.replace('\\', '_');
\r
33 String jarFile = statefile.getParent()+File.separatorChar+shortName+".jar";
\r
36 while( shortNames.contains(shortName) )
\r
38 if(shortName.endsWith("_"+(count-1)))
\r
39 shortName = shortName.substring(0, shortName.lastIndexOf("_"));
\r
41 shortName = shortName.concat("_"+count);
\r
44 shortNames.addElement(shortName);
\r
46 if(!shortName.endsWith(".xml"))
\r
47 shortName = shortName+".xml";
\r
49 jarFile = statefile.getParent()+File.separatorChar+shortName+".jar";
\r
51 SaveState( af, creation, shortName, jarFile);
\r
52 state.addFile(jarFile);
\r
56 PrintWriter out = new PrintWriter(new FileWriter(statefile));
\r
60 catch(Exception ex){ex.printStackTrace();}
\r
64 public static void SaveState( AlignFrame af, long timeStamp, String fileName, String jarFile)
\r
67 Vector seqids = new Vector();
\r
69 AlignViewport av = af.viewport;
\r
71 JalviewModel object = new JalviewModel();
\r
72 object.setVamsasModel( new VamsasModel() );
\r
74 object.setCreationDate( new java.util.Date(timeStamp) );
\r
76 jalview.datamodel.AlignmentI jal = af.viewport.alignment;
\r
78 SequenceSet vamsasSet = new SequenceSet();
\r
80 JalviewModelSequence jms = new JalviewModelSequence();
\r
82 vamsasSet.setGapChar(jal.getGapCharacter()+"");
\r
89 for(int i=0; i<jal.getHeight(); i++)
\r
91 seqids.add(jal.getSequenceAt(i));
\r
93 vamsasSeq = new Sequence( );
\r
94 vamsasSeq.setId(id+"");
\r
95 vamsasSeq.setName(jal.getSequenceAt(i).getName());
\r
96 vamsasSeq.setSequence(jal.getSequenceAt(i).getSequence());
\r
99 jseq.setStart(jal.getSequenceAt(i).getStart());
\r
100 jseq.setEnd(jal.getSequenceAt(i).getEnd());
\r
102 jseq.setColour(jal.getSequenceAt(i).getColor().getRGB());
\r
107 vamsasSet.addSequence(vamsasSeq);
\r
112 if(af.viewport.currentTree!=null)
\r
114 object.getVamsasModel().addTree(af.viewport.currentTree.toString());
\r
118 if(jal.getAlignmentAnnotation()!=null)
\r
121 jalview.datamodel.AlignmentAnnotation [] aa = jal.getAlignmentAnnotation();
\r
122 for(int i=0; i<aa.length; i++)
\r
124 if(aa[i].label.equals("Quality")
\r
125 || aa[i].label.equals("Conservation")
\r
126 || aa[i].label.equals("Consensus"))
\r
129 Annotation an = new Annotation();
\r
130 an.setDescription(aa[i].description);
\r
131 an.setGraph(aa[i].isGraph);
\r
132 an.setLabel(aa[i].label);
\r
134 AnnotationElement ae;
\r
136 for(int a=0; a<aa[i].annotations.length; a++)
\r
138 if(aa[i]==null || aa[i].annotations[a]==null)
\r
141 ae = new AnnotationElement();
\r
142 ae.setDescription(aa[i].annotations[a].description);
\r
143 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
144 ae.setValue(aa[i].annotations[a].value);
\r
146 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure+"");
\r
147 an.addAnnotationElement(ae);
\r
150 vamsasSet.addAnnotation(an);
\r
156 if(jal.getGroups()!=null)
\r
158 JGroup [] groups = new JGroup[jal.getGroups().size()];
\r
159 for(int i=0; i<groups.length; i++)
\r
161 groups[i] = new JGroup();
\r
162 jalview.datamodel.SequenceGroup sg
\r
163 = (jalview.datamodel.SequenceGroup)jal.getGroups().elementAt(i);
\r
164 groups[i].setStart( sg.getStartRes() );
\r
165 groups[i].setEnd( sg.getEndRes() );
\r
166 groups[i].setName( sg.getName());
\r
168 if(sg.cs instanceof ConservationColourScheme)
\r
169 groups[i].setConsThreshold( ((ConservationColourScheme)sg.cs).inc);
\r
171 if (sg.cs instanceof ResidueColourScheme)
\r
172 groups[i].setPidThreshold( ( (ResidueColourScheme) sg.cs).getThreshold());
\r
173 else if (sg.cs instanceof ScoreColourScheme)
\r
174 groups[i].setPidThreshold( ( (ScoreColourScheme) sg.cs).getThreshold());
\r
177 groups[i].setColour( ColourSchemeProperty.getColourName(sg.cs) );
\r
178 groups[i].setOutlineColour(sg.getOutlineColour().getRGB());
\r
179 groups[i].setDisplayBoxes(sg.getDisplayBoxes());
\r
180 groups[i].setDisplayText(sg.getDisplayText());
\r
181 groups[i].setColourText(sg.getColourText());
\r
183 for(int s=0; s<sg.getSize(); s++)
\r
185 jalview.datamodel.Sequence seq = (jalview.datamodel.Sequence)sg.getSequenceAt(s);
\r
186 int index = seqids.indexOf(seq);
\r
187 groups[i].addSeq(index);
\r
192 jms.setJGroup(groups);
\r
196 ///////////SAVE VIEWPORT
\r
197 Viewport view = new Viewport();
\r
198 view.setTitle(af.getTitle());
\r
199 view.setXpos(af.getX());
\r
200 view.setYpos(af.getY());
\r
201 view.setWidth(af.getWidth());
\r
202 view.setHeight(af.getHeight());
\r
203 view.setStartRes(av.startRes);
\r
204 view.setStartSeq(av.startSeq);
\r
205 view.setBgColour( ColourSchemeProperty.getColourName
\r
206 ( av.getGlobalColourScheme()));
\r
208 ColourSchemeI cs = av.getGlobalColourScheme();
\r
209 if(cs instanceof ConservationColourScheme)
\r
210 view.setConsThreshold( ((ConservationColourScheme)cs).inc);
\r
212 if (cs instanceof ResidueColourScheme)
\r
213 view.setPidThreshold( ( (ResidueColourScheme) cs).getThreshold());
\r
214 else if (cs instanceof ScoreColourScheme)
\r
215 view.setPidThreshold( ( (ScoreColourScheme) cs).getThreshold());
\r
218 view.setConservationSelected(av.getConservationSelected());
\r
219 view.setPidSelected(av.getAbovePIDThreshold());
\r
220 view.setFontName(av.font.getFontName());
\r
221 view.setFontSize(av.font.getSize());
\r
222 view.setFontStyle(av.font.getStyle());
\r
223 view.setRenderGaps(av.renderGaps);
\r
224 view.setShowAnnotation(av.getShowAnnotation());
\r
225 view.setShowBoxes(av.getShowBoxes());
\r
226 view.setShowColourText(av.getColourText());
\r
227 view.setShowConservation(av.showConservation);
\r
228 view.setShowFullId(av.getShowFullId());
\r
229 view.setShowIdentity(av.showIdentity);
\r
230 view.setShowQuality(av.showQuality);
\r
231 view.setShowSequenceFeatures(av.showSequenceFeatures);
\r
232 view.setShowText(av.getShowText());
\r
233 view.setWrapAlignment(av.getWrapAlignment());
\r
235 jms.addViewport( view );
\r
237 object.setJalviewModelSequence(jms);
\r
238 object.getVamsasModel().addSequenceSet(vamsasSet);
\r
244 FileOutputStream fos = new FileOutputStream(jarFile);
\r
246 //PUT IT IN THIS JARFILE
\r
247 JarOutputStream jout = new JarOutputStream(fos);
\r
249 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
250 ////////////////////////////////////////////////////
\r
251 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout, "UTF-8"));
\r
253 if(!fileName.endsWith(".xml"))
\r
254 fileName = fileName+".xml";
\r
256 JarEntry entry = new JarEntry(fileName);
\r
257 jout.putNextEntry(entry);
\r
259 object.marshal(out);
\r
264 catch (Exception ex)
\r
266 ex.printStackTrace();
\r
270 public static void LoadState(String file)
\r
273 JalviewState state = new JalviewState();
\r
274 BufferedReader in = new BufferedReader(new FileReader(file));
\r
275 state = (JalviewState)state.unmarshal(in);
\r
276 Enumeration en = state.enumerateFile();
\r
277 while( en.hasMoreElements() )
\r
279 LoadJalviewAlign( en.nextElement().toString());
\r
282 catch(Exception ex)
\r
283 { ex.printStackTrace(); return; }
\r
286 public static void LoadJalviewAlign(String file)
\r
288 JalviewModel object = new JalviewModel();
\r
289 Vector seqids = new Vector();
\r
291 FileInputStream fis = new FileInputStream(file);
\r
292 JarInputStream jin = new JarInputStream(fis);
\r
293 jin.getNextJarEntry();
\r
294 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
295 object = (JalviewModel) object.unmarshal(in);
\r
297 catch(Exception ex)
\r
298 { System.out.println(ex); return; }
\r
301 SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0);
\r
302 Sequence [] vamsasSeq = vamsasSet.getSequence();
\r
304 JalviewModelSequence jms = object.getJalviewModelSequence();
\r
305 //////////////////////////////////
\r
307 jalview.datamodel.Sequence [] jseqs = new jalview.datamodel.Sequence[vamsasSeq.length];
\r
308 JSeq [] JSEQ = object.getJalviewModelSequence().getJSeq();
\r
309 for(int i=0; i<vamsasSeq.length; i++)
\r
311 jseqs[i] = new jalview.datamodel.Sequence(vamsasSeq[i].getName(),
\r
312 vamsasSeq[i].getSequence());
\r
314 jseqs[i].setStart( JSEQ[i].getStart());
\r
315 jseqs[i].setEnd( JSEQ[i].getEnd());
\r
316 jseqs[i].setColor( new java.awt.Color(JSEQ[i].getColour()) );
\r
317 seqids.add(jseqs[i]);
\r
320 /////////////////////////////////
\r
321 jalview.datamodel.Alignment al = new jalview.datamodel.Alignment(jseqs);
\r
322 /////////////////////////////////
\r
324 //////////////////////////////////
\r
326 if(vamsasSet.getAnnotation()!=null)
\r
328 Annotation[] an = vamsasSet.getAnnotation();
\r
329 for (int i = 0; i < an.length; i++)
\r
331 AnnotationElement[] ae = an[i].getAnnotationElement();
\r
332 jalview.datamodel.Annotation anot[]
\r
333 = new jalview.datamodel.Annotation[al.getWidth()];
\r
334 for (int aa = 0; aa < ae.length; aa++)
\r
336 anot[ae[aa].getPosition()]
\r
337 = new jalview.datamodel.Annotation(
\r
338 ae[aa].getDisplayCharacter(),
\r
339 ae[aa].getDescription(),
\r
340 ae[aa].getSecondaryStructure().charAt(0),
\r
346 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
347 if(an[i].getGraph())
\r
348 jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
\r
349 an[i].getDescription(), anot,
\r
352 jaa = new jalview.datamodel.AlignmentAnnotation(an[i].getLabel(),
\r
353 an[i].getDescription(), anot);
\r
354 al.addAnnotation(jaa);
\r
358 /////////////////////////////////
\r
360 Viewport[] views = jms.getViewport();
\r
361 Viewport view = views[0]; // DEAL WITH MULTIPLE VIEWPORTS LATER
\r
363 AlignFrame af = new AlignFrame(al);
\r
364 // af.changeColour() );
\r
366 /////////////////////////
\r
368 if (jms.getJGroupCount()>0)
\r
370 JGroup[] groups = jms.getJGroup();
\r
371 for (int i = 0; i < groups.length; i++)
\r
373 ColourSchemeI cs = ColourSchemeProperty.getColour(al, groups[i].getColour() );
\r
374 if (cs instanceof ResidueColourScheme)
\r
375 ( (ResidueColourScheme) cs).setThreshold(groups[i].getPidThreshold());
\r
376 else if (cs instanceof ScoreColourScheme)
\r
377 ( (ScoreColourScheme) cs).setThreshold(groups[i].getPidThreshold());
\r
379 jalview.datamodel.SequenceGroup sg = new jalview.datamodel.SequenceGroup
\r
380 (groups[i].getName(),
\r
382 groups[i].getDisplayBoxes(),
\r
383 groups[i].getDisplayText(),
\r
384 groups[i].getColourText(),
\r
385 groups[i].getStart(),
\r
386 groups[i].getEnd()) ;
\r
387 sg.setOutlineColour( new java.awt.Color(groups[i].getOutlineColour()));
\r
388 int [] ids = groups[i].getSeq();
\r
389 for(int s=0; s<ids.length; s++)
\r
390 sg.addSequence( (jalview.datamodel.SequenceI)seqids.elementAt( ids[s] ));
\r
392 if(groups[i].getConsThreshold()!=0)
\r
394 jalview.analysis.Conservation c = new jalview.analysis.Conservation("All",
\r
395 ResidueProperties.propHash, 3,
\r
397 sg.getWidth() - 1);
\r
399 c.verdict(false, 25);
\r
400 cs = new ConservationColourScheme(c, cs);
\r
410 Desktop.addInternalFrame(af, view.getTitle(), AlignFrame.NEW_WINDOW_WIDTH, AlignFrame.NEW_WINDOW_HEIGHT);
\r
411 af.setBounds(view.getXpos(), view.getYpos(), view.getWidth(), view.getHeight());
\r
412 af.viewport.setStartRes( view.getStartRes() );
\r
413 af.viewport.setStartSeq( view.getStartSeq() );
\r
414 af.viewport.setAbovePIDThreshold( view.getPidSelected() );
\r
415 af.viewport.setColourText( view.getShowColourText() );
\r
416 af.viewport.setConservationSelected( view.getConservationSelected());
\r
417 af.viewport.setShowFullId( view.getShowFullId());
\r
418 af.viewport.setFont( new java.awt.Font( view.getFontName(),
\r
419 view.getFontStyle(),
\r
420 view.getFontSize()));
\r
421 af.alignPanel.fontChanged();
\r
422 af.viewport.setRenderGaps( view.getRenderGaps() );
\r
424 af.viewport.setWrapAlignment( view.getWrapAlignment() );
\r
425 if(view.getWrapAlignment())
\r
427 af.alignPanel.setWrapAlignment(view.getWrapAlignment());
\r
431 af.viewport.setShowAnnotation(view.getShowAnnotation());
\r
432 af.alignPanel.setAnnotationVisible(view.getShowAnnotation());
\r
435 af.viewport.setShowBoxes( view.getShowBoxes() );
\r
436 af.viewport.setShowText( view.getShowText() );
\r
438 af.viewport.setGlobalColourScheme( ColourSchemeProperty.getColour(al, view.getBgColour()));
\r
439 af.viewport.setColourAppliesToAllGroups(false);
\r
440 af.changeColour( af.viewport.getGlobalColourScheme() );
\r
441 af.viewport.setColourAppliesToAllGroups(true);
\r
443 ColourSchemeI cs = af.viewport.getGlobalColourScheme();
\r
444 if(cs instanceof ConservationColourScheme)
\r
445 ( (ConservationColourScheme) cs).inc = view.getConsThreshold();
\r
447 if (cs instanceof ResidueColourScheme)
\r
448 ( (ResidueColourScheme) cs).setThreshold(view.getPidThreshold());
\r
449 else if (cs instanceof ScoreColourScheme)
\r
450 ( (ScoreColourScheme) cs).setThreshold(view.getPidThreshold());
\r
452 //LOAD TREES - THIS RELEASE ONLY ALLOWS 1 TREE
\r
453 if(object.getVamsasModel().getTreeCount()>0)
\r
456 af.ShowNewickTree(new jalview.io.NewickFile(
\r
457 (String)object.getVamsasModel().getTree(0)), "Tree");
\r
458 }catch(Exception ex){ex.printStackTrace();}
\r