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