2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
\r
3 * Copyright (C) 2010 J Procter, AM Waterhouse, 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(), vseq
\r
65 .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
80 .warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
\r
84 // verify and update principal attributes.
\r
85 if (sequence.getDescription() != null
\r
86 && (sequence.getDescription() == null || !sequence
\r
87 .getDescription().equals(sq.getDescription())))
\r
89 sequence.setDescription(sq.getDescription());
\r
92 if (sequence.getSequence() == null
\r
93 || !sequence.getSequenceAsString().equals(sq.getSequence()))
\r
95 if (sequence.getStart() != sq.getStart()
\r
96 || sequence.getEnd() != sq.getEnd())
\r
98 // update modified sequence.
\r
99 sequence.setSequence(sq.getSequence());
\r
100 sequence.setStart((int) sq.getStart());
\r
101 sequence.setEnd((int) sq.getEnd());
\r
105 if (!sequence.getName().equals(sq.getName()))
\r
107 sequence.setName(sq.getName());
\r
110 modified |= updateJvDbRefs();
\r
111 // updateJvFeatures();
\r
116 * private void updateJvFeatures() { Sequence vsq = (Sequence) vobj;
\r
118 * // add or update any new features/references on dataset sequence if
\r
119 * (vsq.getgetSequenceFeatures() != null) { int sfSize =
\r
120 * sq.getSequenceFeatures().length;
\r
122 * for (int sf = 0; sf < sfSize; sf++) { new
\r
123 * jalview.io.vamsas.Sequencefeature(datastore,
\r
124 * (jalview.datamodel.SequenceFeature) sq .getSequenceFeatures()[sf], dataset,
\r
125 * (Sequence) vobj); } } }
\r
127 private boolean updateSqFeatures()
\r
129 boolean modified = false;
\r
130 SequenceI sq = (SequenceI) jvobj;
\r
132 // add or update any new features/references on dataset sequence
\r
133 if (sq.getSequenceFeatures() != null)
\r
135 int sfSize = sq.getSequenceFeatures().length;
\r
137 for (int sf = 0; sf < sfSize; sf++)
\r
139 modified |= new jalview.io.vamsas.Sequencefeature(datastore,
\r
140 (jalview.datamodel.SequenceFeature) sq
\r
141 .getSequenceFeatures()[sf], dataset,
\r
142 (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
167 * sync database references from jv to document
\r
169 * @return true if document was modified
\r
171 private boolean updateDbRefs()
\r
173 boolean modifiedthedoc = false;
\r
174 SequenceI sq = (SequenceI) jvobj;
\r
176 if (sq.getDatasetSequence() == null && sq.getDBRef() != null)
\r
178 // only sync database references for dataset sequences
\r
179 DBRefEntry[] entries = sq.getDBRef();
\r
180 // jalview.datamodel.DBRefEntry dbentry;
\r
181 for (int db = 0; db < entries.length; db++)
\r
183 modifiedthedoc |= new jalview.io.vamsas.Dbref(datastore,
\r
185 entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();
\r
190 return modifiedthedoc;
\r
194 * sync database references from document to jv sequence
\r
196 * @return true if local sequence refs were modified
\r
198 private boolean updateJvDbRefs()
\r
200 boolean modifiedtheseq = false;
\r
201 SequenceI sq = (SequenceI) jvobj;
\r
202 Sequence vsq = (Sequence) vobj;
\r
203 if (vsq.getDbRefCount() > 0)
\r
205 // only sync database references for dataset sequences
\r
206 DbRef[] entries = vsq.getDbRef();
\r
208 for (int db = 0; db < entries.length; db++)
\r
210 modifiedtheseq |= new jalview.io.vamsas.Dbref(datastore,
\r
212 entries[db], vsq, sq).jvWasUpdated();
\r
215 return modifiedtheseq;
\r
218 public void conflict()
\r
221 .warn("Conflict in dataset sequence update to document. Overwriting document");
\r
222 // TODO: could try to import from document data to jalview first. and then
\r
226 boolean modified = false;
\r
228 public void updateToDoc()
\r
230 SequenceI sq = (SequenceI) jvobj;
\r
231 Sequence sequence = (Sequence) vobj;
\r
232 // verify and update principal attributes.
\r
233 if (sequence.getDescription() != null
\r
234 && (sequence.getDescription() == null || !sequence
\r
235 .getDescription().equals(sq.getDescription())))
\r
237 sequence.setDescription(sq.getDescription());
\r
240 if (sequence.getSequence() == null
\r
241 || !sequence.getSequence().equals(sq.getSequenceAsString()))
\r
243 if (sequence.getStart() != sq.getStart()
\r
244 || sequence.getEnd() != sq.getEnd())
\r
246 // update modified sequence.
\r
247 sequence.setSequence(sq.getSequenceAsString());
\r
248 sequence.setStart(sq.getStart());
\r
249 sequence.setEnd(sq.getEnd());
\r
253 if (!dict.equals(sequence.getDictionary()))
\r
255 sequence.setDictionary(dict);
\r
258 if (!sequence.getName().equals(sq.getName()))
\r
260 sequence.setName(sq.getName());
\r
263 modified |= updateDbRefs();
\r
264 modified |= updateSqFeatures();
\r
268 * (probably could just do vobj.isModified(), but..)
\r
270 * @return true if document's dataset sequence was modified
\r
272 public boolean getModified()
\r