X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2Fvamsas%2FDbref.java;h=a82d9d49f80bd0e0a953ba0aaf4bbce49c233b0c;hb=67b3acb8df1438ef37a756c04e14f5a3b8406808;hp=c5ac44f689ce9719ae6f7d82df2d7102a690b313;hpb=2ac1013336a5ea08943daed3552acf4b7a8c18b2;p=jalview.git diff --git a/src/jalview/io/vamsas/Dbref.java b/src/jalview/io/vamsas/Dbref.java index c5ac44f..a82d9d4 100644 --- a/src/jalview/io/vamsas/Dbref.java +++ b/src/jalview/io/vamsas/Dbref.java @@ -1,115 +1,241 @@ -package jalview.io.vamsas; - -import jalview.datamodel.DBRefEntry; -import jalview.datamodel.SequenceI; -import uk.ac.vamsas.objects.core.DbRef; -import uk.ac.vamsas.objects.core.Map; -import uk.ac.vamsas.objects.core.Sequence; -import jalview.io.VamsasAppDatastore; - -public class Dbref extends Rangetype -{ - jalview.datamodel.SequenceI sq = null; - uk.ac.vamsas.objects.core.Sequence sequence = null; - DbRef dbref = null; - DBRefEntry dbentry=null; - public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry, jalview.datamodel.SequenceI sq2, uk.ac.vamsas.objects.core.Sequence sequence2) - { - super(datastore); - dbref = (DbRef) getjv2vObj(dbentry); - sq = sq2; - sequence = sequence2; - this.dbentry = dbentry; - if (dbref==null) - { - add(); - } else { - if (dbref.isUpdated()) - { - conflict(); - } else { - update(); - } - - } - - } - - public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq, SequenceI dsseq) - { - super(datastore); - dbref = ref; - sequence = vdseq; - sq = dsseq; - dbentry = (jalview.datamodel.DBRefEntry) getvObj2jv(dbref); - if (dbentry == null) - { - addFromDocument(); - } else { - if (dbref.isUpdated()) - { - update(); - } - } - } - - private void update() - { - // TODO: verify and update dbrefs in vamsas document - // there will be trouble when a dataset sequence is modified to - // contain more residues than were originally referenced - we must - // then make a number of dataset sequence entries - this info is already stored - jalview.bin.Cache.log.debug("TODO verify update of dataset sequence database references."); - } - - private void conflict() - { - jalview.bin.Cache.log.debug("Conflict in dbentry update for "+dbref.getAccessionId()+dbref.getSource()+" "+dbref.getVorbaId()); - // TODO Auto-generated method stub - - } - private void addFromDocument() - { - // add new dbref - sq.addDBRef(dbentry = new jalview.datamodel.DBRefEntry - ( - dbref.getSource().toString(), - dbref.getVersion().toString(), - dbref.getAccessionId().toString())); - if (dbref.getMapCount()>0) - { - // TODO: Jalview ignores all the other maps - if (dbref.getMapCount()>1) - { - jalview.bin.Cache.log.debug("Ignoring additional mappings on DbRef: "+dbentry.getSource()+":"+dbentry.getAccessionId()); - } - jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping(parsemapType(dbref.getMap(0))); - dbentry.setMap(mp); - } - // TODO: jalview ignores links and properties because it doesn't know what to do with them. - - bindjvvobj(dbentry, dbref); - } - private void add() - { - DbRef dbref = new DbRef(); - bindjvvobj(dbentry, dbref); - dbref.setAccessionId(dbentry.getAccessionId()); - dbref.setSource(dbentry.getSource()); - dbref.setVersion(dbentry.getVersion()); - if (dbentry.getMap()!=null) - { - jalview.datamodel.Mapping mp = dbentry.getMap(); - if (mp.getMap()!=null) - { - Map vMap = new Map(); - initMapType(vMap, mp.getMap(), true); - dbref.addMap(vMap); - } else { - jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map "+dbentry.getSrcAccString()); - } - } - sequence.addDbRef(dbref); - } - -} +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ +package jalview.io.vamsas; + +import jalview.bin.Cache; +import jalview.datamodel.DBRefEntry; +import jalview.datamodel.Mapping; +import jalview.datamodel.SequenceI; +import jalview.io.VamsasAppDatastore; + +import uk.ac.vamsas.objects.core.DataSet; +import uk.ac.vamsas.objects.core.DbRef; +import uk.ac.vamsas.objects.core.Map; +import uk.ac.vamsas.objects.core.Sequence; +import uk.ac.vamsas.objects.utils.SymbolDictionary; + +public class Dbref extends Rangetype +{ + SequenceI sq = null; + + uk.ac.vamsas.objects.core.Sequence sequence = null; + + DataSet ds; + + public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry, + SequenceI sq2, uk.ac.vamsas.objects.core.Sequence sequence2, + DataSet dataset) + { + super(datastore, dbentry, DbRef.class); + // initialise object specific attributes + sq = sq2; + sequence = sequence2; + this.jvobj = dbentry; + ds = dataset; + // call the accessors + doSync(); + } + + public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq, + SequenceI dsseq) + { + super(datastore, ref, DBRefEntry.class); + sequence = vdseq; + sq = dsseq; + ds = (DataSet) vdseq.getV_parent(); + doJvUpdate(); + } + + public void updateToDoc() + { + DbRef dbref = (DbRef) this.vobj; + DBRefEntry jvobj = (DBRefEntry) this.jvobj; + dbref.setAccessionId(jvobj.getAccessionId()); + dbref.setSource(jvobj.getSource()); + dbref.setVersion(jvobj.getVersion()); + if (jvobj.getMap() != null) + { + // Record mapping to external database coordinate system. + Mapping mp = jvobj.getMap(); + if (mp.getMap() != null) + { + Map vMap = null; + if (dbref.getMapCount() == 0) + { + vMap = new Map(); + initMapType(vMap, mp.getMap(), true); + dbref.addMap(vMap); + } + else + { + // we just update the data anyway. + vMap = dbref.getMap(0); + initMapType(vMap, mp.getMap(), true); + } + updateMapTo(mp); + } + } + else + { + Cache.log.debug("Ignoring mapless DbRef.Map " + + jvobj.getSrcAccString()); + } + + } + + /** + * ugly hack to try to get the embedded sequences within a database reference + * to be stored in the document's dataset. + * + * @param mp + */ + private void updateMapTo(Mapping mp) + { + log.info("Performing updateMapTo remove this message when we know what we're doing."); + // TODO determine how sequences associated with database mappings are stored + // in the document + if (mp != null && mp.getTo() != null) + { + if (mp.getTo().getDatasetSequence() == null) + { + // TODO: fix this hinky sh!t + DatastoreItem dssync = dsReg.getDatastoreItemFor(mp.getTo()); + if (dssync == null) + { + // sync the dataset sequence, if it hasn't been done already. + // TODO: ensure real dataset sequence corresponding to getTo is + // recovered + dssync = new Datasetsequence( + datastore, + mp.getTo(), + (mp.getMappedWidth() == mp.getWidth()) ? sequence + .getDictionary() + : ((mp.getMappedWidth() == 3) ? SymbolDictionary.STANDARD_NA + : SymbolDictionary.STANDARD_AA), + ds); + } + // + // TODO: NOW add a mapping between new dataset sequence and sequence + // associated with the database reference + + // dna mappings only... + // new jalview.io.vamsas.Sequencemapping(datastore, mp, sequence, ds); + + } + + } + else + { + log.debug("Ignoring non-dataset sequence mapping."); + } + } + + public void updateFromDoc() + { + DbRef vobj = (DbRef) this.vobj; + DBRefEntry jvobj = (DBRefEntry) this.jvobj; + jvobj.setAccessionId(vobj.getAccessionId()); + jvobj.setSource(vobj.getSource()); + jvobj.setVersion(vobj.getVersion()); + // add new dbref + if (vobj.getMapCount() > 0) + { + // TODO: Jalview ignores all the other maps + if (vobj.getMapCount() > 1) + { + Cache.log + .debug("Ignoring additional mappings on DbRef: " + + jvobj.getSource() + ":" + jvobj.getAccessionId()); + } + Mapping mp = new Mapping(parsemapType(vobj.getMap(0))); + if (jvobj.getMap() == null || !mp.equals(jvobj.getMap())) + { + jvobj.setMap(mp); + } + } + } + + public void conflict() + { + DbRef vobj = (DbRef) this.vobj; + DBRefEntry jvobj = (DBRefEntry) this.jvobj; + Cache.log.debug("Conflict in dbentry update for " + + vobj.getAccessionId() + vobj.getSource() + " " + + vobj.getVorbaId()); + // TODO Auto-generated method stub + + } + + public void addFromDocument() + { + DbRef vobj = (DbRef) this.vobj; + DBRefEntry jvobj = (DBRefEntry) this.jvobj; + // add new dbref + sq.addDBRef(jvobj = new DBRefEntry(vobj.getSource() + .toString(), vobj.getVersion().toString(), vobj + .getAccessionId().toString())); + if (vobj.getMapCount() > 0) + { + // TODO: Jalview ignores all the other maps + if (vobj.getMapCount() > 1) + { + Cache.log + .debug("Ignoring additional mappings on DbRef: " + + jvobj.getSource() + ":" + jvobj.getAccessionId()); + } + Mapping mp = new Mapping( + parsemapType(vobj.getMap(0))); + jvobj.setMap(mp); + } + // TODO: jalview ignores links and properties because it doesn't know what + // to do with them. + + bindjvvobj(jvobj, vobj); + } + + public void addToDocument() + { + DBRefEntry jvobj = (DBRefEntry) this.jvobj; + DbRef dbref = new DbRef(); + bindjvvobj(jvobj, dbref); + dbref.setAccessionId(jvobj.getAccessionId()); + dbref.setSource(jvobj.getSource()); + dbref.setVersion(jvobj.getVersion()); + sequence.addDbRef(dbref); + if (jvobj.getMap() != null) + { + Mapping mp = jvobj.getMap(); + if (mp.getMap() != null) + { + Map vMap = new Map(); + initMapType(vMap, mp.getMap(), true); + dbref.addMap(vMap); + updateMapTo(mp); + } + else + { + Cache.log.debug("Ignoring mapless DbRef.Map " + + jvobj.getSrcAccString()); + } + } + } + +}