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
27 import org.exolab.castor.xml.*;
\r
28 import org.exolab.castor.mapping.Mapping;
\r
33 org.exolab.castor.util.LocalConfiguration.getInstance().getProperties().setProperty(
\r
34 "org.exolab.castor.serializer", "org.apache.xml.serialize.XMLSerilazizer");
\r
39 public class VamsasDatastore
\r
42 org.exolab.castor.types.Date date
\r
43 = new org.exolab.castor.types.Date(new java.util.Date());
\r
45 public VamsasDatastore(AlignViewport av)
\r
50 public void store(String file)
\r
55 public void storeJalview(String file, AlignFrame af)
\r
59 // 1. Load the mapping information from the file
\r
60 Mapping map = new Mapping(getClass().getClassLoader());
\r
61 java.net.URL url = getClass().getResource("/jalview_mapping.xml");
\r
62 map.loadMapping(url);
\r
64 // 2. Unmarshal the data
\r
65 // Unmarshaller unmar = new Unmarshaller();
\r
66 //unmar.setIgnoreExtraElements(true);
\r
67 //unmar.setMapping(map);
\r
68 // uni = (UniprotFile) unmar.unmarshal(new FileReader(file));
\r
70 // 3. marshal the data with the total price back and print the XML in the console
\r
71 Marshaller marshaller = new Marshaller( new FileWriter(file) );
\r
73 marshaller.setMapping(map);
\r
74 marshaller.marshal(af);
\r
78 e.printStackTrace();
\r
84 public VAMSAS storeVAMSAS(String file)
\r
86 long time = System.currentTimeMillis();
\r
87 VAMSAS vamsas = new VAMSAS();
\r
91 FileOutputStream fos = new FileOutputStream(file);
\r
92 JarOutputStream jout = new JarOutputStream(fos);
\r
95 ////////////////////////////////////////////////////
\r
96 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
97 PrintWriter out = new PrintWriter(new OutputStreamWriter(jout,
\r
100 jalview.datamodel.AlignmentI jal = av.getAlignment();
\r
103 ///////////////////////////////////////////
\r
104 // SAVE THE DATASET
\r
105 DataSet dataset = new DataSet();
\r
106 vamsas.addDataSet(dataset);
\r
110 for (int i = 0; i < jal.getHeight(); i++)
\r
112 sequence = new Sequence();
\r
113 sequence.setSequence(jal.getDataset().getSequenceAt(i).getSequence());
\r
114 sequence.setName(jal.getDataset().getSequenceAt(i).getName());
\r
115 sequence.setStart(jal.getDataset().getSequenceAt(i).getStart());
\r
116 sequence.setEnd(jal.getDataset().getSequenceAt(i).getEnd());
\r
119 if(jal.getDataset().getSequenceAt(i).getSequenceFeatures()!=null)
\r
121 int sfSize = jal.getDataset().getSequenceAt(i).getSequenceFeatures().size();
\r
123 for (int sf = 0; sf < sfSize; sf++)
\r
125 jalview.datamodel.SequenceFeature feature =
\r
126 (jalview.datamodel.SequenceFeature)
\r
127 jal.getDataset().getSequenceAt(i).getSequenceFeatures().elementAt(sf);
\r
129 DataSetAnnotations dsa = new DataSetAnnotations();
\r
130 dsa.setType(feature.getType());
\r
131 dsa.setBegin(feature.getBegin());
\r
132 dsa.setEnd(feature.getEnd());
\r
133 dsa.setDescription(feature.getDescription());
\r
134 dsa.setStatus(feature.getStatus());
\r
135 dsa.addProvenance(dummyProvenance());
\r
136 dsa.setSeqRef(sequence);
\r
137 dsa.setId("sf"+(time++));
\r
138 dataset.addDataSetAnnotations(dsa);
\r
142 if(jal.getDataset().getSequenceAt(i).getDBRef()!=null)
\r
144 java.util.Vector entries = jal.getDataset().getSequenceAt(i).getDBRef();
\r
145 jalview.datamodel.DBRefEntry dbentry;
\r
146 for(int db=0; db<entries.size(); db++)
\r
148 dbentry = (jalview.datamodel.DBRefEntry)entries.elementAt(db);
\r
149 dbref = new DbRef();
\r
150 dbref.setAccessionId( dbentry.getAccessionId() );
\r
151 dbref.setSource( dbentry.getSource() );
\r
152 dbref.setVersion( dbentry.getVersion() );
\r
153 dbref.setId("db"+(time++));
\r
154 sequence.addDbRef(dbref);
\r
160 if(jal.getDataset().getSequenceAt(i).getVamsasId()==null)
\r
161 sequence.setId("ds" + (time++));
\r
163 sequence.setId(jal.getDataset().getSequenceAt(i).getVamsasId());
\r
165 dataset.addSequence(sequence);
\r
167 dataset.setProvenance(getVamsasProvenance(jal.getDataset().getProvenance()));
\r
168 //////////////////////////////////////////////
\r
171 //////////////////////////////////////////////
\r
172 //Save the Alignments
\r
173 Alignment alignment = new Alignment();
\r
174 alignment.setGapChar(av.getGapCharacter() + "");
\r
175 AlignmentSequence alseq = null;
\r
176 for (int i = 0; i < jal.getHeight(); i++)
\r
178 alseq = new AlignmentSequence();
\r
180 jal.getSequenceAt(i).getSequence()
\r
182 alseq.setName(jal.getSequenceAt(i).getName());
\r
183 alseq.setStart(jal.getSequenceAt(i).getStart());
\r
184 alseq.setEnd(jal.getSequenceAt(i).getEnd());
\r
185 alseq.setRefid(dataset.getSequence(i));
\r
186 alseq.setId("as" + (time++));
\r
187 alignment.addAlignmentSequence(alseq);
\r
189 alignment.setProvenance(getVamsasProvenance(jal.getProvenance()));
\r
190 dataset.addAlignment(alignment);
\r
191 //////////////////////////////////////////////
\r
195 //////////////////////////////////////////////
\r
197 if (jal.getAlignmentAnnotation() != null)
\r
199 jalview.datamodel.AlignmentAnnotation[] aa = jal.getAlignmentAnnotation();
\r
201 for (int i = 0; i < aa.length; i++)
\r
203 if (aa[i].label.equals("Quality") ||
\r
204 aa[i].label.equals("Conservation") ||
\r
205 aa[i].label.equals("Consensus"))
\r
210 AlignmentAnnotations an = new AlignmentAnnotations();
\r
212 an.setDescription(aa[i].description);
\r
213 an.setGraph(aa[i].isGraph);
\r
214 an.setLabel(aa[i].label);
\r
215 an.setProvenance(dummyProvenance());
\r
217 AnnotationElement ae;
\r
219 for (int a = 0; a < aa[i].annotations.length; a++)
\r
221 if ((aa[i] == null) || (aa[i].annotations[a] == null))
\r
226 ae = new AnnotationElement();
\r
227 ae.setDescription(aa[i].annotations[a].description);
\r
228 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
229 ae.setValue(aa[i].annotations[a].value);
\r
231 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure +
\r
233 an.addAnnotationElement(ae);
\r
236 alignment.addAlignmentAnnotations(an);
\r
239 ///////////////////////////////////////////////////////
\r
242 ////////////////////////////////////////////////
\r
244 ///////////////////////////////////
\r
245 // FIND ANY ASSOCIATED TREES
\r
246 if (Desktop.desktop != null)
\r
248 javax.swing.JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
250 for (int t = 0; t < frames.length; t++)
\r
252 if (frames[t] instanceof TreePanel)
\r
254 TreePanel tp = (TreePanel) frames[t];
\r
256 if (tp.getAlignment() == jal)
\r
258 Tree tree = new Tree();
\r
259 tree.setTitle(tp.getTitle());
\r
260 Newick newick = new Newick();
\r
261 newick.setContent( tp.getTree().toString() );
\r
262 newick.setTitle( tp.getTitle() );
\r
263 newick.setId("t"+(time++));
\r
264 tree.addNewick( newick );
\r
265 tree.setProvenance(dummyProvenance());
\r
266 alignment.addTree(tree);
\r
273 JarEntry entry = new JarEntry("vamsas.xml");
\r
274 jout.putNextEntry(entry);
\r
276 vamsas.marshal(out);
\r
283 catch (Exception ex)
\r
285 ex.printStackTrace();
\r
291 Tree jalview2VamsasTree()
\r
293 Tree tree = new Tree();
\r
299 public void load(String file)
\r
301 VAMSAS vamsas = new VAMSAS() ;
\r
305 FileInputStream fis = new FileInputStream(file);
\r
306 JarInputStream jin = new JarInputStream(fis);
\r
309 ////////////////////////////////////////////////////
\r
310 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
311 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
312 JarEntry jarentry = jin.getNextJarEntry();
\r
313 System.out.println("reading: "+jarentry.getName());
\r
314 vamsas = (VAMSAS) vamsas.unmarshal(in);
\r
317 /////////////////////////////////////
\r
319 DataSet dataset = vamsas.getDataSet(0);
\r
321 int i, iSize = dataset.getSequenceCount();
\r
322 jalview.datamodel.Sequence [] seqs = new jalview.datamodel.Sequence[iSize];
\r
325 for (i = 0; i < iSize ; i++)
\r
327 seqs[i] = new jalview.datamodel.Sequence(
\r
328 dataset.getSequence(i).getName(),
\r
329 dataset.getSequence(i).getSequence(),
\r
330 dataset.getSequence(i).getStart(),
\r
331 dataset.getSequence(i).getEnd() );
\r
332 seqs[i].setVamsasId(dataset.getSequence(i).getId());
\r
334 if (dataset.getDataSetAnnotations() != null)
\r
336 for (int dsa = 0; dsa < dataset.getDataSetAnnotationsCount(); dsa++)
\r
338 if (dataset.getDataSetAnnotations(dsa).getSeqRef() ==
\r
339 dataset.getSequence(i))
\r
341 seqs[i].addSequenceFeature(new jalview.datamodel.
\r
343 dataset.getDataSetAnnotations(dsa).getType(),
\r
344 dataset.getDataSetAnnotations(dsa).getDescription(),
\r
345 dataset.getDataSetAnnotations(dsa).getStatus(),
\r
346 dataset.getDataSetAnnotations(dsa).getBegin(),
\r
347 dataset.getDataSetAnnotations(dsa).getEnd()));
\r
351 dbref = dataset.getSequence(i).getDbRef();
\r
355 for(int db=0; db<dbref.length; db++)
\r
357 seqs[i].addDBRef( new jalview.datamodel.DBRefEntry
\r
359 dbref[db].getSource().toString(),
\r
360 dbref[db].getVersion().toString(),
\r
361 dbref[db].getAccessionId().toString()));
\r
365 jalview.datamodel.Alignment jdataset = new jalview.datamodel.Alignment(seqs);
\r
366 ////////////////////////////////////////////////
\r
369 //////////////////////////////////////
\r
371 Alignment alignment = dataset.getAlignment(0);
\r
372 iSize = alignment.getAlignmentSequenceCount();
\r
373 seqs = new jalview.datamodel.Sequence[iSize];
\r
375 int j, jSize = jdataset.getHeight();
\r
376 for (i = 0; i < iSize; i++)
\r
378 seqs[i] = new jalview.datamodel.Sequence(
\r
379 alignment.getAlignmentSequence(i).getName(),
\r
380 alignment.getAlignmentSequence(i).getSequence(),
\r
381 alignment.getAlignmentSequence(i).getStart(),
\r
382 alignment.getAlignmentSequence(i).getEnd());
\r
384 id = ( (Sequence) alignment.getAlignmentSequence(i).getRefid()).getId();
\r
386 for(j=0; j<jSize; j++)
\r
388 if(jdataset.getSequenceAt(j).getVamsasId().equals(id))
\r
390 seqs[i].setDatasetSequence( jdataset.getSequenceAt(j) );
\r
395 jalview.datamodel.Alignment jal = new jalview.datamodel.Alignment(seqs);
\r
396 jal.setDataset(jdataset);
\r
397 jal.getDataset().setProvenance(
\r
398 getJalviewProvenance(dataset.getProvenance()));
\r
400 getJalviewProvenance(alignment.getProvenance()));
\r
401 //////////////////////////////////////////////
\r
404 ////////////////////////////////////////////
\r
405 ////LOAD ANNOTATIONS
\r
406 ////////////////////
\r
407 if (alignment.getAlignmentAnnotationsCount()>0)
\r
409 AlignmentAnnotations[] an = alignment.getAlignmentAnnotations();
\r
411 for (j = 0; j < an.length; j++)
\r
413 boolean topaliBreakpoint = false;
\r
415 AnnotationElement[] ae = an[j].getAnnotationElement();
\r
416 jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[jal.
\r
421 for (int aa = 0; aa < ae.length; aa++)
\r
423 String dc = ae[aa].getDisplayCharacter()==null ? "dc" : ae[aa].getDisplayCharacter();
\r
424 String desc = ae[aa].getDescription()==null ? "desc" : ae[aa].getDescription();
\r
425 String ss = ae[aa].getSecondaryStructure()==null ? "ss" : ae[aa].getSecondaryStructure();
\r
426 float value = ae[aa].getValue();
\r
428 if(an[j].getGraph())
\r
433 anot[ae[aa].getPosition()-1] = new jalview.datamodel.
\r
434 Annotation(dc,desc,ss.charAt(0),value);
\r
436 if(desc.equals("TOPALi Partition Breakpoint"))
\r
437 topaliBreakpoint = true;
\r
440 }catch(Exception ex)
\r
442 ex.printStackTrace();
\r
443 System.out.println("problem parsing annotations\n"+ex);}
\r
445 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
447 if (an[j].getGraph())
\r
449 jaa = new jalview.datamodel.AlignmentAnnotation(an[j].getLabel(),
\r
450 an[j].getDescription(), anot, 0, 0, 1);
\r
454 String label = an[j].getLabel();
\r
455 if(topaliBreakpoint)
\r
456 label = "TOPALi Partition Breakpoint";
\r
457 jaa = new jalview.datamodel.AlignmentAnnotation(label,
\r
458 an[j].getDescription(), anot);
\r
461 jal.addAnnotation(jaa);
\r
464 /////////////////////////////////
\r
466 AlignFrame alignFrame = new AlignFrame(jal);
\r
467 jalview.gui.Desktop.addInternalFrame(alignFrame, "VAMSAS LOAD",
\r
468 AlignFrame.NEW_WINDOW_WIDTH,
\r
469 AlignFrame.NEW_WINDOW_HEIGHT);
\r
472 ///////////////////////////////////////
\r
473 if (alignment.getTreeCount() > 0)
\r
475 for (int t = 0; t < alignment.getTreeCount(); t++)
\r
477 Tree tree = alignment.getTree(t);
\r
479 alignFrame.ShowNewickTree(
\r
480 new jalview.io.NewickFile(tree.getNewick(0).getContent()),
\r
481 tree.getNewick(0).getTitle(),
\r
483 t * 20 + 50, t * 20 + 50);
\r
491 catch (Exception ex)
\r
493 ex.printStackTrace();
\r
501 Provenance getVamsasProvenance(jalview.datamodel.Provenance jprov)
\r
503 jalview.datamodel.ProvenanceEntry [] entries = null;
\r
506 Provenance prov = new Provenance();
\r
507 org.exolab.castor.types.Date date = new org.exolab.castor.types.Date(
\r
508 new java.util.Date());
\r
513 entries = jprov.getEntries();
\r
514 for (int i = 0; i < entries.length; i++)
\r
516 provEntry = new Entry();
\r
519 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
521 catch (Exception ex)
\r
523 ex.printStackTrace();
\r
525 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
527 provEntry.setDate(date);
\r
528 provEntry.setUser(entries[i].getUser());
\r
529 provEntry.setAction(entries[i].getAction());
\r
530 prov.addEntry(provEntry);
\r
535 provEntry = new Entry();
\r
536 provEntry.setDate(date);
\r
537 provEntry.setUser(System.getProperty("user.name"));
\r
538 provEntry.setAction("Jalview");
\r
539 prov.addEntry(provEntry);
\r
545 jalview.datamodel.Provenance getJalviewProvenance(Provenance prov)
\r
548 jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();
\r
549 for (int i = 0; i < prov.getEntryCount(); i++)
\r
552 prov.getEntry(i).getUser(),
\r
553 prov.getEntry(i).getAction(),
\r
554 prov.getEntry(i).getDate().toDate(),
\r
555 prov.getEntry(i).getId()
\r
562 Provenance dummyProvenance()
\r
564 Provenance prov = new Provenance();
\r
565 Entry entry = new Entry();
\r
566 entry.setAction("Jalview");
\r
567 entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
\r
568 entry.setUser(System.getProperty("user.name"));
\r
569 prov.addEntry(entry);
\r