JAL-2738 copy to spikes/mungo
[jalview.git] / src / jalview / ext / jmol / JalviewJmolBinding.java
index 94df99a..96dfcfe 100644 (file)
@@ -24,7 +24,7 @@ import jalview.api.AlignmentViewPanel;
 import jalview.api.FeatureRenderer;
 import jalview.api.SequenceRenderer;
 import jalview.datamodel.AlignmentI;
-import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.io.DataSourceType;
@@ -164,7 +164,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   public void closeViewer()
   {
     // remove listeners for all structures in viewer
-    getSsm().removeStructureViewerListener(this, this.getPdbFile());
+    getSsm().removeStructureViewerListener(this, this.getStructureFiles());
     viewer.dispose();
     lastCommand = null;
     viewer = null;
@@ -222,11 +222,11 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    *          TODO
    */
   public void superposeStructures(AlignmentI alignment, int refStructure,
-          ColumnSelection hiddenCols)
+          HiddenColumns hiddenCols)
   {
     superposeStructures(new AlignmentI[] { alignment },
-            new int[] { refStructure },
-            new ColumnSelection[] { hiddenCols });
+            new int[]
+            { refStructure }, new HiddenColumns[] { hiddenCols });
   }
 
   /**
@@ -234,7 +234,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    */
   @Override
   public String superposeStructures(AlignmentI[] _alignment,
-          int[] _refStructure, ColumnSelection[] _hiddenCols)
+          int[] _refStructure, HiddenColumns[] _hiddenCols)
   {
     while (viewer.isScriptExecuting())
     {
@@ -250,7 +250,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
      * get the distinct structure files modelled
      * (a file with multiple chains may map to multiple sequences)
      */
-    String[] files = getPdbFile();
+    String[] files = getStructureFiles();
     if (!waitForFileLoad(files))
     {
       return null;
@@ -278,19 +278,17 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     {
       int refStructure = _refStructure[a];
       AlignmentI alignment = _alignment[a];
-      ColumnSelection hiddenCols = _hiddenCols[a];
-      if (a > 0
-              && selectioncom.length() > 0
-              && !selectioncom.substring(selectioncom.length() - 1).equals(
-                      "|"))
+      HiddenColumns hiddenCols = _hiddenCols[a];
+      if (a > 0 && selectioncom.length() > 0 && !selectioncom
+              .substring(selectioncom.length() - 1).equals("|"))
       {
         selectioncom.append("|");
       }
       // process this alignment
       if (refStructure >= files.length)
       {
-        System.err.println("Invalid reference structure value "
-                + refStructure);
+        System.err.println(
+                "Invalid reference structure value " + refStructure);
         refStructure = -1;
       }
 
@@ -332,8 +330,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       int nmatched = matched.cardinality();
       if (nmatched < 4)
       {
-        return (MessageManager.formatMessage(
-"label.insufficient_residues",
+        return (MessageManager.formatMessage("label.insufficient_residues",
                 nmatched));
       }
 
@@ -429,7 +426,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         command.append(".1} {");
         command.append(Integer.toString(1 + refStructure));
         // conformation=1 excludes alternate locations for CA (JAL-1757)
-        command.append(".1} SUBSET {(*.CA | *.P) and conformation=1} ATOMS ");
+        command.append(
+                ".1} SUBSET {(*.CA | *.P) and conformation=1} ATOMS ");
 
         // for (int s = 0; s < 2; s++)
         // {
@@ -461,7 +459,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       // System.out.println("Select regions:\n" + selectioncom.toString());
       evalStateCommand("select *; cartoons off; backbone; select ("
               + selectioncom.toString() + "); cartoons; ");
-      // evalStateCommand("select *; backbone; select "+selcom.toString()+"; cartoons; center "+selcom.toString());
+      // evalStateCommand("select *; backbone; select "+selcom.toString()+";
+      // cartoons; center "+selcom.toString());
     }
 
     return null;
@@ -549,7 +548,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   }
 
   @Override
-  public float[][][] functionXYZ(String functionName, int nx, int ny, int nz)
+  public float[][][] functionXYZ(String functionName, int nx, int ny,
+          int nz)
   {
     // TODO Auto-generated method stub
     return null;
@@ -577,7 +577,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
 
   private int getModelNum(String modelFileName)
   {
-    String[] mfn = getPdbFile();
+    String[] mfn = getStructureFiles();
     if (mfn == null)
     {
       return -1;
@@ -601,8 +601,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
 
   // ////////////////////////////////
   // /StructureListener
-  @Override
-  public synchronized String[] getPdbFile()
+  // @Override
+  public synchronized String[] getPdbFilex()
   {
     if (viewer == null)
     {
@@ -622,9 +622,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         } catch (AccessControlException x)
         {
           // usually not allowed to do this in applet
-          System.err
-                  .println("jmolBinding: Using local file string from Jmol: "
-                          + m);
+          System.err.println(
+                  "jmolBinding: Using local file string from Jmol: " + m);
         }
         if (filePath.indexOf("/file:") != -1)
         {
@@ -647,7 +646,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
           } catch (AccessControlException x)
           {
             // usually not allowed to do this in applet, so keep raw handle
-            // System.err.println("jmolBinding: Using local file string from Jmol: "+m);
+            // System.err.println("jmolBinding: Using local file string from
+            // Jmol: "+m);
           }
         }
 
@@ -667,6 +667,33 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     return modelFileNames;
   }
 
+  @Override
+  public synchronized String[] getStructureFiles()
+  {
+    List<String> mset = new ArrayList<String>();
+    if (viewer == null)
+    {
+      return new String[0];
+    }
+
+    if (modelFileNames == null)
+    {
+      int modelCount = viewer.ms.mc;
+      String filePath = null;
+      for (int i = 0; i < modelCount; ++i)
+      {
+        filePath = viewer.ms.getModelFileName(i);
+        if (!mset.contains(filePath))
+        {
+          mset.add(filePath);
+        }
+      }
+      modelFileNames = mset.toArray(new String[mset.size()]);
+    }
+
+    return modelFileNames;
+  }
+
   /**
    * map from string to applet
    */
@@ -677,8 +704,6 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     return null;
   }
 
-  
-
   // ///////////////////////////////
   // JmolStatusListener
 
@@ -801,14 +826,14 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     // handle insertion codes
     if (alocsep != -1)
     {
-      pdbResNum = Integer.parseInt(strInfo.substring(
-              strInfo.indexOf("]") + 1, alocsep));
+      pdbResNum = Integer.parseInt(
+              strInfo.substring(strInfo.indexOf("]") + 1, alocsep));
 
     }
     else
     {
-      pdbResNum = Integer.parseInt(strInfo.substring(
-              strInfo.indexOf("]") + 1, chainSeparator));
+      pdbResNum = Integer.parseInt(
+              strInfo.substring(strInfo.indexOf("]") + 1, chainSeparator));
     }
     String chainId;
 
@@ -830,13 +855,14 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       {
         chainSeparator1 = strInfo.indexOf(".", mdlSep);
       }
-      String mdlId = (chainSeparator1 > -1) ? strInfo.substring(mdlSep + 1,
-              chainSeparator1) : strInfo.substring(mdlSep + 1);
+      String mdlId = (chainSeparator1 > -1)
+              ? strInfo.substring(mdlSep + 1, chainSeparator1)
+              : strInfo.substring(mdlSep + 1);
       try
       {
         // recover PDB filename for the model hovered over.
-        int _mp = _modelFileNameMap.length - 1, mnumber = new Integer(mdlId)
-                .intValue() - 1;
+        int _mp = _modelFileNameMap.length - 1,
+                mnumber = new Integer(mdlId).intValue() - 1;
         while (mnumber < _modelFileNameMap[_mp])
         {
           _mp--;
@@ -877,7 +903,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    * } }
    */
 
-  public void notifyAtomPicked(int atomIndex, String strInfo, String strData)
+  public void notifyAtomPicked(int atomIndex, String strInfo,
+          String strData)
   {
     /**
      * this implements the toggle label behaviour copied from the original
@@ -960,8 +987,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         sendConsoleEcho((String) data[1]);
         break;
       case MESSAGE:
-        sendConsoleMessage((data == null) ? ((String) null)
-                : (String) data[1]);
+        sendConsoleMessage(
+                (data == null) ? ((String) null) : (String) data[1]);
         break;
       case ERROR:
         // System.err.println("Ignoring error callback.");
@@ -974,8 +1001,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
 
       case CLICK:
       default:
-        System.err.println("Unhandled callback " + type + " "
-                + data[1].toString());
+        System.err.println(
+                "Unhandled callback " + type + " " + data[1].toString());
         break;
       }
     } catch (Exception e)
@@ -1035,7 +1062,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     chainNames = new ArrayList<String>();
     chainFile = new Hashtable<String, String>();
     boolean notifyLoaded = false;
-    String[] modelfilenames = getPdbFile();
+    String[] modelfilenames = getStructureFiles();
     // first check if we've lost any structures
     if (oldmodels != null && oldmodels.length > 0)
     {
@@ -1084,8 +1111,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
         // calculate essential attributes for the pdb data imported inline.
         // prolly need to resolve modelnumber properly - for now just use our
         // 'best guess'
-        pdbfile = viewer.getData("" + (1 + _modelFileNameMap[modelnum])
-                + ".0", "PDB");
+        pdbfile = viewer.getData(
+                "" + (1 + _modelFileNameMap[modelnum]) + ".0", "PDB");
       }
       // search pdbentries and sequences to find correct pdbentry for this
       // model
@@ -1141,8 +1168,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
           // add an entry for every chain in the model
           for (int i = 0; i < pdb.getChains().size(); i++)
           {
-            String chid = new String(pdb.getId() + ":"
-                    + pdb.getChains().elementAt(i).id);
+            String chid = new String(
+                    pdb.getId() + ":" + pdb.getChains().elementAt(i).id);
             chainFile.put(chid, fileName);
             chainNames.add(chid);
           }
@@ -1174,7 +1201,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     // }
     if (!isLoadingFromArchive())
     {
-      viewer.evalStringQuiet("model *; select backbone;restrict;cartoon;wireframe off;spacefill off");
+      viewer.evalStringQuiet(
+              "model *; select backbone;restrict;cartoon;wireframe off;spacefill off");
     }
     // register ourselves as a listener and notify the gui that it needs to
     // update itself.
@@ -1254,8 +1282,9 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
             false);
     for (String resName : residueSet)
     {
-      char res = resName.length() == 3 ? ResidueProperties
-              .getSingleCharacterCode(resName) : resName.charAt(0);
+      char res = resName.length() == 3
+              ? ResidueProperties.getSingleCharacterCode(resName)
+              : resName.charAt(0);
       Color col = cs.findColour(res, 0, null, null, 0f);
       command.append("select " + resName + ";color[" + col.getRed() + ","
               + col.getGreen() + "," + col.getBlue() + "];");
@@ -1334,8 +1363,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       commandOptions = "";
     }
     viewer = (Viewer) JmolViewer.allocateViewer(renderPanel,
-            (jmolfileio ? new SmarterJmolAdapter() : null), htmlName
-                    + ((Object) this).toString(), documentBase, codeBase,
+            (jmolfileio ? new SmarterJmolAdapter() : null),
+            htmlName + ((Object) this).toString(), documentBase, codeBase,
             commandOptions, this);
 
     viewer.setJmolStatusListener(this); // extends JmolCallbackListener