+ // @Override
+ public synchronized String[] getPdbFilex()
+ {
+ if (viewer == null)
+ {
+ return new String[0];
+ }
+ if (modelFileNames == null)
+ {
+ List<String> mset = new ArrayList<String>();
+ _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()