JAL-3210 Improvements to eclipse detection. New src tree and SwingJS updated from...
[jalview.git] / src / jalview / ext / jmol / JalviewJmolBinding.java
index 4698e4d..fa31fd9 100644 (file)
@@ -44,6 +44,7 @@ import java.awt.event.ComponentEvent;
 import java.awt.event.ComponentListener;
 import java.io.File;
 import java.net.URL;
+import java.security.AccessControlException;
 import java.util.ArrayList;
 import java.util.BitSet;
 import java.util.Hashtable;
@@ -618,6 +619,74 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
    */
   private int _modelFileNameMap[];
 
+  // ////////////////////////////////
+  // /StructureListener
+  // @Override
+  public synchronized String[] getPdbFilex()
+  {
+    if (viewer == null)
+    {
+      return new String[0];
+    }
+    if (modelFileNames == null)
+    {
+      List<String> mset = new ArrayList<>();
+      _modelFileNameMap = new int[viewer.ms.mc];
+      String m = viewer.ms.getModelFileName(0);
+      if (m != null)
+      {
+        String filePath = m;
+        try
+        {
+          filePath = new File(m).getAbsolutePath();
+        } catch (AccessControlException x)
+        {
+          // usually not allowed to do this in applet
+          System.err.println(
+                  "jmolBinding: Using local file string from Jmol: " + m);
+        }
+        if (filePath.indexOf("/file:") != -1)
+        {
+          // applet path with docroot - discard as format won't match pdbfile
+          filePath = m;
+        }
+        mset.add(filePath);
+        _modelFileNameMap[0] = 0; // filename index for first model is always 0.
+      }
+      int j = 1;
+      for (int i = 1; i < viewer.ms.mc; i++)
+      {
+        m = viewer.ms.getModelFileName(i);
+        String filePath = m;
+        if (m != null)
+        {
+          try
+          {
+            filePath = new File(m).getAbsolutePath();
+          } 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);
+          }
+        }
+
+        /*
+         * add this model unless it is read from a structure file we have
+         * already seen (example: 2MJW is an NMR structure with 10 models)
+         */
+        if (!mset.contains(filePath))
+        {
+          mset.add(filePath);
+          _modelFileNameMap[j] = i; // record the model index for the filename
+          j++;
+        }
+      }
+      modelFileNames = mset.toArray(new String[mset.size()]);
+    }
+    return modelFileNames;
+  }
+
   @Override
   public synchronized String[] getStructureFiles()
   {
@@ -812,7 +881,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       try
       {
         // recover PDB filename for the model hovered over.
-        int mnumber = Integer.valueOf(mdlId).intValue() - 1;
+        int mnumber = new Integer(mdlId).intValue() - 1;
         if (_modelFileNameMap != null)
         {
           int _mp = _modelFileNameMap.length - 1;