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