+
+ @SuppressWarnings("unused")
+ public void cacheFiles(List<File> files)
+ {
+ if (files == null)
+ {
+ return;
+ }
+ for (File f : files)
+ {
+ Platform.cacheFileData(f);
+ }
+ }
+
+ /**
+ * Retrieves and saves as file any modelled PDB entries for which we do not
+ * already have a file saved. Returns a list of absolute paths to structure
+ * files which were either retrieved, or already stored but not modelled in
+ * the structure viewer (i.e. files to add to the viewer display).
+ *
+ * Currently only used by Jmol - similar but different code used for Chimera/X
+ * and Pymol so still need to refactor
+ *
+ * @param structureViewer
+ * UI proxy for the structure viewer
+ * @return list of absolute paths to structures retrieved that need to be
+ * added to the display
+ */
+ public List<String> fetchPdbFiles(StructureViewerBase structureViewer)
+ {
+ // todo - record which pdbids were successfully imported.
+ StringBuilder errormsgs = new StringBuilder();
+
+ List<String> files = new ArrayList<>();
+ String pdbid = "";
+ try
+ {
+ String[] filesInViewer = getStructureFiles();
+ // TODO: replace with reference fetching/transfer code (validate PDBentry
+ // as a DBRef?)
+
+ for (int pi = 0; pi < getPdbCount(); pi++)
+ {
+ PDBEntry strucEntry = getPdbEntry(pi);
+
+ String file = strucEntry.getFile();
+ if (file == null)
+ {
+ pdbid = strucEntry.getId();
+ try
+ {
+ file = structureViewer.fetchPdbFile(strucEntry);
+ } catch (OutOfMemoryError oomerror)
+ {
+ new OOMWarning("Retrieving PDB id " + pdbid, oomerror);
+ } catch (Exception ex)
+ {
+ ex.printStackTrace();
+ errormsgs.append("'").append(pdbid).append("'");
+ }
+ if (file != null)
+ {
+ // success
+ files.add(file);
+ }
+ else
+ {
+ errormsgs.append("'").append(pdbid).append("' ");
+ }
+ }
+ else
+ {
+ if (filesInViewer != null && filesInViewer.length > 0)
+ {
+ structureViewer.setAddingStructures(true); // already files loaded.
+ for (int c = 0; c < filesInViewer.length; c++)
+ {
+ if (Platform.pathEquals(filesInViewer[c], file))
+ {
+ file = null;
+ break;
+ }
+ }
+ }
+ if (file != null)
+ {
+ files.add(file);
+ }
+ }
+ }
+ } catch (OutOfMemoryError oomerror)
+ {
+ new OOMWarning("Retrieving PDB files: " + pdbid, oomerror);
+ } catch (Exception ex)
+ {
+ ex.printStackTrace();
+ errormsgs.append("When retrieving pdbfiles : current was: '")
+ .append(pdbid).append("'");
+ }
+ if (errormsgs.length() > 0)
+ {
+ JvOptionPane.showInternalMessageDialog(Desktop.desktop,
+ MessageManager.formatMessage(
+ "label.pdb_entries_couldnt_be_retrieved", new String[]
+ { errormsgs.toString() }),
+ MessageManager.getString("label.couldnt_load_file"),
+ JvOptionPane.ERROR_MESSAGE);
+ }
+ return files;
+ }
+