From: jprocter Date: Mon, 10 Sep 2007 16:36:37 +0000 (+0000) Subject: choose a particular vamsas session, load, or create a new session and export the... X-Git-Tag: Release_2_4~275 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=3c7b844a711755d0a8520765ec8f21cd4c73375e;p=jalview.git choose a particular vamsas session, load, or create a new session and export the current session. --- diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 7927df9..10d2d43 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -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() diff --git a/src/jalview/gui/VamsasApplication.java b/src/jalview/gui/VamsasApplication.java index 18c2e55..cf44191 100644 --- a/src/jalview/gui/VamsasApplication.java +++ b/src/jalview/gui/VamsasApplication.java @@ -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); diff --git a/src/jalview/jbgui/GDesktop.java b/src/jalview/jbgui/GDesktop.java index 59e4457..b7d060b 100755 --- a/src/jalview/jbgui/GDesktop.java +++ b/src/jalview/jbgui/GDesktop.java @@ -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) + { + } }