From: jprocter Date: Fri, 14 Sep 2007 15:30:29 +0000 (+0000) Subject: added support for loading a vamsas document into a new vamsas session. X-Git-Tag: Release_2_4~273 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=9ca31f2261760b6fad088295feb701e400e7150f added support for loading a vamsas document into a new vamsas session. --- diff --git a/lib/vamsas-client.jar b/lib/vamsas-client.jar index 0b0ec41..9e2b3a2 100644 Binary files a/lib/vamsas-client.jar and b/lib/vamsas-client.jar differ diff --git a/src/jalview/gui/Desktop.java b/src/jalview/gui/Desktop.java index 10d2d43..f61e7a8 100755 --- a/src/jalview/gui/Desktop.java +++ b/src/jalview/gui/Desktop.java @@ -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() { diff --git a/src/jalview/gui/VamsasApplication.java b/src/jalview/gui/VamsasApplication.java index cf44191..65212a6 100644 --- a/src/jalview/gui/VamsasApplication.java +++ b/src/jalview/gui/VamsasApplication.java @@ -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); } } } diff --git a/src/jalview/jbgui/GDesktop.java b/src/jalview/jbgui/GDesktop.java index b7d060b..70c5c64 100755 --- a/src/jalview/jbgui/GDesktop.java +++ b/src/jalview/jbgui/GDesktop.java @@ -420,7 +420,7 @@ public class GDesktop } - private void vamsasImport_actionPerformed(ActionEvent e) + public void vamsasImport_actionPerformed(ActionEvent e) { } }