2 * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1)
\r
3 * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
\r
5 * This program is free software; you can redistribute it and/or
\r
6 * modify it under the terms of the GNU General Public License
\r
7 * as published by the Free Software Foundation; either version 2
\r
8 * of the License, or (at your option) any later version.
\r
10 * This program is distributed in the hope that it will be useful,
\r
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 * GNU General Public License for more details.
\r
15 * You should have received a copy of the GNU General Public License
\r
16 * along with this program; if not, write to the Free Software
\r
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
\r
19 package jalview.io.vamsas;
\r
21 import jalview.datamodel.AlignmentI;
\r
22 import jalview.datamodel.DBRefEntry;
\r
23 import jalview.datamodel.SequenceI;
\r
24 import jalview.io.VamsasAppDatastore;
\r
25 import uk.ac.vamsas.objects.core.DataSet;
\r
26 import uk.ac.vamsas.objects.core.Sequence;
\r
29 * synchronize a vamsas dataset sequence with a jalview dataset sequence.
\r
30 * This class deals with all sequence features and database references associated with
\r
31 * the jalview sequence.
\r
35 public class Datasetsequence extends DatastoreItem
\r
38 private DataSet dataset;
\r
39 // private AlignmentI jvdset;
\r
41 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
\r
42 SequenceI sq, String dict, DataSet dataset)
\r
44 super(vamsasAppDatastore, sq, uk.ac.vamsas.objects.core.Sequence.class);
\r
45 this.dataset = dataset;
\r
46 // this.jvdset = jvdset;
\r
51 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
\r
54 super(vamsasAppDatastore, vdseq, SequenceI.class);
\r
58 public void addFromDocument()
\r
60 Sequence vseq = (Sequence) vobj;
\r
61 SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),
\r
63 (int) vseq.getStart(), (int) vseq.getEnd());
\r
64 dsseq.setDescription(vseq.getDescription());
\r
65 bindjvvobj(dsseq, vseq);
\r
66 dsseq.setVamsasId(vseq.getVorbaId().getId());
\r
70 public void updateFromDoc()
\r
72 Sequence sq = (Sequence) vobj;
\r
73 SequenceI sequence = (SequenceI) jvobj;
\r
74 if (!sequence.getSequenceAsString().equals(sq.getSequence()))
\r
76 log.warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
\r
78 // verify and update principal attributes.
\r
79 if (sequence.getDescription() != null
\r
80 && (sequence.getDescription() == null || !sequence
\r
81 .getDescription().equals(sq.getDescription())))
\r
83 sequence.setDescription(sq.getDescription());
\r
86 if (sequence.getSequence() == null
\r
87 || !sequence.getSequenceAsString().equals(
\r
90 if (sequence.getStart() != sq.getStart()
\r
91 || sequence.getEnd() != sq.getEnd())
\r
93 // update modified sequence.
\r
94 sequence.setSequence(sq.getSequence());
\r
95 sequence.setStart((int)sq.getStart());
\r
96 sequence.setEnd((int)sq.getEnd());
\r
100 if (!sequence.getName().equals(sq.getName()))
\r
102 sequence.setName(sq.getName());
\r
109 public void addToDocument()
\r
111 SequenceI sq = (SequenceI) jvobj;
\r
112 Sequence sequence = new Sequence();
\r
113 bindjvvobj(sq, sequence);
\r
114 sq.setVamsasId(sequence.getVorbaId().getId());
\r
115 sequence.setSequence(sq.getSequenceAsString());
\r
116 sequence.setDictionary(dict);
\r
117 sequence.setName(sq.getName());
\r
118 sequence.setStart(sq.getStart());
\r
119 sequence.setEnd(sq.getEnd());
\r
120 sequence.setDescription(sq.getDescription());
\r
121 dataset.addSequence(sequence);
\r
123 // add or update any new features/references on dataset sequence
\r
124 if (sq.getSequenceFeatures() != null)
\r
126 int sfSize = sq.getSequenceFeatures().length;
\r
128 for (int sf = 0; sf < sfSize; sf++)
\r
130 new jalview.io.vamsas.Sequencefeature(datastore, (jalview.datamodel.SequenceFeature) sq
\r
131 .getSequenceFeatures()[sf], dataset, (Sequence) vobj);
\r
134 if (sq.getDatasetSequence() == null && sq.getDBRef() != null)
\r
136 // only sync database references for dataset sequences
\r
137 DBRefEntry[] entries = sq.getDBRef();
\r
138 jalview.datamodel.DBRefEntry dbentry;
\r
139 for (int db = 0; db < entries.length; db++)
\r
141 Rangetype dbr = new jalview.io.vamsas.Dbref(datastore,
\r
142 dbentry = entries[db], sq, (Sequence) vobj, dataset);
\r
149 public void conflict()
\r
151 log.warn("Conflict in dataset sequence update to document. Overwriting document");
\r
152 // TODO: could try to import from document data to jalview first. and then
\r
155 boolean modified = false;
\r
156 public void updateToDoc()
\r
158 SequenceI sq = (SequenceI) jvobj;
\r
159 Sequence sequence = (Sequence) vobj;
\r
160 // verify and update principal attributes.
\r
161 if (sequence.getDescription() != null
\r
162 && (sequence.getDescription() == null || !sequence
\r
163 .getDescription().equals(sq.getDescription())))
\r
165 sequence.setDescription(sq.getDescription());
\r
168 if (sequence.getSequence() == null
\r
169 || !sequence.getSequence().equals(
\r
170 sq.getSequenceAsString()))
\r
172 if (sequence.getStart() != sq.getStart()
\r
173 || sequence.getEnd() != sq.getEnd())
\r
175 // update modified sequence.
\r
176 sequence.setSequence(sq.getSequenceAsString());
\r
177 sequence.setStart(sq.getStart());
\r
178 sequence.setEnd(sq.getEnd());
\r
182 if (!dict.equals(sequence.getDictionary()))
\r
184 sequence.setDictionary(dict);
\r
187 if (!sequence.getName().equals(sq.getName()))
\r
189 sequence.setName(sq.getName());
\r
195 * (probably could just do vobj.isModified(), but..)
\r
196 * @return true if document's dataset sequence was modified
\r
198 public boolean getModified()
\r