added support for loading a vamsas document into a new vamsas session.
authorjprocter <Jim Procter>
Fri, 14 Sep 2007 15:30:29 +0000 (15:30 +0000)
committerjprocter <Jim Procter>
Fri, 14 Sep 2007 15:30:29 +0000 (15:30 +0000)
lib/vamsas-client.jar
src/jalview/gui/Desktop.java
src/jalview/gui/VamsasApplication.java
src/jalview/jbgui/GDesktop.java

index 0b0ec41..9e2b3a2 100644 (file)
Binary files a/lib/vamsas-client.jar and b/lib/vamsas-client.jar differ
index 10d2d43..f61e7a8 100755 (executable)
@@ -1012,7 +1012,7 @@ public class Desktop
     vamsasStart.setText("Session Update");
     vamsasSave.setVisible(true);
     vamsasStop.setVisible(true);
-    vamsasImport.setVisible(true);
+    vamsasImport.setVisible(false); // Document import to existing session is not possible for vamsas-client-1.0.
   }
   protected void setupVamsasDisconnectedGui()
   {
index cf44191..65212a6 100644 (file)
@@ -17,10 +17,12 @@ import java.util.Hashtable;
 import java.util.IdentityHashMap;
 
 import javax.swing.JInternalFrame;
+import javax.swing.JOptionPane;
 
 import uk.ac.vamsas.client.ClientHandle;
 import uk.ac.vamsas.client.IClient;
 import uk.ac.vamsas.client.IClientDocument;
+import uk.ac.vamsas.client.InvalidSessionDocumentException;
 import uk.ac.vamsas.client.NoDefaultSessionException;
 import uk.ac.vamsas.client.UserHandle;
 import uk.ac.vamsas.client.VorbaId;
@@ -29,118 +31,181 @@ import uk.ac.vamsas.client.picking.IPickManager;
 import uk.ac.vamsas.client.picking.Message;
 import uk.ac.vamsas.client.picking.MouseOverMessage;
 import uk.ac.vamsas.objects.core.Entry;
+
 /**
  * @author jimp
- *
+ * 
  */
 public class VamsasApplication
 {
-  IClient vclient=null;
-  ClientHandle app=null;
-  UserHandle user=null;
-  
+  IClient vclient = null;
+
+  ClientHandle app = null;
+
+  UserHandle user = null;
+
   Desktop jdesktop = null; // our jalview desktop reference
-  
+
   // 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)
   {
     // 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);
-    throw new Error("Sorry - can't start from session file yet."); // make this a warning
+    this.jdesktop = jdesktop;
+    initClientSession(null, sessionPath);
   }
-  private static uk.ac.vamsas.client.IClientFactory getClientFactory() throws IOException {
+
+  private static uk.ac.vamsas.client.IClientFactory getClientFactory()
+          throws IOException
+  {
     return new uk.ac.vamsas.client.simpleclient.SimpleClientFactory();
   }
+
   /**
    * Start a new vamsas session
+   * 
    * @param jdesktop
    */
   public VamsasApplication(Desktop jdesktop)
   {
-    this.jdesktop = jdesktop; 
-    initClientSession(null);
+    this.jdesktop = jdesktop;
+    initClientSession(null, null);
   }
+
   /**
    * init a connection to the session at the given url
+   * 
    * @param jdesktop
    * @param sessionUrl
    */
   public VamsasApplication(Desktop jdesktop, String sessionUrl)
   {
-    this.jdesktop = jdesktop; 
-    initClientSession(sessionUrl);
+    this.jdesktop = jdesktop;
+    initClientSession(sessionUrl, null);
   }
+
   /**
-   * @throws IOException or other if clientfactory instantiation failed.
+   * @throws IOException
+   *                 or other if clientfactory instantiation failed.
    * @return list of current sessions or null if no session exists.
    */
-  public static String[] getSessionList() throws Exception {
+  public static String[] getSessionList() throws Exception
+  {
     return getClientFactory().getCurrentSessions();
   }
+
   /**
-   * initialise, possibly with e valid session url
+   * initialise, possibly with either a valid session url or a file for a new
+   * session
+   * 
    * @param sess
-   * @return
+   *                null or a valid session url
+   * @param vamsasDocument
+   *                null or a valid vamsas document file
+   * @return false if no vamsas connection was made
    */
-  private boolean initClientSession(String sess) {
-    try {
+  private boolean initClientSession(String sess, File vamsasDocument)
+  {
+    try
+    {
       // Only need to tell the library what the application is here
-      app = new ClientHandle("jalview.bin.Jalview", jalview.bin.Cache.getProperty("VERSION"));
+      app = getJalviewHandle();
       uk.ac.vamsas.client.IClientFactory clientfactory = getClientFactory();
-      if (sess==null)
+      if (vamsasDocument != null)
       {
-        vclient = clientfactory.getNewSessionIClient(app);
+        if (sess != null)
+        {
+          throw new Error(
+                  "Implementation Error - cannot import existing vamsas document into an existing session, Yet!");
+        }
+        try
+        {
+          vclient = clientfactory.openAsNewSessionIClient(app,
+                  vamsasDocument);
+        } catch (InvalidSessionDocumentException e)
+        {
+          JOptionPane
+                  .showInternalMessageDialog(
+                          Desktop.desktop,
+
+                          "VAMSAS Document could not be opened as a new session - please choose another",
+                          "VAMSAS Document Import Failed",
+                          JOptionPane.ERROR_MESSAGE);
+
+        }
       }
       else
       {
-        vclient = clientfactory.getIClient(app,sess);
+        // join existing or create a new session
+        if (sess == null)
+        {
+          vclient = clientfactory.getNewSessionIClient(app);
+        }
+        else
+        {
+          vclient = clientfactory.getIClient(app, sess);
+        }
       }
-      
       user = vclient.getUserHandle();
-      
-    } 
-    catch (Exception e)
+
+    } catch (Exception e)
     {
-      jalview.bin.Cache.log.error("Couldn't instantiate vamsas client !",e);
+      jalview.bin.Cache.log
+              .error("Couldn't instantiate vamsas client !", e);
       return false;
     }
     return true;
   }
+
+  /**
+   * make the appHandle for Jalview
+   * 
+   * @return
+   */
+  private ClientHandle getJalviewHandle()
+  {
+    return new ClientHandle("jalview.bin.Jalview", jalview.bin.Cache
+            .getProperty("VERSION"));
+  }
+
   /**
    * 
    * @return true if we are registered in a vamsas session
    */
   public boolean inSession()
   {
-    return (vclient!=null);
+    return (vclient != null);
   }
+
   /**
-   * called to connect to session
-   * inits handlers, does an initial document update.
+   * called to connect to session inits handlers, does an initial document
+   * update.
    */
   public void initial_update()
   {
     if (!inSession())
     {
-      throw new Error("Impementation error! Vamsas Operations when client not initialised and connected.");
+      throw new Error(
+              "Impementation error! Vamsas Operations when client not initialised and connected.");
     }
     addDocumentUpdateHandler();
     startSession();
-    Cache.log.debug("Jalview loading the Vamsas Session for the first time.");
-    dealWithDocumentUpdate(false); // we don't push an update out to the document yet.
+    Cache.log
+            .debug("Jalview loading the Vamsas Session for the first time.");
+    dealWithDocumentUpdate(false); // we don't push an update out to the
+                                    // document yet.
     Cache.log.debug("... finished update for the first time.");
   }
+
   /**
-   * Update all windows after a vamsas datamodel change.
-   * this could go on the desktop object!
+   * Update all windows after a vamsas datamodel change. this could go on the
+   * desktop object!
    * 
    */
-  protected void updateJalviewGui() 
+  protected void updateJalviewGui()
   {
     JInternalFrame[] frames = jdesktop.getAllFrames();
 
@@ -151,7 +216,7 @@ public class VamsasApplication
 
     try
     {
-      //REVERSE ORDER
+      // REVERSE ORDER
       for (int i = frames.length - 1; i > -1; i--)
       {
         if (frames[i] instanceof AlignFrame)
@@ -160,36 +225,27 @@ public class VamsasApplication
           af.alignPanel.alignmentChanged();
         }
       }
-    }
-    catch (Exception e)
+    } catch (Exception e)
     {
-      Cache.log.warn(
-          "Exception whilst refreshing jalview windows after a vamsas document update.",
-          e);
+      Cache.log
+              .warn(
+                      "Exception whilst refreshing jalview windows after a vamsas document update.",
+                      e);
     }
   }
+
   public void push_update()
   {
     Cache.log.info("Jalview updating to the Vamsas Session.");
     dealWithDocumentUpdate(true);
     /*
-    IClientDocument cdoc=null;
-    try
-    {
-      cdoc = vclient.getClientDocument();
-    }
-    catch (Exception e)
-    {
-      Cache.log.error("Failed to get client document for update.");
-      // RAISE A WARNING DIALOG
-      disableGui(false);
-      return;
-    }
-    updateVamsasDocument(cdoc);
-    updateJalviewGui();
-    cdoc.setVamsasRoots(cdoc.getVamsasRoots()); // propagate update flags back
-    vclient.updateDocument(cdoc);
-    */
+     * IClientDocument cdoc=null; try { cdoc = vclient.getClientDocument(); }
+     * catch (Exception e) { Cache.log.error("Failed to get client document for
+     * update."); // RAISE A WARNING DIALOG disableGui(false); return; }
+     * updateVamsasDocument(cdoc); updateJalviewGui();
+     * cdoc.setVamsasRoots(cdoc.getVamsasRoots()); // propagate update flags
+     * back vclient.updateDocument(cdoc);
+     */
     Cache.log.info("Jalview finished updating to the Vamsas Session.");
   }
 
@@ -200,21 +256,25 @@ public class VamsasApplication
     Cache.log.info("Jalview disconnecting from the Vamsas Session.");
     try
     {
-      if (joinedSession) {
+      if (joinedSession)
+      {
         vclient.finalizeClient();
         Cache.log.info("Jalview has left the session.");
-      } else {
-        Cache.log.warn("JV Client leaving a session that's its not joined yet.");
       }
-      joinedSession=false;
+      else
+      {
+        Cache.log
+                .warn("JV Client leaving a session that's its not joined yet.");
+      }
+      joinedSession = false;
       vclient = null;
-      app=null; user = null;
+      app = null;
+      user = null;
       jv2vobj = null;
       vobj2jv = null;
-    }
-    catch (Exception e)
+    } catch (Exception e)
     {
-      Cache.log.error("Vamsas Session finalization threw exceptions!",e);
+      Cache.log.error("Vamsas Session finalization threw exceptions!", e);
     }
   }
 
@@ -223,11 +283,12 @@ public class VamsasApplication
     Cache.log.debug("Jalview updating from sesion document ..");
     ensureJvVamsas();
     VamsasAppDatastore vds = new VamsasAppDatastore(cdoc, vobj2jv, jv2vobj,
-                                              baseProvEntry());
+            baseProvEntry());
     vds.updateToJalview();
     Cache.log.debug(".. finished updating from sesion document.");
-    
+
   }
+
   private void ensureJvVamsas()
   {
     if (jv2vobj == null)
@@ -241,12 +302,14 @@ public class VamsasApplication
    * jalview object binding to VorbaIds
    */
   IdentityHashMap jv2vobj = null;
+
   Hashtable vobj2jv = null;
+
   public void updateVamsasDocument(IClientDocument doc)
   {
     ensureJvVamsas();
     VamsasAppDatastore vds = new VamsasAppDatastore(doc, vobj2jv, jv2vobj,
-                                              baseProvEntry());
+            baseProvEntry());
     // wander through frames
     JInternalFrame[] frames = Desktop.desktop.getAllFrames();
 
@@ -257,7 +320,7 @@ public class VamsasApplication
 
     try
     {
-      //REVERSE ORDER
+      // REVERSE ORDER
       for (int i = frames.length - 1; i > -1; i--)
       {
         if (frames[i] instanceof AlignFrame)
@@ -268,7 +331,7 @@ public class VamsasApplication
           vds.storeVAMSAS(af.getViewport(), af.getTitle());
         }
       }
-      //REVERSE ORDER
+      // REVERSE ORDER
       for (int i = frames.length - 1; i > -1; i--)
       {
         if (frames[i] instanceof AlignFrame)
@@ -279,8 +342,7 @@ public class VamsasApplication
           vds.storeSequenceMappings(af.getViewport(), af.getTitle());
         }
       }
-    }
-    catch (Exception e)
+    } catch (Exception e)
     {
       Cache.log.error("Vamsas Document store exception", e);
     }
@@ -295,21 +357,26 @@ public class VamsasApplication
     pentry.setAction("created");
     return pentry;
   }
+
   /**
    * do a vamsas document update or update jalview from the vamsas document
-   * @param fromJalview true to update from jalview to the vamsas document
+   * 
+   * @param fromJalview
+   *                true to update from jalview to the vamsas document
    */
   protected void dealWithDocumentUpdate(boolean fromJalview)
   {
     // called by update handler for document update.
     Cache.log.debug("Updating jalview from changed vamsas document.");
     disableGui(true);
-    try {
+    try
+    {
       long time = System.currentTimeMillis();
       IClientDocument cdoc = vclient.getClientDocument();
       if (Cache.log.isDebugEnabled())
       {
-        Cache.log.debug("Time taken to get ClientDocument = "+(System.currentTimeMillis()-time));
+        Cache.log.debug("Time taken to get ClientDocument = "
+                + (System.currentTimeMillis() - time));
         time = System.currentTimeMillis();
       }
       if (fromJalview)
@@ -317,21 +384,27 @@ public class VamsasApplication
         this.updateVamsasDocument(cdoc);
         if (Cache.log.isDebugEnabled())
         {
-          Cache.log.debug("Time taken to update Vamsas Document from jalview\t= "+(System.currentTimeMillis()-time));
+          Cache.log
+                  .debug("Time taken to update Vamsas Document from jalview\t= "
+                          + (System.currentTimeMillis() - time));
           time = System.currentTimeMillis();
         }
         cdoc.setVamsasRoots(cdoc.getVamsasRoots());
         if (Cache.log.isDebugEnabled())
         {
-          Cache.log.debug("Time taken to set Document Roots\t\t= "+(System.currentTimeMillis()-time));
+          Cache.log.debug("Time taken to set Document Roots\t\t= "
+                  + (System.currentTimeMillis() - time));
           time = System.currentTimeMillis();
         }
-      } else
+      }
+      else
       {
         updateJalview(cdoc);
         if (Cache.log.isDebugEnabled())
         {
-          Cache.log.debug("Time taken to update Jalview from vamsas document Roots\t= "+(System.currentTimeMillis()-time));
+          Cache.log
+                  .debug("Time taken to update Jalview from vamsas document Roots\t= "
+                          + (System.currentTimeMillis() - time));
           time = System.currentTimeMillis();
         }
 
@@ -339,21 +412,25 @@ public class VamsasApplication
       vclient.updateDocument(cdoc);
       if (Cache.log.isDebugEnabled())
       {
-        Cache.log.debug("Time taken to update Session Document\t= "+(System.currentTimeMillis()-time));
+        Cache.log.debug("Time taken to update Session Document\t= "
+                + (System.currentTimeMillis() - time));
         time = System.currentTimeMillis();
       }
-      cdoc=null;
-    } catch (Exception ee) {
+      cdoc = null;
+    } catch (Exception ee)
+    {
       System.err.println("Exception whilst updating :");
       ee.printStackTrace(System.err);
     }
     Cache.log.debug("Finished updating from document change.");
     disableGui(false);
   }
+
   private void addDocumentUpdateHandler()
   {
     final VamsasApplication client = this;
-    vclient.addDocumentUpdateHandler(new PropertyChangeListener() {
+    vclient.addDocumentUpdateHandler(new PropertyChangeListener()
+    {
       public void propertyChange(PropertyChangeEvent evt)
       {
         Cache.log.debug("Dealing with document update event.");
@@ -363,72 +440,88 @@ public class VamsasApplication
     });
     Cache.log.debug("Added Jalview handler for vamsas document updates.");
   }
+
   public void disableGui(boolean b)
   {
     Desktop.instance.setVamsasUpdate(b);
   }
-  private boolean joinedSession=false;
-  private VamsasListener picker=null;
+
+  private boolean joinedSession = false;
+
+  private VamsasListener picker = null;
+
   private void startSession()
   {
     if (inSession())
     {
-      try {
+      try
+      {
         vclient.joinSession();
-        joinedSession=true;
-      }
-      catch (Exception e)
+        joinedSession = true;
+      } catch (Exception e)
       {
         // Complain to GUI
-        Cache.log.error("Failed to join vamsas session.",e);
-        vclient=null;
+        Cache.log.error("Failed to join vamsas session.", e);
+        vclient = null;
       }
-      try {
+      try
+      {
         final IPickManager pm = vclient.getPickManager();
-        final StructureSelectionManager ssm = StructureSelectionManager.getStructureSelectionManager();
-        pm.registerMessageHandler(new IMessageHandler() {
-          String last=null;
+        final StructureSelectionManager ssm = StructureSelectionManager
+                .getStructureSelectionManager();
+        pm.registerMessageHandler(new IMessageHandler()
+        {
+          String last = null;
+
           public void handleMessage(Message message)
           {
-            if (message instanceof MouseOverMessage && vobj2jv!=null)
+            if (message instanceof MouseOverMessage && vobj2jv != null)
             {
               MouseOverMessage mm = (MouseOverMessage) message;
-              String mstring = mm.getVorbaID()+" "+mm.getPosition();
-              if (last!=null && mstring.equals(last))
+              String mstring = mm.getVorbaID() + " " + mm.getPosition();
+              if (last != null && mstring.equals(last))
               {
                 return;
               }
-              //if (Cache.log.isDebugEnabled())
-              //{
-              //  Cache.log.debug("Received MouseOverMessage "+mm.getVorbaID()+" "+mm.getPosition());
-              //}
+              // if (Cache.log.isDebugEnabled())
+              // {
+              // Cache.log.debug("Received MouseOverMessage "+mm.getVorbaID()+"
+              // "+mm.getPosition());
+              // }
               Object jvobj = vobj2jv.get(mm.getVorbaID());
               if (jvobj != null && jvobj instanceof SequenceI)
               {
                 last = mstring;
-                // Cache.log.debug("Handling Mouse over "+mm.getVorbaID()+" bound to "+jvobj+" at "+mm.getPosition());
+                // Cache.log.debug("Handling Mouse over "+mm.getVorbaID()+"
+                // bound to "+jvobj+" at "+mm.getPosition());
                 // position is in sequence or in aligned sequence ???????
-                ssm.mouseOverVamsasSequence((SequenceI) jvobj, mm.getPosition());
+                ssm.mouseOverVamsasSequence((SequenceI) jvobj, mm
+                        .getPosition());
               }
             }
           }
         });
-        picker = new VamsasListener() {
-          SequenceI last=null;
-          int i=-1;
+        picker = new VamsasListener()
+        {
+          SequenceI last = null;
+
+          int i = -1;
+
           public void mouseOver(SequenceI seq, int index)
           {
-            if (jv2vobj==null)
+            if (jv2vobj == null)
               return;
-            if (seq!=last || i!=index)
+            if (seq != last || i != index)
             {
               VorbaId v = (VorbaId) jv2vobj.get(seq);
-              if (v!=null)
+              if (v != null)
               {
-                Cache.log.debug("Mouse over "+v.getId()+" bound to "+seq+" at "+index);
+                Cache.log.debug("Mouse over " + v.getId() + " bound to "
+                        + seq + " at " + index);
                 last = seq;
-                i=index;
-                MouseOverMessage message = new MouseOverMessage(v.getId(), index);
+                i = index;
+                MouseOverMessage message = new MouseOverMessage(v.getId(),
+                        index);
                 pm.sendMessage(message);
               }
             }
@@ -437,7 +530,7 @@ public class VamsasApplication
         ssm.addStructureViewerListener(picker); // better method here
       } catch (Exception e)
       {
-        Cache.log.error("Failed to init Vamsas Picking",e);
+        Cache.log.error("Failed to init Vamsas Picking", e);
       }
     }
   }
index b7d060b..70c5c64 100755 (executable)
@@ -420,7 +420,7 @@ public class GDesktop
 
   }
 
-  private void vamsasImport_actionPerformed(ActionEvent e)
+  public void vamsasImport_actionPerformed(ActionEvent e)
   {
   }
 }