vamsas mouseOvers
authorjprocter <Jim Procter>
Sun, 17 Jun 2007 13:08:15 +0000 (13:08 +0000)
committerjprocter <Jim Procter>
Sun, 17 Jun 2007 13:08:15 +0000 (13:08 +0000)
src/jalview/gui/VamsasApplication.java

index cead1e3..5ede8fe 100644 (file)
@@ -3,25 +3,31 @@
  */
 package jalview.gui;
 
+import jalview.bin.Cache;
+import jalview.datamodel.SequenceI;
+import jalview.io.VamsasAppDatastore;
+import jalview.structure.StructureSelectionManager;
+import jalview.structure.VamsasListener;
+
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.io.File;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
 import java.util.Hashtable;
 import java.util.IdentityHashMap;
-import java.util.Vector;
-import java.util.jar.JarOutputStream;
 
 import javax.swing.JInternalFrame;
 
-import jalview.bin.Cache;
-import jalview.io.VamsasAppDatastore;
-
-import uk.ac.vamsas.client.*;
-import uk.ac.vamsas.*;
-import uk.ac.vamsas.objects.*;
+import uk.ac.vamsas.client.ClientHandle;
+import uk.ac.vamsas.client.IClient;
+import uk.ac.vamsas.client.IClientDocument;
+import uk.ac.vamsas.client.NoDefaultSessionException;
+import uk.ac.vamsas.client.UserHandle;
+import uk.ac.vamsas.client.VorbaId;
+import uk.ac.vamsas.client.picking.IMessageHandler;
+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
@@ -277,16 +283,43 @@ public class VamsasApplication
     Cache.log.debug("Updating jalview from changed vamsas document.");
     disableGui(true);
     try {
+      long time = System.currentTimeMillis();
       IClientDocument cdoc = vclient.getClientDocument();
+      if (Cache.log.isDebugEnabled())
+      {
+        Cache.log.debug("Time taken to get ClientDocument = "+(System.currentTimeMillis()-time));
+        time = System.currentTimeMillis();
+      }
       if (fromJalview)
       {
         this.updateVamsasDocument(cdoc);
+        if (Cache.log.isDebugEnabled())
+        {
+          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));
+          time = System.currentTimeMillis();
+        }
       } else
       {
         updateJalview(cdoc);
+        if (Cache.log.isDebugEnabled())
+        {
+          Cache.log.debug("Time taken to update Jalview from vamsas document Roots\t= "+(System.currentTimeMillis()-time));
+          time = System.currentTimeMillis();
+        }
+
       }
       vclient.updateDocument(cdoc);
+      if (Cache.log.isDebugEnabled())
+      {
+        Cache.log.debug("Time taken to update Session Document\t= "+(System.currentTimeMillis()-time));
+        time = System.currentTimeMillis();
+      }
       cdoc=null;
     } catch (Exception ee) {
       System.err.println("Exception whilst updating :");
@@ -313,6 +346,7 @@ public class VamsasApplication
     Desktop.instance.setVamsasUpdate(b);
   }
   private boolean joinedSession=false;
+  private VamsasListener picker=null;
   private void startSession()
   {
     if (inSession())
@@ -327,6 +361,56 @@ public class VamsasApplication
         Cache.log.error("Failed to join vamsas session.",e);
         vclient=null;
       }
+      try {
+        final IPickManager pm = vclient.getPickManager();
+        final StructureSelectionManager ssm = StructureSelectionManager.getStructureSelectionManager();
+        pm.registerMessageHandler(new IMessageHandler() {
+          String last=null;
+          public void handleMessage(Message message)
+          {
+            if (message instanceof MouseOverMessage && vobj2jv!=null)
+            {
+              MouseOverMessage mm = (MouseOverMessage) message;
+              String mstring = mm.getVorbaID()+" "+mm.getPosition();
+              if (last!=null && mstring.equals(last))
+              {
+                return;
+              }
+              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());
+                // position is in sequence or in aligned sequence ???????
+                ssm.mouseOverVamsasSequence((SequenceI) jvobj, mm.getPosition());
+              }
+            }
+          }
+        });
+        picker = new VamsasListener() {
+          SequenceI last=null;
+          int i=-1;
+          public void mouseOver(SequenceI seq, int index)
+          {
+            if (seq!=last || i!=index)
+            {
+              VorbaId v = (VorbaId) jv2vobj.get(seq);
+              if (v!=null)
+              {
+                // Cache.log.debug("Mouse over "+v.getId()+" bound to "+seq+" at "+index);
+                last = seq;
+                i=index;
+                MouseOverMessage message = new MouseOverMessage(v.getId(), index);
+                pm.sendMessage(message);
+              }
+            }
+          }
+        };
+        ssm.addStructureViewerListener(picker); // better method here
+      } catch (Exception e)
+      {
+        Cache.log.error("Failed to init Vamsas Picking",e);
+      }
     }
   }
 }