refactored document objects and bugfix on jvdataset-vamsasdataset binding
authorjprocter <Jim Procter>
Tue, 22 May 2007 15:54:32 +0000 (15:54 +0000)
committerjprocter <Jim Procter>
Tue, 22 May 2007 15:54:32 +0000 (15:54 +0000)
lib/vamsas-client.jar
src/jalview/gui/VamsasApplication.java
src/jalview/io/VamsasAppDatastore.java

index eeef751..8021a3f 100644 (file)
Binary files a/lib/vamsas-client.jar and b/lib/vamsas-client.jar differ
index 2b208ba..cead1e3 100644 (file)
@@ -263,7 +263,7 @@ public class VamsasApplication
     uk.ac.vamsas.objects.core.Entry pentry = new uk.ac.vamsas.objects.core.Entry();
     pentry.setUser(user.getFullName());
     pentry.setApp(app.getClientUrn());
-    pentry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
+    pentry.setDate(new java.util.Date());
     pentry.setAction("created");
     return pentry;
   }
index 3c6e441..d799a6c 100644 (file)
@@ -177,14 +177,41 @@ public class VamsasAppDatastore
       VAMSAS root = null; // will be resolved based on Dataset Parent.
       // /////////////////////////////////////////
       // SAVE THE DATASET
+      DataSet dataset = null;
       if (jal.getDataset() == null)
       {
         Cache.log.warn("Creating new dataset for an alignment.");
         jal.setDataset(null);
       }
-      DataSet dataset = (DataSet) getjv2vObj(jal.getDataset());
+      dataset = (DataSet) getjv2vObj(jal.getDataset());
       if (dataset == null)
       {
+        // it might be that one of the dataset sequences does actually have a binding, so search for it indirectly.
+        jalview.datamodel.SequenceI[] jdatset = jal.getDataset().getSequencesArray();
+        for (int i=0; i<jdatset.length; i++)
+        {
+          Vobject vbound = getjv2vObj(jdatset[i]);
+          if (vbound!=null)
+          {
+            if (vbound instanceof uk.ac.vamsas.objects.core.Sequence)
+            {
+              if (dataset==null)
+              {
+                dataset = (DataSet) vbound.getV_parent();
+              } else {
+                if (dataset!=vbound.getV_parent())
+                {
+                  throw new Error("IMPLEMENTATION ERROR: Cannot map an alignment of sequences from datasets into the vamsas document.");
+                  // This occurs because the dataset for the alignment we are trying to 
+                }
+              }
+            }
+          }
+        }
+      }
+      
+      if (dataset == null) {
+        // we create a new dataset on the default vamsas root.
         root = cdoc.getVamsasRoots()[0]; // default vamsas root for modifying.
         dataset = new DataSet();
         root.addDataSet(dataset);
@@ -253,7 +280,7 @@ public class VamsasAppDatastore
               }
               addProvenance(dsa.getProvenance(), "created"); // JBPNote - need
               // to update
-              dsa.setSeqRef(sequence);
+              dsa.addSeqRef(sequence); // we have just created this annotation - so safe to use this
               bindjvvobj(feature, dsa);
               dataset.addDataSetAnnotations(dsa);
             }
@@ -786,7 +813,7 @@ public class VamsasAppDatastore
       // or just correctly resolve the tree's seqData to the correct alignment in
       // the document.
       // vInput.setObjRef(getjv2vObj(jal));
-      vInput.setObjRef(getjv2vObj(tp.getViewPort()));
+      vInput.setObjRef(new Object[] { getjv2vObj(tp.getViewPort())});
       prov.getEntry(0).setAction("created " + tp.getTitle());
       prov.getEntry(0).addInput(vInput);
       vInput.setName("jalview:seqdist");
@@ -827,14 +854,15 @@ public class VamsasAppDatastore
           Cache.log.warn("Ignoring additional input spec in provenance entry "
                          + tp.getEntry(pe).toString());
         }
-        // LATER: deal sensibly with multiple inputs.
+        // LATER: deal sensibly with multiple inputs
         Input vInput = tp.getEntry(pe).getInput(0);
-        if (vInput.getObjRef() instanceof uk.ac.vamsas.objects.core.Alignment)
+        // LATER: deal sensibly with multiple object specification for input
+        if (vInput.getObjRef().length==1 && vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.Alignment)
         {
           // recover an AlignmentView for the input data
           AlignViewport javport = (AlignViewport) getvObj2jv( (uk.ac.vamsas.
               client.Vobject) vInput
-              .getObjRef());
+              .getObjRef(0));
           jalview.datamodel.AlignmentI jal = javport.getAlignment();
           jalview.datamodel.CigarArray view = javport.getAlignment().
               getCompactAlignment();
@@ -1039,17 +1067,20 @@ public class VamsasAppDatastore
           for (int dsa = 0; dsa < dataset.getDataSetAnnotationsCount(); dsa++)
           {
             DataSetAnnotations dseta = dataset.getDataSetAnnotations(dsa);
-            SequenceI dsSeq = (SequenceI) getvObj2jv( (Vobject) dseta.getSeqRef());
-            if (dsSeq == null)
+            // TODO: deal with group annotation on datset sequences.
+            if (dseta.getSeqRefCount()==1)
             {
-              jalview.bin.Cache.log.warn(
-                  "Couldn't resolve jalview sequenceI for dataset object reference " +
-                  ( (Vobject) dataset.getDataSetAnnotations(dsa).getSeqRef()).
-                  getVorbaId().getId());
-            }
-            else
-            {
-              if (dseta.getAnnotationElementCount() == 0)
+              SequenceI dsSeq = (SequenceI) getvObj2jv( (Vobject) dseta.getSeqRef(0)); // TODO: deal with group dataset annotations
+              if (dsSeq == null)
+              {
+                jalview.bin.Cache.log.warn(
+                        "Couldn't resolve jalview sequenceI for dataset object reference " +
+                        ( (Vobject) dataset.getDataSetAnnotations(dsa).getSeqRef(0)).
+                        getVorbaId().getId());
+              }
+              else
+              {
+                if (dseta.getAnnotationElementCount() == 0)
               {
                 jalview.datamodel.SequenceFeature sf = (jalview.datamodel.
                     SequenceFeature) getvObj2jv(dseta);
@@ -1069,6 +1100,7 @@ public class VamsasAppDatastore
                 Cache.log.warn("Ignoring dataset annotation with annotationElements. Not yet supported in jalview.");
               }
             }
+            }
           }
         }
 
@@ -1838,7 +1870,7 @@ public class VamsasAppDatastore
     for (int i = 0; i < prov.getEntryCount(); i++)
     {
       jprov.addEntry(prov.getEntry(i).getUser(), prov.getEntry(i).getAction(),
-                     prov.getEntry(i).getDate().toDate(),
+                     prov.getEntry(i).getDate(),
                      prov.getEntry(i).getId());
     }
 
@@ -1867,7 +1899,7 @@ public class VamsasAppDatastore
     {
       entry.setAction("created.");
     }
-    entry.setDate(new org.exolab.castor.types.Date(new java.util.Date()));
+    entry.setDate(new java.util.Date());
     entry.setUser(this.provEntry.getUser());
     return entry;
   }