+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\r
+ * \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE. See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License along with Jalview. If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
package jalview.io.vamsas;\r
\r
import jalview.datamodel.AlignmentI;\r
import jalview.datamodel.SequenceI;\r
import jalview.io.VamsasAppDatastore;\r
import uk.ac.vamsas.objects.core.DataSet;\r
+import uk.ac.vamsas.objects.core.DbRef;\r
import uk.ac.vamsas.objects.core.Sequence;\r
\r
/**\r
- * synchronize a vamsas dataset sequence with a jalview dataset sequence.\r
- * This class deals with all sequence features and database references associated with\r
- * the jalview sequence.\r
+ * synchronize a vamsas dataset sequence with a jalview dataset sequence. This\r
+ * class deals with all sequence features and database references associated\r
+ * with the jalview sequence.\r
+ * \r
* @author JimP\r
- *\r
+ * \r
*/\r
public class Datasetsequence extends DatastoreItem\r
{\r
String dict;\r
+\r
private DataSet dataset;\r
+\r
// private AlignmentI jvdset;\r
\r
public Datasetsequence(VamsasAppDatastore vamsasAppDatastore,\r
public void addFromDocument()\r
{\r
Sequence vseq = (Sequence) vobj;\r
- SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(), \r
- vseq.getSequence(),\r
- (int) vseq.getStart(), (int) vseq.getEnd());\r
+ SequenceI dsseq = new jalview.datamodel.Sequence(vseq.getName(),\r
+ vseq.getSequence(), (int) vseq.getStart(), (int) vseq.getEnd());\r
dsseq.setDescription(vseq.getDescription());\r
bindjvvobj(dsseq, vseq);\r
dsseq.setVamsasId(vseq.getVorbaId().getId());\r
jvobj = dsseq;\r
- modified=true;\r
+ modified = true;\r
}\r
+\r
public void updateFromDoc()\r
{\r
Sequence sq = (Sequence) vobj;\r
if (!sequence.getSequenceAsString().equals(sq.getSequence()))\r
{\r
log.warn("Potential Client Error ! - mismatch of dataset sequence: and jalview internal dataset sequence.");\r
- } else {\r
+ }\r
+ else\r
+ {\r
// verify and update principal attributes.\r
if (sequence.getDescription() != null\r
&& (sequence.getDescription() == null || !sequence\r
modified = true;\r
}\r
if (sequence.getSequence() == null\r
- || !sequence.getSequenceAsString().equals(\r
- sq.getSequence()))\r
+ || !sequence.getSequenceAsString().equals(sq.getSequence()))\r
{\r
if (sequence.getStart() != sq.getStart()\r
|| sequence.getEnd() != sq.getEnd())\r
{\r
// update modified sequence.\r
sequence.setSequence(sq.getSequence());\r
- sequence.setStart((int)sq.getStart());\r
- sequence.setEnd((int)sq.getEnd());\r
+ sequence.setStart((int) sq.getStart());\r
+ sequence.setEnd((int) sq.getEnd());\r
modified = true;\r
}\r
}\r
sequence.setName(sq.getName());\r
modified = true;\r
}\r
- } \r
+ modified |= updateJvDbRefs();\r
+ // updateJvFeatures();\r
+ }\r
}\r
\r
+ /*\r
+ * private void updateJvFeatures() { Sequence vsq = (Sequence) vobj;\r
+ * \r
+ * // add or update any new features/references on dataset sequence if\r
+ * (vsq.getgetSequenceFeatures() != null) { int sfSize =\r
+ * sq.getSequenceFeatures().length;\r
+ * \r
+ * for (int sf = 0; sf < sfSize; sf++) { new\r
+ * jalview.io.vamsas.Sequencefeature(datastore,\r
+ * (jalview.datamodel.SequenceFeature) sq .getSequenceFeatures()[sf], dataset,\r
+ * (Sequence) vobj); } } }\r
+ */\r
+ private boolean updateSqFeatures()\r
+ {\r
+ boolean modified = false;\r
+ SequenceI sq = (SequenceI) jvobj;\r
+\r
+ // add or update any new features/references on dataset sequence\r
+ if (sq.getSequenceFeatures() != null)\r
+ {\r
+ int sfSize = sq.getSequenceFeatures().length;\r
+\r
+ for (int sf = 0; sf < sfSize; sf++)\r
+ {\r
+ modified |= new jalview.io.vamsas.Sequencefeature(datastore,\r
+ (jalview.datamodel.SequenceFeature) sq\r
+ .getSequenceFeatures()[sf], dataset,\r
+ (Sequence) vobj).docWasUpdated();\r
+ }\r
+ }\r
+ return modified;\r
+ }\r
\r
public void addToDocument()\r
{\r
sequence.setDescription(sq.getDescription());\r
dataset.addSequence(sequence);\r
vobj = sequence;\r
- // add or update any new features/references on dataset sequence\r
- if (sq.getSequenceFeatures() != null)\r
- {\r
- int sfSize = sq.getSequenceFeatures().length;\r
+ updateSqFeatures();\r
+ updateDbRefs();// sq,(Sequence) vobj, dataset);\r
+ }\r
+\r
+ /**\r
+ * sync database references from jv to document\r
+ * \r
+ * @return true if document was modified\r
+ */\r
+ private boolean updateDbRefs()\r
+ {\r
+ boolean modifiedthedoc = false;\r
+ SequenceI sq = (SequenceI) jvobj;\r
\r
- for (int sf = 0; sf < sfSize; sf++)\r
- {\r
- new jalview.io.vamsas.Sequencefeature(datastore, (jalview.datamodel.SequenceFeature) sq\r
- .getSequenceFeatures()[sf], dataset, (Sequence) vobj);\r
- }\r
- }\r
if (sq.getDatasetSequence() == null && sq.getDBRef() != null)\r
{\r
// only sync database references for dataset sequences\r
DBRefEntry[] entries = sq.getDBRef();\r
- jalview.datamodel.DBRefEntry dbentry;\r
+ // jalview.datamodel.DBRefEntry dbentry;\r
for (int db = 0; db < entries.length; db++)\r
{\r
- Rangetype dbr = new jalview.io.vamsas.Dbref(datastore,\r
- dbentry = entries[db], sq, (Sequence) vobj, dataset);\r
+ modifiedthedoc |= new jalview.io.vamsas.Dbref(datastore,\r
+ // dbentry =\r
+ entries[db], sq, (Sequence) vobj, dataset).docWasUpdated();\r
+\r
}\r
\r
}\r
- \r
+ return modifiedthedoc;\r
+ }\r
+\r
+ /**\r
+ * sync database references from document to jv sequence\r
+ * \r
+ * @return true if local sequence refs were modified\r
+ */\r
+ private boolean updateJvDbRefs()\r
+ {\r
+ boolean modifiedtheseq = false;\r
+ SequenceI sq = (SequenceI) jvobj;\r
+ Sequence vsq = (Sequence) vobj;\r
+ if (vsq.getDbRefCount() > 0)\r
+ {\r
+ // only sync database references for dataset sequences\r
+ DbRef[] entries = vsq.getDbRef();\r
+ // DbRef dbentry;\r
+ for (int db = 0; db < entries.length; db++)\r
+ {\r
+ modifiedtheseq |= new jalview.io.vamsas.Dbref(datastore,\r
+ // dbentry =\r
+ entries[db], vsq, sq).jvWasUpdated();\r
+ }\r
+ }\r
+ return modifiedtheseq;\r
}\r
\r
public void conflict()\r
// TODO: could try to import from document data to jalview first. and then\r
updateToDoc();\r
}\r
+\r
boolean modified = false;\r
+\r
public void updateToDoc()\r
{\r
SequenceI sq = (SequenceI) jvobj;\r
modified = true;\r
}\r
if (sequence.getSequence() == null\r
- || !sequence.getSequence().equals(\r
- sq.getSequenceAsString()))\r
+ || !sequence.getSequence().equals(sq.getSequenceAsString()))\r
{\r
if (sequence.getStart() != sq.getStart()\r
|| sequence.getEnd() != sq.getEnd())\r
sequence.setName(sq.getName());\r
modified = true;\r
}\r
+ modified |= updateDbRefs();\r
+ modified |= updateSqFeatures();\r
}\r
\r
/**\r
* (probably could just do vobj.isModified(), but..)\r
+ * \r
* @return true if document's dataset sequence was modified\r
*/\r
public boolean getModified()\r