- * 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).
- *
- * @return
- */
- List<String> fetchPdbFiles()
- {
- // todo - record which pdbids were successfully imported.
- StringBuilder errormsgs = new StringBuilder();
-
- List<String> files = new ArrayList<>();
- String pdbid = "";
- try
- {
- String[] filesInViewer = jmb.getStructureFiles();
- // TODO: replace with reference fetching/transfer code (validate PDBentry
- // as a DBRef?)
- Pdb pdbclient = new Pdb();
- for (int pi = 0; pi < jmb.getPdbCount(); pi++)
- {
- String file = jmb.getPdbEntry(pi).getFile();
- if (file == null)
- {
- // todo: extract block as method and pull up (also ChimeraViewFrame)
- // retrieve the pdb and store it locally
- AlignmentI pdbseq = null;
- pdbid = jmb.getPdbEntry(pi).getId();
- long hdl = pdbid.hashCode() - System.currentTimeMillis();
- if (progressBar != null)
- {
- progressBar.setProgressBar(MessageManager
- .formatMessage("status.fetching_pdb", new String[]
- { pdbid }), hdl);
- }
- try
- {
- pdbseq = pdbclient.getSequenceRecords(pdbid);
- } catch (OutOfMemoryError oomerror)
- {
- new OOMWarning("Retrieving PDB id " + pdbid, oomerror);
- } catch (Exception ex)
- {
- ex.printStackTrace();
- errormsgs.append("'").append(pdbid).append("'");
- } finally
- {
- if (progressBar != null)
- {
- progressBar.setProgressBar(
- MessageManager.getString("label.state_completed"),
- hdl);
- }
- }
- if (pdbseq != null)
- {
- // just transfer the file name from the first sequence's first
- // PDBEntry
- file = new File(pdbseq.getSequenceAt(0).getAllPDBEntries()
- .elementAt(0).getFile()).getAbsolutePath();
- jmb.getPdbEntry(pi).setFile(file);
- files.add(file);
- }
- else
- {
- errormsgs.append("'").append(pdbid).append("' ");
- }
- }
- else
- {
- if (filesInViewer != null && filesInViewer.length > 0)
- {
- addingStructures = true; // already files loaded.
- for (int c = 0; c < filesInViewer.length; c++)
- {
- if (filesInViewer[c].equals(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;
- }
-
- /**