JAL-1025 JAL-1022 use File based equivalence to map between jalview
[jalview.git] / src / jalview / ext / jmol / JalviewJmolBinding.java
index 6747349..38e58d8 100644 (file)
@@ -1,6 +1,6 @@
 /*\r
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)\r
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)\r
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle\r
  * \r
  * This file is part of Jalview.\r
  * \r
  */\r
 package jalview.ext.jmol;\r
 \r
-import java.io.File;\r
-import java.net.URL;\r
-import java.util.*;\r
-import java.applet.Applet;\r
-import java.awt.*;\r
-import java.awt.event.*;\r
-\r
-import javax.swing.JPanel;\r
-\r
 import jalview.api.AlignmentViewPanel;\r
 import jalview.api.FeatureRenderer;\r
 import jalview.api.SequenceRenderer;\r
 import jalview.api.SequenceStructureBinding;\r
 import jalview.api.StructureSelectionManagerProvider;\r
-import jalview.datamodel.*;\r
-import jalview.structure.*;\r
-import jalview.io.*;\r
+import jalview.datamodel.AlignmentI;\r
+import jalview.datamodel.ColumnSelection;\r
+import jalview.datamodel.PDBEntry;\r
+import jalview.datamodel.SequenceI;\r
+import jalview.io.AppletFormatAdapter;\r
+import jalview.schemes.ColourSchemeI;\r
+import jalview.schemes.ResidueProperties;\r
+import jalview.structure.StructureListener;\r
+import jalview.structure.StructureMapping;\r
+import jalview.structure.StructureSelectionManager;\r
+\r
+import java.awt.Color;\r
+import java.awt.Container;\r
+import java.awt.event.ComponentEvent;\r
+import java.awt.event.ComponentListener;\r
+import java.io.File;\r
+import java.net.URL;\r
+import java.util.Enumeration;\r
+import java.util.Hashtable;\r
+import java.util.Map;\r
+import java.util.Vector;\r
 \r
-import org.jmol.api.*;\r
 import org.jmol.adapter.smarter.SmarterJmolAdapter;\r
-\r
-import org.jmol.popup.*;\r
-import org.jmol.viewer.JmolConstants;\r
-import org.jmol.viewer.Viewer;\r
-\r
-import jalview.schemes.*;\r
+import org.jmol.api.JmolAppConsoleInterface;\r
+import org.jmol.api.JmolSelectionListener;\r
+import org.jmol.api.JmolStatusListener;\r
+import org.jmol.api.JmolViewer;\r
+import org.jmol.constant.EnumCallback;\r
+import org.jmol.popup.JmolPopup;\r
 \r
 public abstract class JalviewJmolBinding implements StructureListener,\r
         JmolStatusListener, SequenceStructureBinding,\r
@@ -570,7 +578,8 @@ public abstract class JalviewJmolBinding implements StructureListener,
     }\r
     AlignmentI alignment = alignmentv.getAlignment();\r
 \r
-    for (String cbyseq : JmolCommands.getColourBySequenceCommand(ssm, files, sequence, sr, fr, alignment)) {\r
+    for (jalview.structure.StructureMappingcommandSet cpdbbyseq: JmolCommands.getColourBySequenceCommand(ssm, files, sequence, sr, fr, alignment))\r
+      for (String cbyseq : cpdbbyseq.commands) {\r
       evalStateCommand(cbyseq);\r
     }\r
   }\r
@@ -862,6 +871,7 @@ public abstract class JalviewJmolBinding implements StructureListener,
         // recover PDB filename for the model hovered over.\r
         pdbfilename = viewer\r
                 .getModelFileName(new Integer(mdlId).intValue() - 1);\r
+        \r
       } catch (Exception e)\r
       {\r
       }\r
@@ -939,47 +949,48 @@ public abstract class JalviewJmolBinding implements StructureListener,
 \r
   }\r
 \r
-  public void notifyCallback(int type, Object[] data)\r
+  @Override\r
+  public void notifyCallback(EnumCallback type, Object[] data)\r
   {\r
     try\r
     {\r
       switch (type)\r
       {\r
-      case JmolConstants.CALLBACK_LOADSTRUCT:\r
+      case LOADSTRUCT:\r
         notifyFileLoaded((String) data[1], (String) data[2],\r
                 (String) data[3], (String) data[4],\r
                 ((Integer) data[5]).intValue());\r
 \r
         break;\r
-      case JmolConstants.CALLBACK_PICK:\r
+      case PICK:\r
         notifyAtomPicked(((Integer) data[2]).intValue(), (String) data[1],\r
                 (String) data[0]);\r
         // also highlight in alignment\r
-      case JmolConstants.CALLBACK_HOVER:\r
+      case HOVER:\r
         notifyAtomHovered(((Integer) data[2]).intValue(), (String) data[1],\r
                 (String) data[0]);\r
         break;\r
-      case JmolConstants.CALLBACK_SCRIPT:\r
+      case SCRIPT:\r
         notifyScriptTermination((String) data[2],\r
                 ((Integer) data[3]).intValue());\r
         break;\r
-      case JmolConstants.CALLBACK_ECHO:\r
+      case ECHO:\r
         sendConsoleEcho((String) data[1]);\r
         break;\r
-      case JmolConstants.CALLBACK_MESSAGE:\r
+      case MESSAGE:\r
         sendConsoleMessage((data == null) ? ((String) null)\r
                 : (String) data[1]);\r
         break;\r
-      case JmolConstants.CALLBACK_ERROR:\r
+      case ERROR:\r
         // System.err.println("Ignoring error callback.");\r
         break;\r
-      case JmolConstants.CALLBACK_SYNC:\r
-      case JmolConstants.CALLBACK_RESIZE:\r
+      case SYNC:\r
+      case RESIZE:\r
         refreshGUI();\r
         break;\r
-      case JmolConstants.CALLBACK_MEASURE:\r
+      case MEASURE:\r
 \r
-      case JmolConstants.CALLBACK_CLICK:\r
+      case CLICK:\r
       default:\r
         System.err.println("Unhandled callback " + type + " "\r
                 + data[1].toString());\r
@@ -992,24 +1003,25 @@ public abstract class JalviewJmolBinding implements StructureListener,
     }\r
   }\r
 \r
-  public boolean notifyEnabled(int callbackPick)\r
+  @Override\r
+  public boolean notifyEnabled(EnumCallback callbackPick)\r
   {\r
     switch (callbackPick)\r
     {\r
-    case JmolConstants.CALLBACK_ECHO:\r
-    case JmolConstants.CALLBACK_LOADSTRUCT:\r
-    case JmolConstants.CALLBACK_MEASURE:\r
-    case JmolConstants.CALLBACK_MESSAGE:\r
-    case JmolConstants.CALLBACK_PICK:\r
-    case JmolConstants.CALLBACK_SCRIPT:\r
-    case JmolConstants.CALLBACK_HOVER:\r
-    case JmolConstants.CALLBACK_ERROR:\r
+    case ECHO:\r
+    case LOADSTRUCT:\r
+    case MEASURE:\r
+    case MESSAGE:\r
+    case PICK:\r
+    case SCRIPT:\r
+    case HOVER:\r
+    case ERROR:\r
       return true;\r
-    case JmolConstants.CALLBACK_RESIZE:\r
-    case JmolConstants.CALLBACK_SYNC:\r
-    case JmolConstants.CALLBACK_CLICK:\r
-    case JmolConstants.CALLBACK_ANIMFRAME:\r
-    case JmolConstants.CALLBACK_MINIMIZATION:\r
+    case RESIZE:\r
+    case SYNC:\r
+    case CLICK:\r
+    case ANIMFRAME:\r
+    case MINIMIZATION:\r
     }\r
     return false;\r
   }\r
@@ -1119,7 +1131,8 @@ public abstract class JalviewJmolBinding implements StructureListener,
           }\r
           else\r
           {\r
-            if (matches = pdbentry[pe].getFile().equals(fileName))\r
+            File fl;\r
+            if (matches = (fl=new File(pdbentry[pe].getFile())).equals(new File(fileName)))\r
             {\r
               foundEntry = true;\r
               // TODO: Jmol can in principle retrieve from CLASSLOADER but\r
@@ -1130,7 +1143,6 @@ public abstract class JalviewJmolBinding implements StructureListener,
               String protocol = AppletFormatAdapter.URL;\r
               try\r
               {\r
-                File fl = new java.io.File(pdbentry[pe].getFile());\r
                 if (fl.exists())\r
                 {\r
                   protocol = AppletFormatAdapter.FILE;\r
@@ -1140,21 +1152,21 @@ public abstract class JalviewJmolBinding implements StructureListener,
               } catch (Error e)\r
               {\r
               }\r
-              ;\r
+              //Explicitly map to the filename used by Jmol ;\r
               pdb = ssm.setMapping(sequence[pe], chains[pe],\r
-                      pdbentry[pe].getFile(), protocol);\r
+                      fileName, protocol);\r
+                      //pdbentry[pe].getFile(), protocol);\r
 \r
             }\r
           }\r
           if (matches)\r
           {\r
-            pdbentry[pe].setId(pdb.id);\r
             // add an entry for every chain in the model\r
             for (int i = 0; i < pdb.chains.size(); i++)\r
             {\r
               String chid = new String(pdb.id + ":"\r
                       + ((MCview.PDBChain) pdb.chains.elementAt(i)).id);\r
-              chainFile.put(chid, pdbentry[pe].getFile());\r
+              chainFile.put(chid, fileName);\r
               chainNames.addElement(chid);\r
             }\r
             notifyLoaded = true;\r
@@ -1542,5 +1554,10 @@ public abstract class JalviewJmolBinding implements StructureListener,
   {\r
     return ssm.printMapping(pdbfile);\r
   }\r
-\r
+  @Override\r
+  public void resizeInnerPanel(String data)\r
+  {\r
+    // Jalview doesn't honour resize panel requests\r
+    \r
+  }\r
 }\r