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()))
82 log.warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
86 // verify and update principal attributes.
87 if (sequence.getDescription() != null
88 && (sequence.getDescription() == null || !sequence
89 .getDescription().equals(sq.getDescription())))
91 sequence.setDescription(sq.getDescription());
94 if (sequence.getSequence() == null
95 || !sequence.getSequenceAsString().equals(sq.getSequence()))
97 if (sequence.getStart() != sq.getStart()
98 || sequence.getEnd() != sq.getEnd())
100 // update modified sequence.
101 sequence.setSequence(sq.getSequence());
102 sequence.setStart((int) sq.getStart());
103 sequence.setEnd((int) sq.getEnd());
107 if (!sequence.getName().equals(sq.getName()))
109 sequence.setName(sq.getName());
112 modified |= updateJvDbRefs();
113 // updateJvFeatures();
118 * private void updateJvFeatures() { Sequence vsq = (Sequence) vobj;
120 * // add or update any new features/references on dataset sequence if
121 * (vsq.getgetSequenceFeatures() != null) { int sfSize =
122 * sq.getSequenceFeatures().length;
124 * for (int sf = 0; sf < sfSize; sf++) { new
125 * jalview.io.vamsas.Sequencefeature(datastore,
126 * (jalview.datamodel.SequenceFeature) sq .getSequenceFeatures()[sf], dataset,
127 * (Sequence) vobj); } } }
129 private boolean updateSqFeatures()
131 boolean modified = false;
132 SequenceI sq = (SequenceI) jvobj;
134 // add or update any new features/references on dataset sequence
135 if (sq.getSequenceFeatures() != null)
137 int sfSize = sq.getSequenceFeatures().length;
139 for (int sf = 0; sf < sfSize; sf++)
141 modified |= new jalview.io.vamsas.Sequencefeature(datastore,
142 (jalview.datamodel.SequenceFeature) sq
143 .getSequenceFeatures()[sf], dataset,
144 (Sequence) vobj).docWasUpdated();
150 public void addToDocument()
152 SequenceI sq = (SequenceI) jvobj;
153 Sequence sequence = new Sequence();
154 bindjvvobj(sq, sequence);
155 sq.setVamsasId(sequence.getVorbaId().getId());
156 sequence.setSequence(sq.getSequenceAsString());
157 sequence.setDictionary(dict);
158 sequence.setName(sq.getName());
159 sequence.setStart(sq.getStart());
160 sequence.setEnd(sq.getEnd());
161 sequence.setDescription(sq.getDescription());
162 dataset.addSequence(sequence);
165 updateDbRefs();// sq,(Sequence) vobj, dataset);
169 * sync database references from jv to document
171 * @return true if document was modified
173 private boolean updateDbRefs()
175 boolean modifiedthedoc = false;
176 SequenceI sq = (SequenceI) jvobj;
178 if (sq.getDatasetSequence() == null && sq.getDBRef() != null)
180 // only sync database references for dataset sequences
181 DBRefEntry[] entries = sq.getDBRef();
182 // jalview.datamodel.DBRefEntry dbentry;
183 for (int db = 0; db < entries.length; db++)
185 modifiedthedoc |= new jalview.io.vamsas.Dbref(datastore,
187 entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();
192 return modifiedthedoc;
196 * sync database references from document to jv sequence
198 * @return true if local sequence refs were modified
200 private boolean updateJvDbRefs()
202 boolean modifiedtheseq = false;
203 SequenceI sq = (SequenceI) jvobj;
204 Sequence vsq = (Sequence) vobj;
205 if (vsq.getDbRefCount() > 0)
207 // only sync database references for dataset sequences
208 DbRef[] entries = vsq.getDbRef();
210 for (int db = 0; db < entries.length; db++)
212 modifiedtheseq |= new jalview.io.vamsas.Dbref(datastore,
214 entries[db], vsq, sq).jvWasUpdated();
217 return modifiedtheseq;
220 public void conflict()
222 log.warn("Conflict in dataset sequence update to document. Overwriting document");
223 // TODO: could try to import from document data to jalview first. and then
227 boolean modified = false;
229 public void updateToDoc()
231 SequenceI sq = (SequenceI) jvobj;
232 Sequence sequence = (Sequence) vobj;
233 // verify and update principal attributes.
234 if (sequence.getDescription() != null
235 && (sequence.getDescription() == null || !sequence
236 .getDescription().equals(sq.getDescription())))
238 sequence.setDescription(sq.getDescription());
241 if (sequence.getSequence() == null
242 || !sequence.getSequence().equals(sq.getSequenceAsString()))
244 if (sequence.getStart() != sq.getStart()
245 || sequence.getEnd() != sq.getEnd())
247 // update modified sequence.
248 sequence.setSequence(sq.getSequenceAsString());
249 sequence.setStart(sq.getStart());
250 sequence.setEnd(sq.getEnd());
254 if (!dict.equals(sequence.getDictionary()))
256 sequence.setDictionary(dict);
259 if (!sequence.getName().equals(sq.getName()))
261 sequence.setName(sq.getName());
264 modified |= updateDbRefs();
265 modified |= updateSqFeatures();
269 * (probably could just do vobj.isModified(), but..)
271 * @return true if document's dataset sequence was modified
273 public boolean getModified()