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().length;
\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()[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 // JBPNote - have to deal with the many lines for one graph thing
\r
215 an.setGraph(true); //aa[i].graph);
\r
216 // JBPNote - store graphGroup in the Jalview specific bits.
\r
217 an.setLabel(aa[i].label);
\r
218 an.setProvenance(dummyProvenance());
\r
220 AnnotationElement ae;
\r
222 for (int a = 0; a < aa[i].annotations.length; a++)
\r
224 if ((aa[i] == null) || (aa[i].annotations[a] == null))
\r
229 ae = new AnnotationElement();
\r
230 ae.setDescription(aa[i].annotations[a].description);
\r
231 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
232 ae.setValue(aa[i].annotations[a].value);
\r
234 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure +
\r
236 an.addAnnotationElement(ae);
\r
239 alignment.addAlignmentAnnotations(an);
\r
242 ///////////////////////////////////////////////////////
\r
245 ////////////////////////////////////////////////
\r
247 ///////////////////////////////////
\r
248 // FIND ANY ASSOCIATED TREES
\r
249 if (Desktop.desktop != null)
\r
251 javax.swing.JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
253 for (int t = 0; t < frames.length; t++)
\r
255 if (frames[t] instanceof TreePanel)
\r
257 TreePanel tp = (TreePanel) frames[t];
\r
259 if (tp.getAlignment() == jal)
\r
261 Tree tree = new Tree();
\r
262 tree.setTitle(tp.getTitle());
\r
263 Newick newick = new Newick();
\r
264 newick.setContent( tp.getTree().toString() );
\r
265 newick.setTitle( tp.getTitle() );
\r
266 newick.setId("t"+(time++));
\r
267 tree.addNewick( newick );
\r
268 tree.setProvenance(dummyProvenance());
\r
269 alignment.addTree(tree);
\r
276 JarEntry entry = new JarEntry("vamsas.xml");
\r
277 jout.putNextEntry(entry);
\r
279 vamsas.marshal(out);
\r
286 catch (Exception ex)
\r
288 ex.printStackTrace();
\r
294 Tree jalview2VamsasTree()
\r
296 Tree tree = new Tree();
\r
302 public void load(String file)
\r
304 VAMSAS vamsas = new VAMSAS() ;
\r
308 FileInputStream fis = new FileInputStream(file);
\r
309 JarInputStream jin = new JarInputStream(fis);
\r
312 ////////////////////////////////////////////////////
\r
313 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
314 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
315 JarEntry jarentry = jin.getNextJarEntry();
\r
316 System.out.println("reading: "+jarentry.getName());
\r
317 vamsas = (VAMSAS) vamsas.unmarshal(in);
\r
320 /////////////////////////////////////
\r
322 DataSet dataset = vamsas.getDataSet(0);
\r
324 int i, iSize = dataset.getSequenceCount();
\r
325 jalview.datamodel.Sequence [] seqs = new jalview.datamodel.Sequence[iSize];
\r
328 for (i = 0; i < iSize ; i++)
\r
330 seqs[i] = new jalview.datamodel.Sequence(
\r
331 dataset.getSequence(i).getName(),
\r
332 dataset.getSequence(i).getSequence(),
\r
333 dataset.getSequence(i).getStart(),
\r
334 dataset.getSequence(i).getEnd() );
\r
335 seqs[i].setVamsasId(dataset.getSequence(i).getId());
\r
337 if (dataset.getDataSetAnnotations() != null)
\r
339 for (int dsa = 0; dsa < dataset.getDataSetAnnotationsCount(); dsa++)
\r
341 if (dataset.getDataSetAnnotations(dsa).getSeqRef() ==
\r
342 dataset.getSequence(i))
\r
344 seqs[i].addSequenceFeature(new jalview.datamodel.
\r
346 dataset.getDataSetAnnotations(dsa).getType(),
\r
347 dataset.getDataSetAnnotations(dsa).getDescription(),
\r
348 dataset.getDataSetAnnotations(dsa).getStatus(),
\r
349 dataset.getDataSetAnnotations(dsa).getBegin(),
\r
350 dataset.getDataSetAnnotations(dsa).getEnd(),
\r
355 dbref = dataset.getSequence(i).getDbRef();
\r
359 for(int db=0; db<dbref.length; db++)
\r
361 seqs[i].addDBRef( new jalview.datamodel.DBRefEntry
\r
363 dbref[db].getSource().toString(),
\r
364 dbref[db].getVersion().toString(),
\r
365 dbref[db].getAccessionId().toString()));
\r
369 jalview.datamodel.Alignment jdataset = new jalview.datamodel.Alignment(seqs);
\r
370 ////////////////////////////////////////////////
\r
373 //////////////////////////////////////
\r
375 Alignment alignment = dataset.getAlignment(0);
\r
376 iSize = alignment.getAlignmentSequenceCount();
\r
377 seqs = new jalview.datamodel.Sequence[iSize];
\r
379 int j, jSize = jdataset.getHeight();
\r
380 for (i = 0; i < iSize; i++)
\r
382 seqs[i] = new jalview.datamodel.Sequence(
\r
383 alignment.getAlignmentSequence(i).getName(),
\r
384 alignment.getAlignmentSequence(i).getSequence(),
\r
385 alignment.getAlignmentSequence(i).getStart(),
\r
386 alignment.getAlignmentSequence(i).getEnd());
\r
388 id = ( (Sequence) alignment.getAlignmentSequence(i).getRefid()).getId();
\r
390 for(j=0; j<jSize; j++)
\r
392 if(jdataset.getSequenceAt(j).getVamsasId().equals(id))
\r
394 seqs[i].setDatasetSequence( jdataset.getSequenceAt(j) );
\r
399 jalview.datamodel.Alignment jal = new jalview.datamodel.Alignment(seqs);
\r
400 jal.setDataset(jdataset);
\r
401 /*jal.getDataset().setProvenance(
\r
402 getJalviewProvenance(dataset.getProvenance()));
\r
404 getJalviewProvenance(alignment.getProvenance()));
\r
406 //////////////////////////////////////////////
\r
409 ////////////////////////////////////////////
\r
410 ////LOAD ANNOTATIONS
\r
411 ////////////////////
\r
412 if (alignment.getAlignmentAnnotationsCount()>0)
\r
414 AlignmentAnnotations[] an = alignment.getAlignmentAnnotations();
\r
416 for (j = 0; j < an.length; j++)
\r
418 boolean topaliBreakpoint = false;
\r
420 AnnotationElement[] ae = an[j].getAnnotationElement();
\r
421 jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[jal.
\r
426 for (int aa = 0; aa < ae.length; aa++)
\r
428 String dc = ae[aa].getDisplayCharacter()==null ? "dc" : ae[aa].getDisplayCharacter();
\r
429 String desc = ae[aa].getDescription()==null ? "desc" : ae[aa].getDescription();
\r
430 String ss = ae[aa].getSecondaryStructure()==null ? "ss" : ae[aa].getSecondaryStructure();
\r
431 float value = ae[aa].getValue();
\r
433 if(an[j].getGraph())
\r
438 anot[ae[aa].getPosition()-1] = new jalview.datamodel.
\r
439 Annotation(dc,desc,ss.charAt(0),value);
\r
441 if(desc.equals("TOPALi Partition Breakpoint"))
\r
442 topaliBreakpoint = true;
\r
445 }catch(Exception ex)
\r
447 ex.printStackTrace();
\r
448 System.out.println("problem parsing annotations\n"+ex);}
\r
450 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
452 if (an[j].getGraph())
\r
454 jaa = new jalview.datamodel.AlignmentAnnotation(an[j].getLabel(),
\r
455 an[j].getDescription(), anot, 0, 0, 1);
\r
459 String label = an[j].getLabel();
\r
460 if(topaliBreakpoint)
\r
461 label = "TOPALi Partition Breakpoint";
\r
462 jaa = new jalview.datamodel.AlignmentAnnotation(label,
\r
463 an[j].getDescription(), anot);
\r
466 jal.addAnnotation(jaa);
\r
469 /////////////////////////////////
\r
471 AlignFrame alignFrame = new AlignFrame(jal);
\r
472 jalview.gui.Desktop.addInternalFrame(alignFrame, "VAMSAS LOAD",
\r
473 AlignFrame.NEW_WINDOW_WIDTH,
\r
474 AlignFrame.NEW_WINDOW_HEIGHT);
\r
477 ///////////////////////////////////////
\r
478 if (alignment.getTreeCount() > 0)
\r
480 for (int t = 0; t < alignment.getTreeCount(); t++)
\r
482 Tree tree = alignment.getTree(t);
\r
484 alignFrame.ShowNewickTree(
\r
485 new jalview.io.NewickFile(tree.getNewick(0).getContent()),
\r
486 tree.getNewick(0).getTitle(),
\r
488 t * 20 + 50, t * 20 + 50);
\r
496 catch (Exception ex)
\r
498 ex.printStackTrace();
\r
506 Provenance getVamsasProvenance(jalview.datamodel.Provenance jprov)
\r
508 jalview.datamodel.ProvenanceEntry [] entries = null;
\r
511 Provenance prov = new Provenance();
\r
512 org.exolab.castor.types.Date date = new org.exolab.castor.types.Date(
\r
513 new java.util.Date());
\r
518 entries = jprov.getEntries();
\r
519 for (int i = 0; i < entries.length; i++)
\r
521 provEntry = new Entry();
\r
524 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
526 catch (Exception ex)
\r
528 ex.printStackTrace();
\r
530 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
532 provEntry.setDate(date);
\r
533 provEntry.setUser(entries[i].getUser());
\r
534 provEntry.setAction(entries[i].getAction());
\r
535 prov.addEntry(provEntry);
\r
540 provEntry = new Entry();
\r
541 provEntry.setDate(date);
\r
542 provEntry.setUser(System.getProperty("user.name"));
\r
543 provEntry.setAction("Jalview");
\r
544 prov.addEntry(provEntry);
\r
550 jalview.datamodel.Provenance getJalviewProvenance(Provenance prov)
\r
553 jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();
\r
554 for (int i = 0; i < prov.getEntryCount(); i++)
\r
557 prov.getEntry(i).getUser(),
\r
558 prov.getEntry(i).getAction(),
\r
559 prov.getEntry(i).getDate().toDate(),
\r
560 prov.getEntry(i).getId()
\r
567 Provenance dummyProvenance()
\r
569 Provenance prov = new Provenance();
\r
570 Entry entry = new Entry();
\r
571 entry.setAction("Jalview");
\r
572 entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
\r
573 entry.setUser(System.getProperty("user.name"));
\r
574 prov.addEntry(entry);
\r