1 package jalview.io.vamsas;
\r
3 import jalview.datamodel.AlignmentI;
\r
4 import jalview.datamodel.DBRefEntry;
\r
5 import jalview.datamodel.SequenceI;
\r
6 import jalview.io.VamsasAppDatastore;
\r
7 import uk.ac.vamsas.objects.core.DataSet;
\r
8 import uk.ac.vamsas.objects.core.Sequence;
\r
11 * synchronize a vamsas dataset sequence with a jalview dataset sequence.
\r
12 * This class deals with all sequence features and database references associated with
\r
13 * the jalview sequence.
\r
17 public class Datasetsequence extends DatastoreItem
\r
20 private DataSet dataset;
\r
21 // private AlignmentI jvdset;
\r
23 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
\r
24 SequenceI sq, String dict, DataSet dataset)
\r
26 super(vamsasAppDatastore, sq, uk.ac.vamsas.objects.core.Sequence.class);
\r
27 this.dataset = dataset;
\r
28 // this.jvdset = jvdset;
\r
33 public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,
\r
36 super(vamsasAppDatastore, vdseq, SequenceI.class);
\r
40 public void addFromDocument()
\r
42 Sequence vseq = (Sequence) vobj;
\r
43 SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),
\r
45 (int) vseq.getStart(), (int) vseq.getEnd());
\r
46 dsseq.setDescription(vseq.getDescription());
\r
47 bindjvvobj(dsseq, vseq);
\r
48 dsseq.setVamsasId(vseq.getVorbaId().getId());
\r
52 public void updateFromDoc()
\r
54 Sequence sq = (Sequence) vobj;
\r
55 SequenceI sequence = (SequenceI) jvobj;
\r
56 if (!sequence.getSequenceAsString().equals(sq.getSequence()))
\r
58 log.warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");
\r
60 // verify and update principal attributes.
\r
61 if (sequence.getDescription() != null
\r
62 && (sequence.getDescription() == null || !sequence
\r
63 .getDescription().equals(sq.getDescription())))
\r
65 sequence.setDescription(sq.getDescription());
\r
68 if (sequence.getSequence() == null
\r
69 || !sequence.getSequenceAsString().equals(
\r
72 if (sequence.getStart() != sq.getStart()
\r
73 || sequence.getEnd() != sq.getEnd())
\r
75 // update modified sequence.
\r
76 sequence.setSequence(sq.getSequence());
\r
77 sequence.setStart((int)sq.getStart());
\r
78 sequence.setEnd((int)sq.getEnd());
\r
82 if (!sequence.getName().equals(sq.getName()))
\r
84 sequence.setName(sq.getName());
\r
91 public void addToDocument()
\r
93 SequenceI sq = (SequenceI) jvobj;
\r
94 Sequence sequence = new Sequence();
\r
95 bindjvvobj(sq, sequence);
\r
96 sq.setVamsasId(sequence.getVorbaId().getId());
\r
97 sequence.setSequence(sq.getSequenceAsString());
\r
98 sequence.setDictionary(dict);
\r
99 sequence.setName(sq.getName());
\r
100 sequence.setStart(sq.getStart());
\r
101 sequence.setEnd(sq.getEnd());
\r
102 sequence.setDescription(sq.getDescription());
\r
103 dataset.addSequence(sequence);
\r
105 // add or update any new features/references on dataset sequence
\r
106 if (sq.getSequenceFeatures() != null)
\r
108 int sfSize = sq.getSequenceFeatures().length;
\r
110 for (int sf = 0; sf < sfSize; sf++)
\r
112 new jalview.io.vamsas.Sequencefeature(datastore, (jalview.datamodel.SequenceFeature) sq
\r
113 .getSequenceFeatures()[sf], dataset, (Sequence) vobj);
\r
116 if (sq.getDatasetSequence() == null && sq.getDBRef() != null)
\r
118 // only sync database references for dataset sequences
\r
119 DBRefEntry[] entries = sq.getDBRef();
\r
120 jalview.datamodel.DBRefEntry dbentry;
\r
121 for (int db = 0; db < entries.length; db++)
\r
123 Rangetype dbr = new jalview.io.vamsas.Dbref(datastore,
\r
124 dbentry = entries[db], sq, (Sequence) vobj, dataset);
\r
131 public void conflict()
\r
133 log.warn("Conflict in dataset sequence update to document. Overwriting document");
\r
134 // TODO: could try to import from document data to jalview first. and then
\r
137 boolean modified = false;
\r
138 public void updateToDoc()
\r
140 SequenceI sq = (SequenceI) jvobj;
\r
141 Sequence sequence = (Sequence) vobj;
\r
142 // verify and update principal attributes.
\r
143 if (sequence.getDescription() != null
\r
144 && (sequence.getDescription() == null || !sequence
\r
145 .getDescription().equals(sq.getDescription())))
\r
147 sequence.setDescription(sq.getDescription());
\r
150 if (sequence.getSequence() == null
\r
151 || !sequence.getSequence().equals(
\r
152 sq.getSequenceAsString()))
\r
154 if (sequence.getStart() != sq.getStart()
\r
155 || sequence.getEnd() != sq.getEnd())
\r
157 // update modified sequence.
\r
158 sequence.setSequence(sq.getSequenceAsString());
\r
159 sequence.setStart(sq.getStart());
\r
160 sequence.setEnd(sq.getEnd());
\r
164 if (!dict.equals(sequence.getDictionary()))
\r
166 sequence.setDictionary(dict);
\r
169 if (!sequence.getName().equals(sq.getName()))
\r
171 sequence.setName(sq.getName());
\r
177 * (probably could just do vobj.isModified(), but..)
\r
178 * @return true if document's dataset sequence was modified
\r
180 public boolean getModified()
\r