2 * Jalview - A Sequence Alignment Editor and Viewer
\r
3 * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\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
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
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
22 import org.vamsas.objects.core.*;
\r
24 import jalview.gui.*;
\r
26 import java.util.jar.*;
\r
31 org.exolab.castor.util.LocalConfiguration.getInstance().getProperties().setProperty(
\r
32 "org.exolab.castor.serializer", "org.apache.xml.serialize.XMLSerilazizer");
\r
37 public class VamsasDatastore
\r
40 org.exolab.castor.types.Date date
\r
41 = new org.exolab.castor.types.Date(new java.util.Date());
\r
43 public VamsasDatastore(AlignViewport av)
\r
48 public void store(String file)
\r
55 public VAMSAS storeVAMSAS(String file)
\r
57 long time = System.currentTimeMillis();
\r
58 VAMSAS vamsas = new VAMSAS();
\r
62 FileOutputStream fos = new FileOutputStream(file);
\r
63 JarOutputStream jout = new JarOutputStream(fos);
\r
66 ////////////////////////////////////////////////////
\r
67 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
68 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout,
\r
71 jalview.datamodel.AlignmentI jal = av.getAlignment();
\r
74 ///////////////////////////////////////////
\r
76 DataSet dataset = new DataSet();
\r
77 vamsas.addDataSet(dataset);
\r
81 for (int i = 0; i < jal.getHeight(); i++)
\r
83 sequence = new Sequence();
\r
84 sequence.setSequence(jal.getDataset().getSequenceAt(i).getSequence());
\r
85 sequence.setName(jal.getDataset().getSequenceAt(i).getName());
\r
86 sequence.setStart(jal.getDataset().getSequenceAt(i).getStart());
\r
87 sequence.setEnd(jal.getDataset().getSequenceAt(i).getEnd());
\r
90 if(jal.getDataset().getSequenceAt(i).getSequenceFeatures()!=null)
\r
92 int sfSize = jal.getDataset().getSequenceAt(i).getSequenceFeatures().size();
\r
94 for (int sf = 0; sf < sfSize; sf++)
\r
96 jalview.datamodel.SequenceFeature feature =
\r
97 (jalview.datamodel.SequenceFeature)
\r
98 jal.getDataset().getSequenceAt(i).getSequenceFeatures().elementAt(sf);
\r
100 DataSetAnnotations dsa = new DataSetAnnotations();
\r
101 dsa.setType(feature.getType());
\r
102 dsa.setBegin(feature.getBegin());
\r
103 dsa.setEnd(feature.getEnd());
\r
104 dsa.setDescription(feature.getDescription());
\r
105 dsa.setStatus(feature.getStatus());
\r
106 dsa.addProvenance(dummyProvenance());
\r
107 dsa.setSeqRef(sequence);
\r
108 dsa.setId("sf"+(time++));
\r
109 dataset.addDataSetAnnotations(dsa);
\r
113 if(jal.getDataset().getSequenceAt(i).getDBRef()!=null)
\r
115 java.util.Vector entries = jal.getDataset().getSequenceAt(i).getDBRef();
\r
116 jalview.datamodel.DBRefEntry dbentry;
\r
117 for(int db=0; db<entries.size(); db++)
\r
119 dbentry = (jalview.datamodel.DBRefEntry)entries.elementAt(db);
\r
120 dbref = new DbRef();
\r
121 dbref.setAccessionId( dbentry.getAccessionId() );
\r
122 dbref.setSource( dbentry.getSource() );
\r
123 dbref.setVersion( dbentry.getVersion() );
\r
124 dbref.setId("db"+(time++));
\r
125 sequence.addDbRef(dbref);
\r
131 if(jal.getDataset().getSequenceAt(i).getVamsasId()==null)
\r
132 sequence.setId("ds" + (time++));
\r
134 sequence.setId(jal.getDataset().getSequenceAt(i).getVamsasId());
\r
136 dataset.addSequence(sequence);
\r
138 dataset.setProvenance(getVamsasProvenance(jal.getDataset().getProvenance()));
\r
139 //////////////////////////////////////////////
\r
142 //////////////////////////////////////////////
\r
143 //Save the Alignments
\r
144 Alignment alignment = new Alignment();
\r
145 alignment.setGapChar(av.getGapCharacter() + "");
\r
146 AlignmentSequence alseq = null;
\r
147 for (int i = 0; i < jal.getHeight(); i++)
\r
149 alseq = new AlignmentSequence();
\r
151 jal.getSequenceAt(i).getSequence()
\r
153 alseq.setName(jal.getSequenceAt(i).getName());
\r
154 alseq.setStart(jal.getSequenceAt(i).getStart());
\r
155 alseq.setEnd(jal.getSequenceAt(i).getEnd());
\r
156 alseq.setRefid(dataset.getSequence(i));
\r
157 alseq.setId("as" + (time++));
\r
158 alignment.addAlignmentSequence(alseq);
\r
160 alignment.setProvenance(getVamsasProvenance(jal.getProvenance()));
\r
161 dataset.addAlignment(alignment);
\r
162 //////////////////////////////////////////////
\r
166 //////////////////////////////////////////////
\r
168 if (jal.getAlignmentAnnotation() != null)
\r
170 jalview.datamodel.AlignmentAnnotation[] aa = jal.getAlignmentAnnotation();
\r
172 for (int i = 0; i < aa.length; i++)
\r
174 if (aa[i].label.equals("Quality") ||
\r
175 aa[i].label.equals("Conservation") ||
\r
176 aa[i].label.equals("Consensus"))
\r
181 AlignmentAnnotations an = new AlignmentAnnotations();
\r
183 an.setDescription(aa[i].description);
\r
184 an.setGraph(aa[i].isGraph);
\r
185 an.setLabel(aa[i].label);
\r
186 an.setProvenance(dummyProvenance());
\r
188 AnnotationElement ae;
\r
190 for (int a = 0; a < aa[i].annotations.length; a++)
\r
192 if ((aa[i] == null) || (aa[i].annotations[a] == null))
\r
197 ae = new AnnotationElement();
\r
198 ae.setDescription(aa[i].annotations[a].description);
\r
199 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
200 ae.setValue(aa[i].annotations[a].value);
\r
202 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure +
\r
204 an.addAnnotationElement(ae);
\r
207 alignment.addAlignmentAnnotations(an);
\r
210 ///////////////////////////////////////////////////////
\r
213 ////////////////////////////////////////////////
\r
215 ///////////////////////////////////
\r
216 // FIND ANY ASSOCIATED TREES
\r
217 if (Desktop.desktop != null)
\r
219 javax.swing.JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
221 for (int t = 0; t < frames.length; t++)
\r
223 if (frames[t] instanceof TreePanel)
\r
225 TreePanel tp = (TreePanel) frames[t];
\r
227 if (tp.getAlignment() == jal)
\r
229 Tree tree = new Tree();
\r
230 tree.setTitle(tp.getTitle());
\r
231 Newick newick = new Newick();
\r
232 newick.setContent( tp.getTree().toString() );
\r
233 newick.setTitle( tp.getTitle() );
\r
234 newick.setId("t"+(time++));
\r
235 tree.addNewick( newick );
\r
236 tree.setProvenance(dummyProvenance());
\r
237 alignment.addTree(tree);
\r
244 JarEntry entry = new JarEntry("vamsas.xml");
\r
245 jout.putNextEntry(entry);
\r
247 vamsas.marshal(out);
\r
254 catch (Exception ex)
\r
256 ex.printStackTrace();
\r
262 Tree jalview2VamsasTree()
\r
264 Tree tree = new Tree();
\r
270 public void load(String file)
\r
272 VAMSAS vamsas = new VAMSAS() ;
\r
276 FileInputStream fis = new FileInputStream(file);
\r
277 JarInputStream jin = new JarInputStream(fis);
\r
280 ////////////////////////////////////////////////////
\r
281 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
282 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
283 JarEntry jarentry = jin.getNextJarEntry();
\r
284 System.out.println("reading: "+jarentry.getName());
\r
285 vamsas = (VAMSAS) vamsas.unmarshal(in);
\r
288 /////////////////////////////////////
\r
290 DataSet dataset = vamsas.getDataSet(0);
\r
292 int i, iSize = dataset.getSequenceCount();
\r
293 jalview.datamodel.Sequence [] seqs = new jalview.datamodel.Sequence[iSize];
\r
296 for (i = 0; i < iSize ; i++)
\r
298 seqs[i] = new jalview.datamodel.Sequence(
\r
299 dataset.getSequence(i).getName(),
\r
300 dataset.getSequence(i).getSequence(),
\r
301 dataset.getSequence(i).getStart(),
\r
302 dataset.getSequence(i).getEnd() );
\r
303 seqs[i].setVamsasId(dataset.getSequence(i).getId());
\r
305 if (dataset.getDataSetAnnotations() != null)
\r
307 for (int dsa = 0; dsa < dataset.getDataSetAnnotationsCount(); dsa++)
\r
309 if (dataset.getDataSetAnnotations(dsa).getSeqRef() ==
\r
310 dataset.getSequence(i))
\r
312 seqs[i].addSequenceFeature(new jalview.datamodel.
\r
314 dataset.getDataSetAnnotations(dsa).getType(),
\r
315 dataset.getDataSetAnnotations(dsa).getDescription(),
\r
316 dataset.getDataSetAnnotations(dsa).getStatus(),
\r
317 dataset.getDataSetAnnotations(dsa).getBegin(),
\r
318 dataset.getDataSetAnnotations(dsa).getEnd()));
\r
322 dbref = dataset.getSequence(i).getDbRef();
\r
326 for(int db=0; db<dbref.length; db++)
\r
328 seqs[i].addDBRef( new jalview.datamodel.DBRefEntry
\r
330 dbref[db].getSource().toString(),
\r
331 dbref[db].getVersion().toString(),
\r
332 dbref[db].getAccessionId().toString()));
\r
336 jalview.datamodel.Alignment jdataset = new jalview.datamodel.Alignment(seqs);
\r
337 ////////////////////////////////////////////////
\r
340 //////////////////////////////////////
\r
342 Alignment alignment = dataset.getAlignment(0);
\r
343 iSize = alignment.getAlignmentSequenceCount();
\r
344 seqs = new jalview.datamodel.Sequence[iSize];
\r
346 int j, jSize = jdataset.getHeight();
\r
347 for (i = 0; i < iSize; i++)
\r
349 seqs[i] = new jalview.datamodel.Sequence(
\r
350 alignment.getAlignmentSequence(i).getName(),
\r
351 alignment.getAlignmentSequence(i).getSequence(),
\r
352 alignment.getAlignmentSequence(i).getStart(),
\r
353 alignment.getAlignmentSequence(i).getEnd());
\r
355 id = ( (Sequence) alignment.getAlignmentSequence(i).getRefid()).getId();
\r
357 for(j=0; j<jSize; j++)
\r
359 if(jdataset.getSequenceAt(j).getVamsasId().equals(id))
\r
361 seqs[i].setDatasetSequence( jdataset.getSequenceAt(j) );
\r
366 jalview.datamodel.Alignment jal = new jalview.datamodel.Alignment(seqs);
\r
367 jal.setDataset(jdataset);
\r
368 jal.getDataset().setProvenance(
\r
369 getJalviewProvenance(dataset.getProvenance()));
\r
371 getJalviewProvenance(alignment.getProvenance()));
\r
372 //////////////////////////////////////////////
\r
375 ////////////////////////////////////////////
\r
376 ////LOAD ANNOTATIONS
\r
377 ////////////////////
\r
378 if (alignment.getAlignmentAnnotationsCount()>0)
\r
380 AlignmentAnnotations[] an = alignment.getAlignmentAnnotations();
\r
382 for (j = 0; j < an.length; j++)
\r
384 boolean topaliBreakpoint = false;
\r
386 AnnotationElement[] ae = an[j].getAnnotationElement();
\r
387 jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[jal.
\r
392 for (int aa = 0; aa < ae.length; aa++)
\r
394 String dc = ae[aa].getDisplayCharacter()==null ? "dc" : ae[aa].getDisplayCharacter();
\r
395 String desc = ae[aa].getDescription()==null ? "desc" : ae[aa].getDescription();
\r
396 String ss = ae[aa].getSecondaryStructure()==null ? "ss" : ae[aa].getSecondaryStructure();
\r
397 float value = ae[aa].getValue();
\r
399 if(an[j].getGraph())
\r
404 anot[ae[aa].getPosition()-1] = new jalview.datamodel.
\r
405 Annotation(dc,desc,ss.charAt(0),value);
\r
407 if(desc.equals("TOPALi Partition Breakpoint"))
\r
408 topaliBreakpoint = true;
\r
411 }catch(Exception ex)
\r
413 ex.printStackTrace();
\r
414 System.out.println("problem parsing annotations\n"+ex);}
\r
416 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
418 if (an[j].getGraph())
\r
420 jaa = new jalview.datamodel.AlignmentAnnotation(an[j].getLabel(),
\r
421 an[j].getDescription(), anot, 0, 0, 1);
\r
425 String label = an[j].getLabel();
\r
426 if(topaliBreakpoint)
\r
427 label = "TOPALi Partition Breakpoint";
\r
428 jaa = new jalview.datamodel.AlignmentAnnotation(label,
\r
429 an[j].getDescription(), anot);
\r
432 jal.addAnnotation(jaa);
\r
435 /////////////////////////////////
\r
437 AlignFrame alignFrame = new AlignFrame(jal);
\r
438 jalview.gui.Desktop.addInternalFrame(alignFrame, "VAMSAS LOAD",
\r
439 AlignFrame.NEW_WINDOW_WIDTH,
\r
440 AlignFrame.NEW_WINDOW_HEIGHT);
\r
443 ///////////////////////////////////////
\r
444 if (alignment.getTreeCount() > 0)
\r
446 for (int t = 0; t < alignment.getTreeCount(); t++)
\r
448 Tree tree = alignment.getTree(t);
\r
450 alignFrame.ShowNewickTree(
\r
451 new jalview.io.NewickFile(tree.getNewick(0).getContent()),
\r
452 tree.getNewick(0).getTitle(),
\r
454 t * 20 + 50, t * 20 + 50);
\r
462 catch (Exception ex)
\r
464 ex.printStackTrace();
\r
472 Provenance getVamsasProvenance(jalview.datamodel.Provenance jprov)
\r
474 jalview.datamodel.ProvenanceEntry [] entries = null;
\r
477 Provenance prov = new Provenance();
\r
478 org.exolab.castor.types.Date date = new org.exolab.castor.types.Date(
\r
479 new java.util.Date());
\r
484 entries = jprov.getEntries();
\r
485 for (int i = 0; i < entries.length; i++)
\r
487 provEntry = new Entry();
\r
490 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
492 catch (Exception ex)
\r
494 ex.printStackTrace();
\r
496 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
498 provEntry.setDate(date);
\r
499 provEntry.setUser(entries[i].getUser());
\r
500 provEntry.setAction(entries[i].getAction());
\r
501 prov.addEntry(provEntry);
\r
506 provEntry = new Entry();
\r
507 provEntry.setDate(date);
\r
508 provEntry.setUser(System.getProperty("user.name"));
\r
509 provEntry.setAction("Jalview");
\r
510 prov.addEntry(provEntry);
\r
516 jalview.datamodel.Provenance getJalviewProvenance(Provenance prov)
\r
519 jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();
\r
520 for (int i = 0; i < prov.getEntryCount(); i++)
\r
523 prov.getEntry(i).getUser(),
\r
524 prov.getEntry(i).getAction(),
\r
525 prov.getEntry(i).getDate().toDate(),
\r
526 prov.getEntry(i).getId()
\r
533 Provenance dummyProvenance()
\r
535 Provenance prov = new Provenance();
\r
536 Entry entry = new Entry();
\r
537 entry.setAction("Jalview");
\r
538 entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
\r
539 entry.setUser(System.getProperty("user.name"));
\r
540 prov.addEntry(entry);
\r