Clover icon

jalviewX

  1. Project Clover database Wed Oct 31 2018 15:13:58 GMT
  2. Package jalview.io.vamsas

File Datasetsequence.java

 

Coverage histogram

../../../img/srcFileCovDistChart0.png
56% of files have more coverage

Code metrics

28
87
11
1
283
189
34
0.39
7.91
11
3.09

Classes

Class Line # Actions
Datasetsequence 42 87 34 126
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
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.
11    *
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.
16    *
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.
20    */
21    package jalview.io.vamsas;
22   
23    import jalview.datamodel.DBRefEntry;
24    import jalview.datamodel.SequenceFeature;
25    import jalview.datamodel.SequenceI;
26    import jalview.io.VamsasAppDatastore;
27   
28    import java.util.List;
29   
30    import uk.ac.vamsas.objects.core.DataSet;
31    import uk.ac.vamsas.objects.core.DbRef;
32    import uk.ac.vamsas.objects.core.Sequence;
33   
34    /**
35    * synchronize a vamsas dataset sequence with a jalview dataset sequence. This
36    * class deals with all sequence features and database references associated
37    * with the jalview sequence.
38    *
39    * @author JimP
40    *
41    */
 
42    public class Datasetsequence extends DatastoreItem
43    {
44    String dict;
45   
46    private DataSet dataset;
47   
48    // private AlignmentI jvdset;
49   
 
50  0 toggle public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
51    SequenceI sq, String theDict, DataSet theDataset)
52    {
53  0 super(vamsasAppDatastore, sq, uk.ac.vamsas.objects.core.Sequence.class);
54  0 this.dataset = theDataset;
55    // this.jvdset = jvdset;
56  0 this.dict = theDict;
57  0 doSync();
58    }
59   
 
60  0 toggle public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
61    Sequence vdseq)
62    {
63  0 super(vamsasAppDatastore, vdseq, SequenceI.class);
64  0 doJvUpdate();
65    }
66   
 
67  0 toggle @Override
68    public void addFromDocument()
69    {
70  0 Sequence vseq = (Sequence) vobj;
71  0 SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),
72    vseq.getSequence(), (int) vseq.getStart(), (int) vseq.getEnd());
73  0 dsseq.setDescription(vseq.getDescription());
74  0 bindjvvobj(dsseq, vseq);
75  0 dsseq.setVamsasId(vseq.getVorbaId().getId());
76  0 jvobj = dsseq;
77  0 modified = true;
78    }
79   
 
80  0 toggle @Override
81    public void updateFromDoc()
82    {
83  0 Sequence sq = (Sequence) vobj;
84  0 SequenceI sequence = (SequenceI) jvobj;
85  0 if (!sequence.getSequenceAsString().equals(sq.getSequence()))
86    {
87  0 log.warn(
88    "Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
89    }
90    else
91    {
92    // verify and update principal attributes.
93  0 if (sequence.getDescription() != null
94    && (sequence.getDescription() == null || !sequence
95    .getDescription().equals(sq.getDescription())))
96    {
97  0 sequence.setDescription(sq.getDescription());
98  0 modified = true;
99    }
100  0 if (sequence.getSequence() == null
101    || !sequence.getSequenceAsString().equals(sq.getSequence()))
102    {
103  0 if (sequence.getStart() != sq.getStart()
104    || sequence.getEnd() != sq.getEnd())
105    {
106    // update modified sequence.
107  0 sequence.setSequence(sq.getSequence());
108  0 sequence.setStart((int) sq.getStart());
109  0 sequence.setEnd((int) sq.getEnd());
110  0 modified = true;
111    }
112    }
113  0 if (!sequence.getName().equals(sq.getName()))
114    {
115  0 sequence.setName(sq.getName());
116  0 modified = true;
117    }
118  0 modified |= updateJvDbRefs();
119    // updateJvFeatures();
120    }
121    }
122   
123    /*
124    * private void updateJvFeatures() { Sequence vsq = (Sequence) vobj;
125    *
126    * // add or update any new features/references on dataset sequence if
127    * (vsq.getgetSequenceFeatures() != null) { int sfSize =
128    * sq.getSequenceFeatures().length;
129    *
130    * for (int sf = 0; sf < sfSize; sf++) { new
131    * jalview.io.vamsas.Sequencefeature(datastore,
132    * (jalview.datamodel.SequenceFeature) sq .getSequenceFeatures()[sf], dataset,
133    * (Sequence) vobj); } } }
134    */
 
135  0 toggle private boolean updateSqFeatures()
136    {
137  0 boolean changed = false;
138  0 SequenceI sq = (SequenceI) jvobj;
139   
140    // add or update any new features/references on dataset sequence
141  0 List<SequenceFeature> sfs = sq.getSequenceFeatures();
142  0 for (SequenceFeature sf : sfs)
143    {
144  0 changed |= new jalview.io.vamsas.Sequencefeature(datastore, sf,
145    dataset, (Sequence) vobj).docWasUpdated();
146    }
147   
148  0 return changed;
149    }
150   
 
151  0 toggle @Override
152    public void addToDocument()
153    {
154  0 SequenceI sq = (SequenceI) jvobj;
155  0 Sequence sequence = new Sequence();
156  0 bindjvvobj(sq, sequence);
157  0 sq.setVamsasId(sequence.getVorbaId().getId());
158  0 sequence.setSequence(sq.getSequenceAsString());
159  0 sequence.setDictionary(dict);
160  0 sequence.setName(sq.getName());
161  0 sequence.setStart(sq.getStart());
162  0 sequence.setEnd(sq.getEnd());
163  0 sequence.setDescription(sq.getDescription());
164  0 dataset.addSequence(sequence);
165  0 vobj = sequence;
166  0 updateSqFeatures();
167  0 updateDbRefs();// sq,(Sequence) vobj, dataset);
168    }
169   
170    /**
171    * sync database references from jv to document
172    *
173    * @return true if document was modified
174    */
 
175  0 toggle private boolean updateDbRefs()
176    {
177  0 boolean modifiedthedoc = false;
178  0 SequenceI sq = (SequenceI) jvobj;
179   
180  0 if (sq.getDatasetSequence() == null && sq.getDBRefs() != null)
181    {
182    // only sync database references for dataset sequences
183  0 DBRefEntry[] entries = sq.getDBRefs();
184    // jalview.datamodel.DBRefEntry dbentry;
185  0 for (int db = 0; db < entries.length; db++)
186    {
187  0 modifiedthedoc |= new jalview.io.vamsas.Dbref(datastore,
188    // dbentry =
189    entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();
190   
191    }
192   
193    }
194  0 return modifiedthedoc;
195    }
196   
197    /**
198    * sync database references from document to jv sequence
199    *
200    * @return true if local sequence refs were modified
201    */
 
202  0 toggle private boolean updateJvDbRefs()
203    {
204  0 boolean modifiedtheseq = false;
205  0 SequenceI sq = (SequenceI) jvobj;
206  0 Sequence vsq = (Sequence) vobj;
207  0 if (vsq.getDbRefCount() > 0)
208    {
209    // only sync database references for dataset sequences
210  0 DbRef[] entries = vsq.getDbRef();
211    // DbRef dbentry;
212  0 for (int db = 0; db < entries.length; db++)
213    {
214  0 modifiedtheseq |= new jalview.io.vamsas.Dbref(datastore,
215    // dbentry =
216    entries[db], vsq, sq).jvWasUpdated();
217    }
218    }
219  0 return modifiedtheseq;
220    }
221   
 
222  0 toggle @Override
223    public void conflict()
224    {
225  0 log.warn(
226    "Conflict in dataset sequence update to document. Overwriting document");
227    // TODO: could try to import from document data to jalview first. and then
228  0 updateToDoc();
229    }
230   
231    boolean modified = false;
232   
 
233  0 toggle @Override
234    public void updateToDoc()
235    {
236  0 SequenceI sq = (SequenceI) jvobj;
237  0 Sequence sequence = (Sequence) vobj;
238    // verify and update principal attributes.
239  0 if (sequence.getDescription() != null
240    && (sequence.getDescription() == null || !sequence
241    .getDescription().equals(sq.getDescription())))
242    {
243  0 sequence.setDescription(sq.getDescription());
244  0 modified = true;
245    }
246  0 if (sequence.getSequence() == null
247    || !sequence.getSequence().equals(sq.getSequenceAsString()))
248    {
249  0 if (sequence.getStart() != sq.getStart()
250    || sequence.getEnd() != sq.getEnd())
251    {
252    // update modified sequence.
253  0 sequence.setSequence(sq.getSequenceAsString());
254  0 sequence.setStart(sq.getStart());
255  0 sequence.setEnd(sq.getEnd());
256  0 modified = true;
257    }
258    }
259  0 if (!dict.equals(sequence.getDictionary()))
260    {
261  0 sequence.setDictionary(dict);
262  0 modified = true;
263    }
264  0 if (!sequence.getName().equals(sq.getName()))
265    {
266  0 sequence.setName(sq.getName());
267  0 modified = true;
268    }
269  0 modified |= updateDbRefs();
270  0 modified |= updateSqFeatures();
271    }
272   
273    /**
274    * (probably could just do vobj.isModified(), but..)
275    *
276    * @return true if document's dataset sequence was modified
277    */
 
278  0 toggle public boolean getModified()
279    {
280  0 return modified;
281    }
282   
283    }