apply version 2.7 copyright
[jalview.git] / src / jalview / io / vamsas / Datasetsequence.java
index 85a228e..e57942b 100644 (file)
@@ -1,3 +1,20 @@
+/*\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
@@ -5,19 +22,23 @@ import jalview.datamodel.DBRefEntry;
 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
@@ -40,15 +61,15 @@ public class Datasetsequence extends DatastoreItem
   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
@@ -56,7 +77,9 @@ public class Datasetsequence extends DatastoreItem
     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
@@ -66,16 +89,15 @@ public class Datasetsequence extends DatastoreItem
         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
@@ -84,9 +106,43 @@ public class Datasetsequence extends DatastoreItem
         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
@@ -102,30 +158,60 @@ public class Datasetsequence extends DatastoreItem
     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
@@ -134,7 +220,9 @@ public class Datasetsequence extends DatastoreItem
     // 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
@@ -148,8 +236,7 @@ public class Datasetsequence extends DatastoreItem
       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
@@ -171,10 +258,13 @@ public class Datasetsequence extends DatastoreItem
       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