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
89 if(jal.getDataset().getSequenceAt(i).getDBRef()!=null)
\r
91 java.util.Vector entries = jal.getDataset().getSequenceAt(i).getDBRef();
\r
92 jalview.datamodel.DBRefEntry dbentry;
\r
93 for(int db=0; db<entries.size(); db++)
\r
95 dbentry = (jalview.datamodel.DBRefEntry)entries.elementAt(db);
\r
96 dbref = new DbRef();
\r
97 dbref.setAccessionId( dbentry.getAccessionId() );
\r
98 dbref.setSource( dbentry.getSource() );
\r
99 dbref.setVersion( dbentry.getVersion() );
\r
100 dbref.setId("db"+(time++));
\r
101 sequence.addDbRef(dbref);
\r
107 if(jal.getDataset().getSequenceAt(i).getVamsasId()==null)
\r
108 sequence.setId("ds" + (time++));
\r
110 sequence.setId(jal.getDataset().getSequenceAt(i).getVamsasId());
\r
112 dataset.addSequence(sequence);
\r
114 dataset.setProvenance(getVamsasProvenance(jal.getDataset().getProvenance()));
\r
115 //////////////////////////////////////////////
\r
118 //////////////////////////////////////////////
\r
119 //Save the Alignments
\r
120 Alignment alignment = new Alignment();
\r
121 alignment.setGapChar(av.getGapCharacter() + "");
\r
122 AlignmentSequence alseq = null;
\r
123 for (int i = 0; i < jal.getHeight(); i++)
\r
125 alseq = new AlignmentSequence();
\r
127 jal.getSequenceAt(i).getSequence()
\r
129 alseq.setName(jal.getSequenceAt(i).getName());
\r
130 alseq.setStart(jal.getSequenceAt(i).getStart());
\r
131 alseq.setEnd(jal.getSequenceAt(i).getEnd());
\r
132 alseq.setRefid(dataset.getSequence(i));
\r
133 alseq.setId("as" + (time++));
\r
134 alignment.addAlignmentSequence(alseq);
\r
136 alignment.setProvenance(getVamsasProvenance(jal.getProvenance()));
\r
137 dataset.addAlignment(alignment);
\r
138 //////////////////////////////////////////////
\r
142 //////////////////////////////////////////////
\r
144 if (jal.getAlignmentAnnotation() != null)
\r
146 jalview.datamodel.AlignmentAnnotation[] aa = jal.getAlignmentAnnotation();
\r
148 for (int i = 0; i < aa.length; i++)
\r
150 if (aa[i].label.equals("Quality") ||
\r
151 aa[i].label.equals("Conservation") ||
\r
152 aa[i].label.equals("Consensus"))
\r
157 AlignmentAnnotations an = new AlignmentAnnotations();
\r
159 an.setDescription(aa[i].description);
\r
160 an.setGraph(aa[i].isGraph);
\r
161 an.setLabel(aa[i].label);
\r
162 an.setProvenance(dummyProvenance());
\r
164 AnnotationElement ae;
\r
166 for (int a = 0; a < aa[i].annotations.length; a++)
\r
168 if ((aa[i] == null) || (aa[i].annotations[a] == null))
\r
173 ae = new AnnotationElement();
\r
174 ae.setDescription(aa[i].annotations[a].description);
\r
175 ae.setDisplayCharacter(aa[i].annotations[a].displayCharacter);
\r
176 ae.setValue(aa[i].annotations[a].value);
\r
178 ae.setSecondaryStructure(aa[i].annotations[a].secondaryStructure +
\r
180 an.addAnnotationElement(ae);
\r
183 alignment.addAlignmentAnnotations(an);
\r
186 ///////////////////////////////////////////////////////
\r
189 ////////////////////////////////////////////////
\r
191 ///////////////////////////////////
\r
192 // FIND ANY ASSOCIATED TREES
\r
193 if (Desktop.desktop != null)
\r
195 javax.swing.JInternalFrame[] frames = Desktop.desktop.getAllFrames();
\r
197 for (int t = 0; t < frames.length; t++)
\r
199 if (frames[t] instanceof TreePanel)
\r
201 TreePanel tp = (TreePanel) frames[t];
\r
203 if (tp.getAlignment() == jal)
\r
205 Tree tree = new Tree();
\r
206 tree.setTitle(tp.getTitle());
\r
207 Newick newick = new Newick();
\r
208 newick.setContent( tp.getTree().toString() );
\r
209 newick.setTitle( tp.getTitle() );
\r
210 newick.setId("t"+(time++));
\r
211 tree.addNewick( newick );
\r
212 tree.setProvenance(dummyProvenance());
\r
213 alignment.addTree(tree);
\r
220 JarEntry entry = new JarEntry("vamsas.xml");
\r
221 jout.putNextEntry(entry);
\r
223 vamsas.marshal(out);
\r
230 catch (Exception ex)
\r
232 ex.printStackTrace();
\r
238 Tree jalview2VamsasTree()
\r
240 Tree tree = new Tree();
\r
246 public void load(String file)
\r
248 VAMSAS vamsas = new VAMSAS() ;
\r
252 FileInputStream fis = new FileInputStream(file);
\r
253 JarInputStream jin = new JarInputStream(fis);
\r
256 ////////////////////////////////////////////////////
\r
257 //NOTE UTF-8 MUST BE USED FOR WRITING UNICODE CHARS
\r
258 InputStreamReader in = new InputStreamReader(jin, "UTF-8");
\r
259 JarEntry jarentry = jin.getNextJarEntry();
\r
260 System.out.println("reading: "+jarentry.getName());
\r
261 vamsas = (VAMSAS) vamsas.unmarshal(in);
\r
264 /////////////////////////////////////
\r
266 DataSet dataset = vamsas.getDataSet(0);
\r
268 int i, iSize = dataset.getSequenceCount();
\r
269 jalview.datamodel.Sequence [] seqs = new jalview.datamodel.Sequence[iSize];
\r
272 for (i = 0; i < iSize ; i++)
\r
274 seqs[i] = new jalview.datamodel.Sequence(
\r
275 dataset.getSequence(i).getName(),
\r
276 dataset.getSequence(i).getSequence(),
\r
277 dataset.getSequence(i).getStart(),
\r
278 dataset.getSequence(i).getEnd() );
\r
279 seqs[i].setVamsasId(dataset.getSequence(i).getId());
\r
281 dbref = dataset.getSequence(i).getDbRef();
\r
285 for(int db=0; db<dbref.length; db++)
\r
287 seqs[i].addDBRef( new jalview.datamodel.DBRefEntry
\r
289 dbref[db].getSource().toString(),
\r
290 dbref[db].getVersion().toString(),
\r
291 dbref[db].getAccessionId().toString()));
\r
296 jalview.datamodel.Alignment jdataset = new jalview.datamodel.Alignment(seqs);
\r
297 ////////////////////////////////////////////////
\r
300 //////////////////////////////////////
\r
302 Alignment alignment = dataset.getAlignment(0);
\r
303 iSize = alignment.getAlignmentSequenceCount();
\r
304 seqs = new jalview.datamodel.Sequence[iSize];
\r
305 for (i = 0; i < iSize; i++)
\r
307 seqs[i] = new jalview.datamodel.Sequence(
\r
308 alignment.getAlignmentSequence(i).getName(),
\r
309 alignment.getAlignmentSequence(i).getSequence(),
\r
310 alignment.getAlignmentSequence(i).getStart(),
\r
311 alignment.getAlignmentSequence(i).getEnd());
\r
313 jalview.datamodel.Alignment jal = new jalview.datamodel.Alignment(seqs);
\r
314 jal.setDataset(jdataset);
\r
315 jal.getDataset().setProvenance(
\r
316 getJalviewProvenance(dataset.getProvenance()));
\r
318 getJalviewProvenance(alignment.getProvenance()));
\r
319 //////////////////////////////////////////////
\r
322 ////////////////////////////////////////////
\r
323 ////LOAD ANNOTATIONS
\r
324 ////////////////////
\r
325 if (alignment.getAlignmentAnnotationsCount()>0)
\r
327 AlignmentAnnotations[] an = alignment.getAlignmentAnnotations();
\r
329 for (int j = 0; j < an.length; j++)
\r
331 boolean topaliBreakpoint = false;
\r
333 AnnotationElement[] ae = an[j].getAnnotationElement();
\r
334 jalview.datamodel.Annotation[] anot = new jalview.datamodel.Annotation[jal.
\r
339 for (int aa = 0; aa < ae.length; aa++)
\r
341 String dc = ae[aa].getDisplayCharacter()==null ? "dc" : ae[aa].getDisplayCharacter();
\r
342 String desc = ae[aa].getDescription()==null ? "desc" : ae[aa].getDescription();
\r
343 String ss = ae[aa].getSecondaryStructure()==null ? "ss" : ae[aa].getSecondaryStructure();
\r
344 float value = ae[aa].getValue();
\r
346 if(an[j].getGraph())
\r
351 anot[ae[aa].getPosition()-1] = new jalview.datamodel.
\r
352 Annotation(dc,desc,ss.charAt(0),value);
\r
354 if(desc.equals("TOPALi Partition Breakpoint"))
\r
355 topaliBreakpoint = true;
\r
358 }catch(Exception ex)
\r
360 ex.printStackTrace();
\r
361 System.out.println("problem parsing annotations\n"+ex);}
\r
363 jalview.datamodel.AlignmentAnnotation jaa = null;
\r
365 if (an[j].getGraph())
\r
367 jaa = new jalview.datamodel.AlignmentAnnotation(an[j].getLabel(),
\r
368 an[j].getDescription(), anot, 0, 0, 1);
\r
372 String label = an[j].getLabel();
\r
373 if(topaliBreakpoint)
\r
374 label = "TOPALi Partition Breakpoint";
\r
375 jaa = new jalview.datamodel.AlignmentAnnotation(label,
\r
376 an[j].getDescription(), anot);
\r
379 jal.addAnnotation(jaa);
\r
382 /////////////////////////////////
\r
384 AlignFrame alignFrame = new AlignFrame(jal);
\r
385 jalview.gui.Desktop.addInternalFrame(alignFrame, "VAMSAS LOAD",
\r
386 AlignFrame.NEW_WINDOW_WIDTH,
\r
387 AlignFrame.NEW_WINDOW_HEIGHT);
\r
390 ///////////////////////////////////////
\r
391 if (alignment.getTreeCount() > 0)
\r
393 for (int t = 0; t < alignment.getTreeCount(); t++)
\r
395 Tree tree = alignment.getTree(t);
\r
397 alignFrame.ShowNewickTree(
\r
398 new jalview.io.NewickFile(tree.getNewick(0).getContent()),
\r
399 tree.getNewick(0).getTitle(),
\r
401 t * 20 + 50, t * 20 + 50);
\r
409 catch (Exception ex)
\r
411 ex.printStackTrace();
\r
419 Provenance getVamsasProvenance(jalview.datamodel.Provenance jprov)
\r
421 jalview.datamodel.ProvenanceEntry [] entries = null;
\r
424 Provenance prov = new Provenance();
\r
425 org.exolab.castor.types.Date date = new org.exolab.castor.types.Date(
\r
426 new java.util.Date());
\r
431 entries = jprov.getEntries();
\r
432 for (int i = 0; i < entries.length; i++)
\r
434 provEntry = new Entry();
\r
437 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
439 catch (Exception ex)
\r
441 ex.printStackTrace();
\r
443 date = new org.exolab.castor.types.Date(entries[i].getDate());
\r
445 provEntry.setDate(date);
\r
446 provEntry.setUser(entries[i].getUser());
\r
447 provEntry.setAction(entries[i].getAction());
\r
448 prov.addEntry(provEntry);
\r
453 provEntry = new Entry();
\r
454 provEntry.setDate(date);
\r
455 provEntry.setUser(System.getProperty("user.name"));
\r
456 provEntry.setAction("Jalview");
\r
457 prov.addEntry(provEntry);
\r
463 jalview.datamodel.Provenance getJalviewProvenance(Provenance prov)
\r
466 jalview.datamodel.Provenance jprov = new jalview.datamodel.Provenance();
\r
467 for (int i = 0; i < prov.getEntryCount(); i++)
\r
470 prov.getEntry(i).getUser(),
\r
471 prov.getEntry(i).getAction(),
\r
472 prov.getEntry(i).getDate().toDate(),
\r
473 prov.getEntry(i).getId()
\r
480 Provenance dummyProvenance()
\r
482 Provenance prov = new Provenance();
\r
483 Entry entry = new Entry();
\r
484 entry.setAction("Jalview");
\r
485 entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
\r
486 entry.setUser(System.getProperty("user.name"));
\r
487 prov.addEntry(entry);
\r