X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fio%2Fvamsas%2FDbref.java;h=d4aafe82b1b1d3593924de1867a6263baae26056;hb=ad20cd92225f2ee8c251d39b00b90555d382a616;hp=e8fedac52cfcba693ec2bfb64970557b5da1c8d3;hpb=506d60f0e188723ddc91c26824b41ac7034df3fe;p=jalview.git diff --git a/src/jalview/io/vamsas/Dbref.java b/src/jalview/io/vamsas/Dbref.java index e8fedac..d4aafe8 100644 --- a/src/jalview/io/vamsas/Dbref.java +++ b/src/jalview/io/vamsas/Dbref.java @@ -1,25 +1,25 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) + * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle * - * This program 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 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program 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. + * 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 this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.io.vamsas; import jalview.datamodel.DBRefEntry; import jalview.datamodel.SequenceI; +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; @@ -31,128 +31,205 @@ public class Dbref extends Rangetype uk.ac.vamsas.objects.core.Sequence sequence = null; - DbRef dbref = null; - - DBRefEntry dbentry = null; + DataSet ds; public Dbref(VamsasAppDatastore datastore, DBRefEntry dbentry, jalview.datamodel.SequenceI sq2, - uk.ac.vamsas.objects.core.Sequence sequence2) + uk.ac.vamsas.objects.core.Sequence sequence2, DataSet dataset) { - super(datastore); - dbref = (DbRef) getjv2vObj(dbentry); + super(datastore, dbentry, DbRef.class); + // initialise object specific attributes sq = sq2; sequence = sequence2; - this.dbentry = dbentry; - if (dbref == null) - { - add(); - } - else - { - if (dbref.isUpdated()) - { - conflict(); - } - else - { - update(); - } - - } - + this.jvobj = dbentry; + ds = dataset; + // call the accessors + doSync(); } public Dbref(VamsasAppDatastore datastore, DbRef ref, Sequence vdseq, SequenceI dsseq) { - super(datastore); - dbref = ref; + super(datastore, ref, jalview.datamodel.DBRefEntry.class); sequence = vdseq; sq = dsseq; - dbentry = (jalview.datamodel.DBRefEntry) getvObj2jv(dbref); - if (dbentry == null) + 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) { - addFromDocument(); + // Record mapping to external database coordinate system. + jalview.datamodel.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 { - if (dbref.isUpdated()) + jalview.bin.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(jalview.datamodel.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) { - update(); + // 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) ? uk.ac.vamsas.objects.utils.SymbolDictionary.STANDARD_NA + : uk.ac.vamsas.objects.utils.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."); } } - private void update() + public void updateFromDoc() { - // 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."); + 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) + { + jalview.bin.Cache.log + .debug("Ignoring additional mappings on DbRef: " + + jvobj.getSource() + ":" + jvobj.getAccessionId()); + } + jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping( + parsemapType(vobj.getMap(0))); + if (jvobj.getMap() == null || !mp.equals(jvobj.getMap())) + { + jvobj.setMap(mp); + } + } } - private void conflict() + public void conflict() { + DbRef vobj = (DbRef) this.vobj; + DBRefEntry jvobj = (DBRefEntry) this.jvobj; jalview.bin.Cache.log.debug("Conflict in dbentry update for " - + dbref.getAccessionId() + dbref.getSource() + " " - + dbref.getVorbaId()); + + vobj.getAccessionId() + vobj.getSource() + " " + + vobj.getVorbaId()); // TODO Auto-generated method stub } - private void addFromDocument() + public void addFromDocument() { + DbRef vobj = (DbRef) this.vobj; + DBRefEntry jvobj = (DBRefEntry) this.jvobj; // add new dbref - sq.addDBRef(dbentry = new jalview.datamodel.DBRefEntry(dbref - .getSource().toString(), dbref.getVersion().toString(), dbref + sq.addDBRef(jvobj = new jalview.datamodel.DBRefEntry(vobj.getSource() + .toString(), vobj.getVersion().toString(), vobj .getAccessionId().toString())); - if (dbref.getMapCount() > 0) + if (vobj.getMapCount() > 0) { // TODO: Jalview ignores all the other maps - if (dbref.getMapCount() > 1) + if (vobj.getMapCount() > 1) { jalview.bin.Cache.log .debug("Ignoring additional mappings on DbRef: " - + dbentry.getSource() + ":" - + dbentry.getAccessionId()); + + jvobj.getSource() + ":" + jvobj.getAccessionId()); } jalview.datamodel.Mapping mp = new jalview.datamodel.Mapping( - parsemapType(dbref.getMap(0))); - dbentry.setMap(mp); + parsemapType(vobj.getMap(0))); + jvobj.setMap(mp); } // TODO: jalview ignores links and properties because it doesn't know what // to do with them. - bindjvvobj(dbentry, dbref); + bindjvvobj(jvobj, vobj); } - private void add() + public void addToDocument() { + DBRefEntry jvobj = (DBRefEntry) this.jvobj; DbRef dbref = new DbRef(); - bindjvvobj(dbentry, dbref); - dbref.setAccessionId(dbentry.getAccessionId()); - dbref.setSource(dbentry.getSource()); - dbref.setVersion(dbentry.getVersion()); - if (dbentry.getMap() != null) + bindjvvobj(jvobj, dbref); + dbref.setAccessionId(jvobj.getAccessionId()); + dbref.setSource(jvobj.getSource()); + dbref.setVersion(jvobj.getVersion()); + sequence.addDbRef(dbref); + if (jvobj.getMap() != null) { - jalview.datamodel.Mapping mp = dbentry.getMap(); + jalview.datamodel.Mapping mp = jvobj.getMap(); if (mp.getMap() != null) { Map vMap = new Map(); initMapType(vMap, mp.getMap(), true); dbref.addMap(vMap); + updateMapTo(mp); } else { jalview.bin.Cache.log.debug("Ignoring mapless DbRef.Map " - + dbentry.getSrcAccString()); + + jvobj.getSrcAccString()); } } - sequence.addDbRef(dbref); } }