methods for importing anonymous vamsas documents into explicitly named sessions ...
authorjprocter <Jim Procter>
Fri, 12 Jun 2009 15:51:54 +0000 (15:51 +0000)
committerjprocter <Jim Procter>
Fri, 12 Jun 2009 15:51:54 +0000 (15:51 +0000)
src/jalview/gui/VamsasApplication.java

index 2879c2f..a62eeb5 100644 (file)
@@ -72,18 +72,21 @@ public class VamsasApplication implements SelectionSource
 
   Desktop jdesktop = null; // our jalview desktop reference
 
+  private boolean inInitialUpdate=true;
+
   // Cache.preferences for vamsas client session arena
   // preferences for check for default session at startup.
   // user and organisation stuff.
-  public VamsasApplication(Desktop jdesktop, File sessionPath)
+  public VamsasApplication(Desktop jdesktop, File sessionPath, String sessionName)
   {
     // JBPNote:
     // we should create a session URI from the sessionPath and pass it to
     // the clientFactory - but the vamsas api doesn't cope with that yet.
     this.jdesktop = jdesktop;
-    initClientSession(null, sessionPath);
+    initClientSession(null, sessionPath, sessionName);
   }
 
+
   private static uk.ac.vamsas.client.IClientFactory getClientFactory()
           throws IOException
   {
@@ -133,7 +136,12 @@ public class VamsasApplication implements SelectionSource
    *          null or a valid vamsas document file
    * @return false if no vamsas connection was made
    */
-  private boolean initClientSession(String sess, File vamsasDocument)
+  private void initClientSession(String sess, File vamsasDocument)
+  {
+    initClientSession(sess,vamsasDocument,null);
+  }
+
+  private boolean initClientSession(String sess, File vamsasDocument, String newDocSessionName)
   {
     try
     {
@@ -149,8 +157,14 @@ public class VamsasApplication implements SelectionSource
         }
         try
         {
-          vclient = clientfactory.openAsNewSessionIClient(app,
+          if (newDocSessionName!=null)
+          {
+            vclient = clientfactory.openAsNewSessionIClient(app,
+                    vamsasDocument,newDocSessionName);
+          } else {
+            vclient = clientfactory.openAsNewSessionIClient(app,
                   vamsasDocument);
+          }
         } catch (InvalidSessionDocumentException e)
         {
           JOptionPane
@@ -252,9 +266,11 @@ public class VamsasApplication implements SelectionSource
     addDocumentUpdateHandler();
     addStoreDocumentHandler();
     startSession();
+    inInitialUpdate = true;
     Cache.log
             .debug("Jalview loading the Vamsas Session for the first time.");
     dealWithDocumentUpdate(false); // we don't push an update out to the
+    inInitialUpdate = false;
     // document yet.
     Cache.log.debug("... finished update for the first time.");
   }
@@ -302,6 +318,7 @@ public class VamsasApplication implements SelectionSource
       {
         Cache.log.info("Jalview updating to the Vamsas Session.");
 
+        
         dealWithDocumentUpdate(true);
         Cache.log.info("Jalview finished updating to the Vamsas Session.");
       }
@@ -420,9 +437,11 @@ public class VamsasApplication implements SelectionSource
    * bindings is made.
    * 
    * @param doc
+   * @return number of views stored in document (updated and new views)
    */
-  public void updateVamsasDocument(IClientDocument doc)
+  public int updateVamsasDocument(IClientDocument doc)
   {
+    int storedviews=0;
     ensureJvVamsas();
     errorsDuringUpdate = false;
     errorsDuringAppUpdate = false;
@@ -434,7 +453,7 @@ public class VamsasApplication implements SelectionSource
 
     if (frames == null)
     {
-      return;
+      return 0;
     }
     Hashtable skipList = new Hashtable();
     Hashtable viewset = new Hashtable();
@@ -471,6 +490,7 @@ public class VamsasApplication implements SelectionSource
             }
             else
             {
+              storedviews++;
               // could try to eliminate sequenceSetId from skiplist ..
               // (skipList.containsKey(af.getViewport().getSequenceSetId()))
               // remember sequenceSetId so we can skip all the other views on
@@ -516,6 +536,7 @@ public class VamsasApplication implements SelectionSource
       errorsDuringAppUpdate = true;
     }
     vds.clearSkipList();
+    return storedviews;
   }
 
   private Entry baseProvEntry()
@@ -533,9 +554,11 @@ public class VamsasApplication implements SelectionSource
    * 
    * @param fromJalview
    *          true to update from jalview to the vamsas document
+   *          @return total number of stored alignments in the document after the update 
    */
-  protected void dealWithDocumentUpdate(boolean fromJalview)
+  protected int dealWithDocumentUpdate(boolean fromJalview)
   {
+    int storedviews = 0;
     // called by update handler for document update.
     Cache.log.debug("Updating jalview from changed vamsas document.");
     disableGui(true);
@@ -551,7 +574,7 @@ public class VamsasApplication implements SelectionSource
       }
       if (fromJalview)
       {
-        this.updateVamsasDocument(cdoc);
+        storedviews+=updateVamsasDocument(cdoc);
         if (Cache.log.isDebugEnabled())
         {
           Cache.log
@@ -593,10 +616,12 @@ public class VamsasApplication implements SelectionSource
       ee.printStackTrace(System.err);
       // recover object map backup, since its probably corrupted with references
       // to Vobjects that don't exist anymore.
-      this.recover_objectMappingBackup();
+      recover_objectMappingBackup();
+      storedviews=0;
     }
     Cache.log.debug("Finished updating from document change.");
     disableGui(false);
+    return storedviews;
   }
 
   private void addDocumentUpdateHandler()
@@ -684,6 +709,11 @@ public class VamsasApplication implements SelectionSource
   {
     if (_backup_vobj2jv == null)
     {
+      if (inInitialUpdate) {
+        // nothing to recover so just
+        return;
+      }
+      
       throw new Error(
               "IMPLEMENTATION ERROR: Cannot recover vamsas object mappings - no backup was made.");
     }