2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.1)
3 * Copyright (C) 2014 The Jalview Authors
5 * This file is part of Jalview.
7 * Jalview is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 * Jalview is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty
13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14 * PURPOSE. See the GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.
17 * The Jalview Authors are detailed in the 'AUTHORS' file.
19 package jalview.io.vamsas;
21 import jalview.datamodel.DBRefEntry;
22 import jalview.datamodel.SequenceI;
23 import jalview.io.VamsasAppDatastore;
24 import uk.ac.vamsas.objects.core.DataSet;
25 import uk.ac.vamsas.objects.core.DbRef;
26 import uk.ac.vamsas.objects.core.Sequence;
29 * synchronize a vamsas dataset sequence with a jalview dataset sequence. This
30 * class deals with all sequence features and database references associated
31 * with the jalview sequence.
36 public class Datasetsequence extends DatastoreItem
40 private DataSet dataset;
42 // private AlignmentI jvdset;
44 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
45 SequenceI sq, String dict, DataSet dataset)
47 super(vamsasAppDatastore, sq, uk.ac.vamsas.objects.core.Sequence.class);
48 this.dataset = dataset;
49 // this.jvdset = jvdset;
54 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
57 super(vamsasAppDatastore, vdseq, SequenceI.class);
61 public void addFromDocument()
63 Sequence vseq = (Sequence) vobj;
64 SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),
65 vseq.getSequence(), (int) vseq.getStart(), (int) vseq.getEnd());
66 dsseq.setDescription(vseq.getDescription());
67 bindjvvobj(dsseq, vseq);
68 dsseq.setVamsasId(vseq.getVorbaId().getId());
73 public void updateFromDoc()
75 Sequence sq = (Sequence) vobj;
76 SequenceI sequence = (SequenceI) jvobj;
77 if (!sequence.getSequenceAsString().equals(sq.getSequence()))
79 log.warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
83 // verify and update principal attributes.
84 if (sequence.getDescription() != null
85 && (sequence.getDescription() == null || !sequence
86 .getDescription().equals(sq.getDescription())))
88 sequence.setDescription(sq.getDescription());
91 if (sequence.getSequence() == null
92 || !sequence.getSequenceAsString().equals(sq.getSequence()))
94 if (sequence.getStart() != sq.getStart()
95 || sequence.getEnd() != sq.getEnd())
97 // update modified sequence.
98 sequence.setSequence(sq.getSequence());
99 sequence.setStart((int) sq.getStart());
100 sequence.setEnd((int) sq.getEnd());
104 if (!sequence.getName().equals(sq.getName()))
106 sequence.setName(sq.getName());
109 modified |= updateJvDbRefs();
110 // updateJvFeatures();
115 * private void updateJvFeatures() { Sequence vsq = (Sequence) vobj;
117 * // add or update any new features/references on dataset sequence if
118 * (vsq.getgetSequenceFeatures() != null) { int sfSize =
119 * sq.getSequenceFeatures().length;
121 * for (int sf = 0; sf < sfSize; sf++) { new
122 * jalview.io.vamsas.Sequencefeature(datastore,
123 * (jalview.datamodel.SequenceFeature) sq .getSequenceFeatures()[sf], dataset,
124 * (Sequence) vobj); } } }
126 private boolean updateSqFeatures()
128 boolean modified = false;
129 SequenceI sq = (SequenceI) jvobj;
131 // add or update any new features/references on dataset sequence
132 if (sq.getSequenceFeatures() != null)
134 int sfSize = sq.getSequenceFeatures().length;
136 for (int sf = 0; sf < sfSize; sf++)
138 modified |= new jalview.io.vamsas.Sequencefeature(datastore,
139 (jalview.datamodel.SequenceFeature) sq
140 .getSequenceFeatures()[sf], dataset,
141 (Sequence) vobj).docWasUpdated();
147 public void addToDocument()
149 SequenceI sq = (SequenceI) jvobj;
150 Sequence sequence = new Sequence();
151 bindjvvobj(sq, sequence);
152 sq.setVamsasId(sequence.getVorbaId().getId());
153 sequence.setSequence(sq.getSequenceAsString());
154 sequence.setDictionary(dict);
155 sequence.setName(sq.getName());
156 sequence.setStart(sq.getStart());
157 sequence.setEnd(sq.getEnd());
158 sequence.setDescription(sq.getDescription());
159 dataset.addSequence(sequence);
162 updateDbRefs();// sq,(Sequence) vobj, dataset);
166 * sync database references from jv to document
168 * @return true if document was modified
170 private boolean updateDbRefs()
172 boolean modifiedthedoc = false;
173 SequenceI sq = (SequenceI) jvobj;
175 if (sq.getDatasetSequence() == null && sq.getDBRef() != null)
177 // only sync database references for dataset sequences
178 DBRefEntry[] entries = sq.getDBRef();
179 // jalview.datamodel.DBRefEntry dbentry;
180 for (int db = 0; db < entries.length; db++)
182 modifiedthedoc |= new jalview.io.vamsas.Dbref(datastore,
184 entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();
189 return modifiedthedoc;
193 * sync database references from document to jv sequence
195 * @return true if local sequence refs were modified
197 private boolean updateJvDbRefs()
199 boolean modifiedtheseq = false;
200 SequenceI sq = (SequenceI) jvobj;
201 Sequence vsq = (Sequence) vobj;
202 if (vsq.getDbRefCount() > 0)
204 // only sync database references for dataset sequences
205 DbRef[] entries = vsq.getDbRef();
207 for (int db = 0; db < entries.length; db++)
209 modifiedtheseq |= new jalview.io.vamsas.Dbref(datastore,
211 entries[db], vsq, sq).jvWasUpdated();
214 return modifiedtheseq;
217 public void conflict()
219 log.warn("Conflict in dataset sequence update to document. Overwriting document");
220 // TODO: could try to import from document data to jalview first. and then
224 boolean modified = false;
226 public void updateToDoc()
228 SequenceI sq = (SequenceI) jvobj;
229 Sequence sequence = (Sequence) vobj;
230 // verify and update principal attributes.
231 if (sequence.getDescription() != null
232 && (sequence.getDescription() == null || !sequence
233 .getDescription().equals(sq.getDescription())))
235 sequence.setDescription(sq.getDescription());
238 if (sequence.getSequence() == null
239 || !sequence.getSequence().equals(sq.getSequenceAsString()))
241 if (sequence.getStart() != sq.getStart()
242 || sequence.getEnd() != sq.getEnd())
244 // update modified sequence.
245 sequence.setSequence(sq.getSequenceAsString());
246 sequence.setStart(sq.getStart());
247 sequence.setEnd(sq.getEnd());
251 if (!dict.equals(sequence.getDictionary()))
253 sequence.setDictionary(dict);
256 if (!sequence.getName().equals(sq.getName()))
258 sequence.setName(sq.getName());
261 modified |= updateDbRefs();
262 modified |= updateSqFeatures();
266 * (probably could just do vobj.isModified(), but..)
268 * @return true if document's dataset sequence was modified
270 public boolean getModified()