JAL-621 - also renamed list of javascript handlers
[jalview.git] / src / jalview / bin / JalviewLite.java
index 7ae7007..1801eb1 100755 (executable)
@@ -710,7 +710,7 @@ public class JalviewLite extends Applet
     setMouseoverListener(currentAlignFrame, listener);
   }
 
-  private Vector mouseoverListeners = new Vector();
+  private Vector javascriptListeners = new Vector();
 
   public void setMouseoverListener(AlignFrame af, String listener)
   {
@@ -726,7 +726,7 @@ public class JalviewLite extends Applet
     }
     jalview.javascript.MouseOverListener mol = new jalview.javascript.MouseOverListener(
             this, af, listener);
-    mouseoverListeners.addElement(mol);
+    javascriptListeners.addElement(mol);
     StructureSelectionManager.getStructureSelectionManager()
             .addStructureViewerListener(mol);
     if (debug)
@@ -734,7 +734,7 @@ public class JalviewLite extends Applet
       System.err.println("Added a mouseover listener for "
               + ((af == null) ? "All frames" : "Just views for "
                       + af.getAlignViewport().getSequenceSetId()));
-      System.err.println("There are now " + mouseoverListeners.size()
+      System.err.println("There are now " + javascriptListeners.size()
               + " listeners in total.");
     }
   }
@@ -758,7 +758,7 @@ public class JalviewLite extends Applet
     }
     jalview.javascript.JsSelectionSender mol = new jalview.javascript.JsSelectionSender(
             this, af, listener);
-    mouseoverListeners.addElement(mol);
+    javascriptListeners.addElement(mol);
     StructureSelectionManager.getStructureSelectionManager()
             .addSelectionListener(mol);
     if (debug)
@@ -766,11 +766,34 @@ public class JalviewLite extends Applet
       System.err.println("Added a selection listener for "
               + ((af == null) ? "All frames" : "Just views for "
                       + af.getAlignViewport().getSequenceSetId()));
-      System.err.println("There are now " + mouseoverListeners.size()
+      System.err.println("There are now " + javascriptListeners.size()
               + " listeners in total.");
     }
   }
 
+  public void setStructureListener(String listener)
+  {
+    if (listener != null)
+    {
+      listener = listener.trim();
+      if (listener.length() == 0)
+      {
+        System.err
+                .println("jalview Javascript error: Ignoring empty function for selection listener.");
+        return;
+      }
+    }
+    jalview.javascript.MouseOverStructureListener mol = new jalview.javascript.MouseOverStructureListener(this, listener);
+    javascriptListeners.addElement(mol);
+    StructureSelectionManager.getStructureSelectionManager()
+            .addStructureViewerListener(mol);
+    if (debug)
+    {
+      System.err.println("Added a javascript structure viewer listener '"+listener+"'");
+      System.err.println("There are now " + javascriptListeners.size()
+              + " listeners in total.");
+    }
+  }
   /**
    * remove any callback using the given listener function and associated with
    * the given alignFrame (or null for all callbacks)
@@ -791,15 +814,15 @@ public class JalviewLite extends Applet
       }
     }
     boolean rprt = false;
-    for (int ms = 0, msSize = mouseoverListeners.size(); ms < msSize;)
+    for (int ms = 0, msSize = javascriptListeners.size(); ms < msSize;)
     {
-      Object lstn = mouseoverListeners.elementAt(ms);
+      Object lstn = javascriptListeners.elementAt(ms);
       JsCallBack lstner = (JsCallBack) lstn;
       if ((af == null || lstner.getAlignFrame() == af)
               && (listener == null || lstner.getListenerFunction().equals(
                       listener)))
       {
-        mouseoverListeners.removeElement(lstner);
+        javascriptListeners.removeElement(lstner);
         msSize--;
         if (lstner instanceof SelectionListener)
         {
@@ -824,19 +847,19 @@ public class JalviewLite extends Applet
     }
     if (rprt)
     {
-      System.err.println("There are now " + mouseoverListeners.size()
+      System.err.println("There are now " + javascriptListeners.size()
               + " listeners in total.");
     }
   }
 
   public void stop()
   {
-    if (mouseoverListeners != null)
+    if (javascriptListeners != null)
     {
-      while (mouseoverListeners.size() > 0)
+      while (javascriptListeners.size() > 0)
       {
-        Object mol = mouseoverListeners.elementAt(0);
-        mouseoverListeners.removeElement(mol);
+        Object mol = javascriptListeners.elementAt(0);
+        javascriptListeners.removeElement(mol);
         if (mol instanceof SelectionListener)
         {
           StructureSelectionManager.getStructureSelectionManager()
@@ -860,10 +883,19 @@ public class JalviewLite extends Applet
    * @param chain
    * @param pdbfile
    */
-  public void mouseOverStructure(int pdbResNum, String chain, String pdbfile)
+  public void mouseOverStructure(String pdbResNum, String chain, String pdbfile)
   {
+    try {
     StructureSelectionManager.getStructureSelectionManager()
-            .mouseOverStructure(pdbResNum, chain, pdbfile);
+            .mouseOverStructure(new Integer(pdbResNum).intValue(), chain, pdbfile);
+    if (debug)
+    {
+      System.err.println("mouseOver for '"+pdbResNum+"' in chain '"+chain+"' in structure '"+pdbfile+"'");
+    }
+    } catch (NumberFormatException e)
+    {
+        System.err.println("Ignoring invalid residue number string '"+pdbResNum+"'");
+    }
   }
 
   // //////////////////////////////////////////////
@@ -905,6 +937,11 @@ public class JalviewLite extends Applet
 
   private boolean alignPdbStructures = false;
 
+  /**
+   * use an external structure viewer exclusively (no jmols or MCViews will be opened by JalviewLite itself)
+   */
+  public boolean useXtrnalSviewer=false;
+
   public static boolean debug = false;
 
   static String builddate = null, version = null;
@@ -1000,6 +1037,11 @@ public class JalviewLite extends Applet
       System.err.println("Build Date : " + getBuildDate());
 
     }
+    String externalsviewer = getParameter("externalstructureviewer");
+    if (externalsviewer!=null)
+    {
+      useXtrnalSviewer=externalsviewer.trim().toLowerCase().equals("true");
+    }
     /**
      * if true disable the check for jmol
      */
@@ -1578,6 +1620,10 @@ public class JalviewLite extends Applet
         // Accumulate pdbs here if they are heading for the same view (if
         // alignPdbStructures is true)
         Vector pdbs = new Vector();
+        // create a lazy matcher if we're asked to
+        jalview.analysis.SequenceIdMatcher matcher = (applet.getDefaultParameter("relaxedidmatch", false)) ? new jalview.analysis.SequenceIdMatcher(
+                newAlignFrame.getAlignViewport().getAlignment().getSequencesArray()) : null;
+
         do
         {
           if (pdbFileCount > 0)
@@ -1600,8 +1646,8 @@ public class JalviewLite extends Applet
               String sequence = applet.getParameter("PDBSEQ");
               if (sequence != null)
                 seqs = new SequenceI[]
-                { (Sequence) newAlignFrame.getAlignViewport()
-                        .getAlignment().findName(sequence) };
+                { matcher==null ? (Sequence) newAlignFrame.getAlignViewport()
+                        .getAlignment().findName(sequence) : matcher.findIdMatch(sequence) };
 
             }
             else
@@ -1620,8 +1666,8 @@ public class JalviewLite extends Applet
                   tmp2.addElement(st2.nextToken());
                   seqstring = st2.nextToken();
                 }
-                tmp.addElement((Sequence) newAlignFrame.getAlignViewport()
-                        .getAlignment().findName(seqstring));
+                tmp.addElement(matcher==null ? (Sequence) newAlignFrame.getAlignViewport()
+                        .getAlignment().findName(seqstring) : matcher.findIdMatch(seqstring));
               }
 
               seqs = new SequenceI[tmp.size()];