2 * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
\r
3 * Copyright (C) 2009 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
19 package jalview.io.vamsas;
\r
21 import jalview.datamodel.AlignmentI;
\r
22 import jalview.datamodel.DBRefEntry;
\r
23 import jalview.datamodel.SequenceI;
\r
24 import jalview.io.VamsasAppDatastore;
\r
25 import uk.ac.vamsas.objects.core.DataSet;
\r
26 import uk.ac.vamsas.objects.core.DbRef;
\r
27 import uk.ac.vamsas.objects.core.Sequence;
\r
30 * synchronize a vamsas dataset sequence with a jalview dataset sequence.
\r
31 * This class deals with all sequence features and database references associated with
\r
32 * the jalview sequence.
\r
36 public class Datasetsequence extends DatastoreItem
\r
39 private DataSet dataset;
\r
40 // private AlignmentI jvdset;
\r
42 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
\r
43 SequenceI sq, String dict, DataSet dataset)
\r
45 super(vamsasAppDatastore, sq, uk.ac.vamsas.objects.core.Sequence.class);
\r
46 this.dataset = dataset;
\r
47 // this.jvdset = jvdset;
\r
52 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
\r
55 super(vamsasAppDatastore, vdseq, SequenceI.class);
\r
59 public void addFromDocument()
\r
61 Sequence vseq = (Sequence) vobj;
\r
62 SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),
\r
64 (int) vseq.getStart(), (int) vseq.getEnd());
\r
65 dsseq.setDescription(vseq.getDescription());
\r
66 bindjvvobj(dsseq, vseq);
\r
67 dsseq.setVamsasId(vseq.getVorbaId().getId());
\r
71 public void updateFromDoc()
\r
73 Sequence sq = (Sequence) vobj;
\r
74 SequenceI sequence = (SequenceI) jvobj;
\r
75 if (!sequence.getSequenceAsString().equals(sq.getSequence()))
\r
77 log.warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
\r
79 // verify and update principal attributes.
\r
80 if (sequence.getDescription() != null
\r
81 && (sequence.getDescription() == null || !sequence
\r
82 .getDescription().equals(sq.getDescription())))
\r
84 sequence.setDescription(sq.getDescription());
\r
87 if (sequence.getSequence() == null
\r
88 || !sequence.getSequenceAsString().equals(
\r
91 if (sequence.getStart() != sq.getStart()
\r
92 || sequence.getEnd() != sq.getEnd())
\r
94 // update modified sequence.
\r
95 sequence.setSequence(sq.getSequence());
\r
96 sequence.setStart((int)sq.getStart());
\r
97 sequence.setEnd((int)sq.getEnd());
\r
101 if (!sequence.getName().equals(sq.getName()))
\r
103 sequence.setName(sq.getName());
\r
106 modified |= updateJvDbRefs();
\r
107 // updateJvFeatures();
\r
112 private void updateJvFeatures()
\r
114 Sequence vsq = (Sequence) vobj;
\r
116 // add or update any new features/references on dataset sequence
\r
117 if (vsq.getgetSequenceFeatures() != null)
\r
119 int sfSize = sq.getSequenceFeatures().length;
\r
121 for (int sf = 0; sf < sfSize; sf++)
\r
123 new jalview.io.vamsas.Sequencefeature(datastore, (jalview.datamodel.SequenceFeature) sq
\r
124 .getSequenceFeatures()[sf], dataset, (Sequence) vobj);
\r
129 private boolean updateSqFeatures()
\r
131 boolean modified=false;
\r
132 SequenceI sq = (SequenceI) jvobj;
\r
134 // add or update any new features/references on dataset sequence
\r
135 if (sq.getSequenceFeatures() != null)
\r
137 int sfSize = sq.getSequenceFeatures().length;
\r
139 for (int sf = 0; sf < sfSize; sf++)
\r
141 modified|=new jalview.io.vamsas.Sequencefeature(datastore, (jalview.datamodel.SequenceFeature) sq
\r
142 .getSequenceFeatures()[sf], dataset, (Sequence) vobj).docWasUpdated();
\r
148 public void addToDocument()
\r
150 SequenceI sq = (SequenceI) jvobj;
\r
151 Sequence sequence = new Sequence();
\r
152 bindjvvobj(sq, sequence);
\r
153 sq.setVamsasId(sequence.getVorbaId().getId());
\r
154 sequence.setSequence(sq.getSequenceAsString());
\r
155 sequence.setDictionary(dict);
\r
156 sequence.setName(sq.getName());
\r
157 sequence.setStart(sq.getStart());
\r
158 sequence.setEnd(sq.getEnd());
\r
159 sequence.setDescription(sq.getDescription());
\r
160 dataset.addSequence(sequence);
\r
162 updateSqFeatures();
\r
163 updateDbRefs();//sq,(Sequence) vobj, dataset);
\r
166 * sync database references from jv to document
\r
167 * @return true if document was modified
\r
169 private boolean updateDbRefs() {
\r
170 boolean modifiedthedoc=false;
\r
171 SequenceI sq = (SequenceI) jvobj;
\r
173 if (sq.getDatasetSequence() == null && sq.getDBRef() != null)
\r
175 // only sync database references for dataset sequences
\r
176 DBRefEntry[] entries = sq.getDBRef();
\r
177 //jalview.datamodel.DBRefEntry dbentry;
\r
178 for (int db = 0; db < entries.length; db++)
\r
180 modifiedthedoc|= new jalview.io.vamsas.Dbref(datastore,
\r
182 entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();
\r
187 return modifiedthedoc;
\r
190 * sync database references from document to jv sequence
\r
191 * @return true if local sequence refs were modified
\r
193 private boolean updateJvDbRefs() {
\r
194 boolean modifiedtheseq=false;
\r
195 SequenceI sq = (SequenceI) jvobj;
\r
196 Sequence vsq = (Sequence) vobj;
\r
197 if (vsq.getDbRefCount()>0) {
\r
198 // only sync database references for dataset sequences
\r
199 DbRef[] entries = vsq.getDbRef();
\r
201 for (int db = 0; db < entries.length; db++)
\r
203 modifiedtheseq|= new jalview.io.vamsas.Dbref(datastore,
\r
205 entries[db], vsq, sq).jvWasUpdated();
\r
208 return modifiedtheseq;
\r
211 public void conflict()
\r
213 log.warn("Conflict in dataset sequence update to document. Overwriting document");
\r
214 // TODO: could try to import from document data to jalview first. and then
\r
217 boolean modified = false;
\r
218 public void updateToDoc()
\r
220 SequenceI sq = (SequenceI) jvobj;
\r
221 Sequence sequence = (Sequence) vobj;
\r
222 // verify and update principal attributes.
\r
223 if (sequence.getDescription() != null
\r
224 && (sequence.getDescription() == null || !sequence
\r
225 .getDescription().equals(sq.getDescription())))
\r
227 sequence.setDescription(sq.getDescription());
\r
230 if (sequence.getSequence() == null
\r
231 || !sequence.getSequence().equals(
\r
232 sq.getSequenceAsString()))
\r
234 if (sequence.getStart() != sq.getStart()
\r
235 || sequence.getEnd() != sq.getEnd())
\r
237 // update modified sequence.
\r
238 sequence.setSequence(sq.getSequenceAsString());
\r
239 sequence.setStart(sq.getStart());
\r
240 sequence.setEnd(sq.getEnd());
\r
244 if (!dict.equals(sequence.getDictionary()))
\r
246 sequence.setDictionary(dict);
\r
249 if (!sequence.getName().equals(sq.getName()))
\r
251 sequence.setName(sq.getName());
\r
254 modified |= updateDbRefs();
\r
255 modified |= updateSqFeatures();
\r
259 * (probably could just do vobj.isModified(), but..)
\r
260 * @return true if document's dataset sequence was modified
\r
262 public boolean getModified()
\r