choose a particular vamsas session, load, or create a new session and export the...
authorjprocter <Jim Procter>
Mon, 10 Sep 2007 16:36:37 +0000 (16:36 +0000)
committerjprocter <Jim Procter>
Mon, 10 Sep 2007 16:36:37 +0000 (16:36 +0000)
src/jalview/gui/Desktop.java
src/jalview/gui/VamsasApplication.java
src/jalview/jbgui/GDesktop.java

index 7927df9..10d2d43 100755 (executable)
@@ -27,6 +27,8 @@ import java.lang.reflect.Constructor;
 import java.util.*;
 
 import javax.swing.*;
+import javax.swing.event.MenuEvent;
+import javax.swing.event.MenuListener;
 
 /**
  * DOCUMENT ME!
@@ -131,8 +133,34 @@ public class Desktop
   {
     if (jalview.bin.Cache.vamsasJarsPresent())
     {
+      setupVamsasDisconnectedGui();
       VamsasMenu.setVisible(true);
-      vamsasLoad.setVisible(true);
+      final Desktop us = this;
+      VamsasMenu.addMenuListener(new MenuListener() {
+        // this listener remembers when the menu was first selected, and
+        // doesn't rebuild the session list until it has been cleared and
+        // reselected again.
+        boolean refresh=true;
+        public void menuCanceled(MenuEvent e)
+        {
+          refresh=true;
+        }
+
+        public void menuDeselected(MenuEvent e)
+        {
+          refresh = true;
+        }
+
+        public void menuSelected(MenuEvent e)
+        {
+          if (refresh)
+          {
+            us.buildVamsasStMenu();
+            refresh=false;
+          }
+        }
+      });
+      vamsasStart.setVisible(true);
     }
   }
 
@@ -914,7 +942,39 @@ public class Desktop
   }
 
   jalview.gui.VamsasApplication v_client = null;
-  public void vamsasLoad_actionPerformed(ActionEvent e)
+  public void vamsasImport_actionPerformed(ActionEvent e)
+  {
+    if (v_client==null)
+    {
+      // Load and try to start a session.
+      JalviewFileChooser chooser = new JalviewFileChooser(jalview.bin.Cache.
+          getProperty("LAST_DIRECTORY"));
+
+      chooser.setFileView(new JalviewFileView());
+      chooser.setDialogTitle("Open a saved VAMSAS session");
+      chooser.setToolTipText("select a vamsas session to be opened as a new vamsas session.");
+
+      int value = chooser.showOpenDialog(this);
+
+      if (value == JalviewFileChooser.APPROVE_OPTION)
+      {
+        try {
+          v_client = new jalview.gui.VamsasApplication(this,
+                                                chooser.getSelectedFile());
+        } catch (Exception ex)
+        {
+          jalview.bin.Cache.log.error("New vamsas session from existing session file failed:",ex);
+          return;
+        }
+        setupVamsasConnectedGui();
+        v_client.initial_update(); // TODO: thread ?
+      }
+    }else {
+      jalview.bin.Cache.log.error("Implementation error - load session from a running session is not supported.");
+    }
+  }
+
+  public void vamsasStart_actionPerformed(ActionEvent e)
   {
     if (v_client == null)
     {
@@ -937,28 +997,94 @@ public class Desktop
                                                 *
                                                 */
       v_client = new VamsasApplication(this);
-      vamsasLoad.setText("Session Update");
-      vamsasStop.setVisible(true);
-      v_client.initial_update();
+      setupVamsasConnectedGui();
+      v_client.initial_update(); // TODO: thread ?
     }
     else
     {
       // store current data in session.
-      v_client.push_update();
+      v_client.push_update(); // TODO: thread
     }
   }
 
+  protected void setupVamsasConnectedGui()
+  {
+    vamsasStart.setText("Session Update");
+    vamsasSave.setVisible(true);
+    vamsasStop.setVisible(true);
+    vamsasImport.setVisible(true);
+  }
+  protected void setupVamsasDisconnectedGui()
+  {
+    vamsasSave.setVisible(false);
+    vamsasStop.setVisible(false);
+    vamsasImport.setVisible(true);
+    vamsasStart.setText("New Vamsas Session...");
+  }
+
   public void vamsasStop_actionPerformed(ActionEvent e)
   {
     if (v_client != null)
     {
       v_client.end_session();
       v_client = null;
-      this.vamsasStop.setVisible(false);
-      this.vamsasLoad.setText("Start Vamsas Session...");
+      setupVamsasDisconnectedGui();
     }
   }
+  protected void buildVamsasStMenu()
+  {
+    if (v_client == null)
+    {
+      String[] sess = null;
+      try
+      {
+        sess = VamsasApplication.getSessionList();
+      } catch (Exception e)
+      {
+        jalview.bin.Cache.log.warn(
+                "Problem getting current sessions list.", e);
+        sess = null;
+      }
+      if (sess != null)
+      {
+        jalview.bin.Cache.log.debug("Got current sessions list: "
+                + sess.length + " entries.");
+        VamsasStMenu.removeAll();
+        for (int i = 0; i < sess.length; i++)
+        {
+          JMenuItem sessit = new JMenuItem();
+          sessit.setText(sess[i]);
+          sessit.setToolTipText("Connect to session " + sess[i]);
+          final Desktop dsktp = this;
+          final String mysesid = sess[i];
+          sessit.addActionListener(new ActionListener()
+          {
 
+            public void actionPerformed(ActionEvent e)
+            {
+              if (dsktp.v_client == null)
+              {
+                dsktp.v_client = new VamsasApplication(dsktp, mysesid);
+                dsktp.setupVamsasConnectedGui();
+                dsktp.v_client.initial_update();
+              }
+            };
+          });
+          VamsasStMenu.add(sessit);
+        }
+        VamsasStMenu.setVisible(true);
+      }
+      else
+      {
+        jalview.bin.Cache.log.debug("No current vamsas sessions.");
+        VamsasStMenu.removeAll();
+        VamsasStMenu.setVisible(false);
+      }
+    } else {
+      // Not interested in the content. Just hide ourselves.
+      VamsasStMenu.setVisible(false);
+    }
+  }
   public void vamsasSave_actionPerformed(ActionEvent e)
   {
     if (v_client != null)
@@ -1016,9 +1142,9 @@ public class Desktop
   {
     jalview.bin.Cache.log.debug("Setting gui for Vamsas update " +
                                 (b ? "in progress" : "finished"));
-    vamsasLoad.setVisible(!b);
+    vamsasStart.setVisible(!b);
     vamsasStop.setVisible(!b);
-
+    vamsasSave.setVisible(!b);
   }
 
   public JInternalFrame[] getAllFrames()
index 18c2e55..cf44191 100644 (file)
@@ -56,12 +56,26 @@ public class VamsasApplication
   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);
   }
   /**
+   * 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);
+  }
+  /**
    * @throws IOException or other if clientfactory instantiation failed.
    * @return list of current sessions or null if no session exists.
    */
@@ -80,7 +94,7 @@ public class VamsasApplication
       uk.ac.vamsas.client.IClientFactory clientfactory = getClientFactory();
       if (sess==null)
       {
-        vclient = clientfactory.getIClient(app);
+        vclient = clientfactory.getNewSessionIClient(app);
       }
       else
       {
@@ -89,10 +103,7 @@ public class VamsasApplication
       
       user = vclient.getUserHandle();
       
-    } catch (NoDefaultSessionException e)
-    {
-      return false;
-    }
+    } 
     catch (Exception e)
     {
       jalview.bin.Cache.log.error("Couldn't instantiate vamsas client !",e);
index 59e4457..b7d060b 100755 (executable)
@@ -20,6 +20,7 @@ package jalview.jbgui;
 
 import java.awt.*;
 import java.awt.event.*;
+
 import javax.swing.*;
 
 /**
@@ -36,6 +37,7 @@ public class GDesktop
   JMenu FileMenu = new JMenu();
   JMenu HelpMenu = new JMenu();
   protected JMenu VamsasMenu = new JMenu();
+  protected JMenu VamsasStMenu = new JMenu();
   JMenuItem inputLocalFileMenuItem = new JMenuItem();
   JMenuItem inputURLMenuItem = new JMenuItem();
   JMenuItem inputTextboxMenuItem = new JMenuItem();
@@ -48,7 +50,9 @@ public class GDesktop
   JMenuItem saveState = new JMenuItem();
   JMenuItem loadState = new JMenuItem();
   JMenu inputMenu = new JMenu();
-  protected JMenuItem vamsasLoad = new JMenuItem();
+  protected JMenuItem vamsasStart = new JMenuItem();
+  protected JMenuItem vamsasImport = new JMenuItem();
+  protected JMenuItem vamsasSave = new JMenuItem();
   JMenuItem inputSequence = new JMenuItem();
   protected JMenuItem vamsasStop = new JMenuItem();
   JMenuItem closeAll = new JMenuItem();
@@ -96,6 +100,8 @@ public class GDesktop
     HelpMenu.setText("Help");
     VamsasMenu.setText("Vamsas");
     VamsasMenu.setToolTipText("Share data with other vamsas applications.");
+    VamsasStMenu.setText("Connect to");
+    VamsasStMenu.setToolTipText("Join an existing vamsas session");
     inputLocalFileMenuItem.setText("from File");
     inputLocalFileMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(
         java.awt.event.KeyEvent.VK_O,
@@ -177,13 +183,31 @@ public class GDesktop
       }
     });
     inputMenu.setText("Input Alignment");
-    vamsasLoad.setText("Start Vamsas Session...");
-    vamsasLoad.setVisible(false);
-    vamsasLoad.addActionListener(new ActionListener()
+    vamsasStart.setText("New Vamsas Session...");
+    vamsasStart.setVisible(false);
+    vamsasStart.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        vamsasStart_actionPerformed(e);
+      }
+    });
+    vamsasImport.setText("Load Vamsas Session...");
+    vamsasImport.setVisible(false);
+    vamsasImport.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        vamsasImport_actionPerformed(e);
+      }
+    });
+    vamsasSave.setText("Save Vamsas Session...");
+    vamsasSave.setVisible(false);
+    vamsasSave.addActionListener(new ActionListener()
     {
       public void actionPerformed(ActionEvent e)
       {
-        vamsasLoad_actionPerformed(e);
+        vamsasSave_actionPerformed(e);
       }
     });
     inputSequence.setText("Fetch Sequence(s)...");
@@ -242,7 +266,11 @@ public class GDesktop
     FileMenu.add(quit);
     HelpMenu.add(aboutMenuItem);
     HelpMenu.add(documentationMenuItem);
-    VamsasMenu.add(vamsasLoad);
+    VamsasMenu.add(VamsasStMenu);
+    VamsasStMenu.setVisible(false);
+    VamsasMenu.add(vamsasStart);
+    VamsasMenu.add(vamsasImport);
+    VamsasMenu.add(vamsasSave);
     VamsasMenu.add(vamsasStop);
     toolsMenu.add(preferences);
     inputMenu.add(inputLocalFileMenuItem);
@@ -255,6 +283,14 @@ public class GDesktop
     //    inputMenu.add(vamsasLoad);
   }
 
+  protected void vamsasStMenu_actionPerformed()
+  {
+  }
+
+  public void vamsasSave_actionPerformed(ActionEvent e)
+  {
+  }
+
   /**
    * DOCUMENT ME!
    *
@@ -354,7 +390,7 @@ public class GDesktop
   {
   }
 
-  public void vamsasLoad_actionPerformed(ActionEvent e)
+  public void vamsasStart_actionPerformed(ActionEvent e)
   {
 
   }
@@ -383,4 +419,8 @@ public class GDesktop
   {
 
   }
+
+  private void vamsasImport_actionPerformed(ActionEvent e)
+  {
+  }
 }