2 * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3 * Copyright (C) $$Year-Rel$$ 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
10 * of the License, or (at your option) any later version.
12 * Jalview is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty
14 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15 * PURPOSE. See the GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19 * The Jalview Authors are detailed in the 'AUTHORS' file.
21 package jalview.io.vamsas;
23 import jalview.datamodel.DBRefEntry;
24 import jalview.datamodel.SequenceI;
25 import jalview.io.VamsasAppDatastore;
27 import uk.ac.vamsas.objects.core.DataSet;
28 import uk.ac.vamsas.objects.core.DbRef;
29 import uk.ac.vamsas.objects.core.Sequence;
32 * synchronize a vamsas dataset sequence with a jalview dataset sequence. This
33 * class deals with all sequence features and database references associated
34 * with the jalview sequence.
39 public class Datasetsequence extends DatastoreItem
43 private DataSet dataset;
45 // private AlignmentI jvdset;
47 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
48 SequenceI sq, String dict, DataSet dataset)
50 super(vamsasAppDatastore, sq, uk.ac.vamsas.objects.core.Sequence.class);
51 this.dataset = dataset;
52 // this.jvdset = jvdset;
57 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
60 super(vamsasAppDatastore, vdseq, SequenceI.class);
64 public void addFromDocument()
66 Sequence vseq = (Sequence) vobj;
67 SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),
68 vseq.getSequence(), (int) vseq.getStart(), (int) vseq.getEnd());
69 dsseq.setDescription(vseq.getDescription());
70 bindjvvobj(dsseq, vseq);
71 dsseq.setVamsasId(vseq.getVorbaId().getId());
76 public void updateFromDoc()
78 Sequence sq = (Sequence) vobj;
79 SequenceI sequence = (SequenceI) jvobj;
80 if (!sequence.getSequenceAsString().equals(sq.getSequence()))
83 "Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
87 // verify and update principal attributes.
88 if (sequence.getDescription() != null
89 && (sequence.getDescription() == null || !sequence
90 .getDescription().equals(sq.getDescription())))
92 sequence.setDescription(sq.getDescription());
95 if (sequence.getSequence() == null
96 || !sequence.getSequenceAsString().equals(sq.getSequence()))
98 if (sequence.getStart() != sq.getStart()
99 || sequence.getEnd() != sq.getEnd())
101 // update modified sequence.
102 sequence.setSequence(sq.getSequence());
103 sequence.setStart((int) sq.getStart());
104 sequence.setEnd((int) sq.getEnd());
108 if (!sequence.getName().equals(sq.getName()))
110 sequence.setName(sq.getName());
113 modified |= updateJvDbRefs();
114 // updateJvFeatures();
119 * private void updateJvFeatures() { Sequence vsq = (Sequence) vobj;
121 * // add or update any new features/references on dataset sequence if
122 * (vsq.getgetSequenceFeatures() != null) { int sfSize =
123 * sq.getSequenceFeatures().length;
125 * for (int sf = 0; sf < sfSize; sf++) { new
126 * jalview.io.vamsas.Sequencefeature(datastore,
127 * (jalview.datamodel.SequenceFeature) sq .getSequenceFeatures()[sf], dataset,
128 * (Sequence) vobj); } } }
130 private boolean updateSqFeatures()
132 boolean modified = false;
133 SequenceI sq = (SequenceI) jvobj;
135 // add or update any new features/references on dataset sequence
136 if (sq.getSequenceFeatures() != null)
138 int sfSize = sq.getSequenceFeatures().length;
140 for (int sf = 0; sf < sfSize; sf++)
142 modified |= new jalview.io.vamsas.Sequencefeature(datastore,
143 (jalview.datamodel.SequenceFeature) sq
144 .getSequenceFeatures()[sf],
145 dataset, (Sequence) vobj).docWasUpdated();
151 public void addToDocument()
153 SequenceI sq = (SequenceI) jvobj;
154 Sequence sequence = new Sequence();
155 bindjvvobj(sq, sequence);
156 sq.setVamsasId(sequence.getVorbaId().getId());
157 sequence.setSequence(sq.getSequenceAsString());
158 sequence.setDictionary(dict);
159 sequence.setName(sq.getName());
160 sequence.setStart(sq.getStart());
161 sequence.setEnd(sq.getEnd());
162 sequence.setDescription(sq.getDescription());
163 dataset.addSequence(sequence);
166 updateDbRefs();// sq,(Sequence) vobj, dataset);
170 * sync database references from jv to document
172 * @return true if document was modified
174 private boolean updateDbRefs()
176 boolean modifiedthedoc = false;
177 SequenceI sq = (SequenceI) jvobj;
179 if (sq.getDatasetSequence() == null && sq.getDBRefs() != null)
181 // only sync database references for dataset sequences
182 DBRefEntry[] entries = sq.getDBRefs();
183 // jalview.datamodel.DBRefEntry dbentry;
184 for (int db = 0; db < entries.length; db++)
186 modifiedthedoc |= new jalview.io.vamsas.Dbref(datastore,
188 entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();
193 return modifiedthedoc;
197 * sync database references from document to jv sequence
199 * @return true if local sequence refs were modified
201 private boolean updateJvDbRefs()
203 boolean modifiedtheseq = false;
204 SequenceI sq = (SequenceI) jvobj;
205 Sequence vsq = (Sequence) vobj;
206 if (vsq.getDbRefCount() > 0)
208 // only sync database references for dataset sequences
209 DbRef[] entries = vsq.getDbRef();
211 for (int db = 0; db < entries.length; db++)
213 modifiedtheseq |= new jalview.io.vamsas.Dbref(datastore,
215 entries[db], vsq, sq).jvWasUpdated();
218 return modifiedtheseq;
221 public void conflict()
224 "Conflict in dataset sequence update to document. Overwriting document");
225 // TODO: could try to import from document data to jalview first. and then
229 boolean modified = false;
231 public void updateToDoc()
233 SequenceI sq = (SequenceI) jvobj;
234 Sequence sequence = (Sequence) vobj;
235 // verify and update principal attributes.
236 if (sequence.getDescription() != null
237 && (sequence.getDescription() == null || !sequence
238 .getDescription().equals(sq.getDescription())))
240 sequence.setDescription(sq.getDescription());
243 if (sequence.getSequence() == null
244 || !sequence.getSequence().equals(sq.getSequenceAsString()))
246 if (sequence.getStart() != sq.getStart()
247 || sequence.getEnd() != sq.getEnd())
249 // update modified sequence.
250 sequence.setSequence(sq.getSequenceAsString());
251 sequence.setStart(sq.getStart());
252 sequence.setEnd(sq.getEnd());
256 if (!dict.equals(sequence.getDictionary()))
258 sequence.setDictionary(dict);
261 if (!sequence.getName().equals(sq.getName()))
263 sequence.setName(sq.getName());
266 modified |= updateDbRefs();
267 modified |= updateSqFeatures();
271 * (probably could just do vobj.isModified(), but..)
273 * @return true if document's dataset sequence was modified
275 public boolean getModified()