import java.awt.Font;
import java.awt.Graphics;
import java.io.File;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import jalview.api.AlignmentViewPanel;
import jalview.bin.Cache;
-import jalview.datamodel.AlignmentI;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
import jalview.datamodel.StructureViewerModel;
import jalview.util.ImageMaker;
import jalview.util.MessageManager;
import jalview.util.Platform;
-import jalview.ws.dbsources.EBIAlfaFold;
-import jalview.ws.dbsources.Pdb;
-import jalview.ws.utils.UrlDownloadClient;
public class AppJmol extends StructureViewerBase
{
_started = true;
try
{
- List<String> files = fetchPdbFiles();
+ List<String> files = jmb.fetchPdbFiles(this);
if (files.size() > 0)
{
showFilesInViewer(files);
}
/**
- * 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();
- EBIAlfaFold afclient = new EBIAlfaFold();
-
- 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;
- PDBEntry strucEntry = jmb.getPdbEntry(pi);
- pdbid = strucEntry.getId();
- long hdl = pdbid.hashCode() - System.currentTimeMillis();
- setProgressMessage(MessageManager
- .formatMessage("status.fetching_pdb", new String[]
- { pdbid }), hdl);
- try
- {
- if (afclient.isValidReference(pdbid))
- {
- pdbseq = afclient.getSequenceRecords(pdbid);
- } else {
- if (strucEntry.hasRetrievalUrl())
- {
- File tmpFile = File.createTempFile(pdbid, "cif");
- String fromUrl = strucEntry.getRetrievalUrl();
- UrlDownloadClient.download(fromUrl, tmpFile);
-
- // may not need this check ?
- file = tmpFile.getAbsolutePath();
- if (file != null)
- {
- pdbseq = EBIAlfaFold.importDownloadedStructureFromUrl(fromUrl,tmpFile,pdbid,null,null,null);
- }
- } else {
- 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
- {
- setProgressMessage(
- 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 (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;
- }
-
- /**
* Outputs the Jmol viewer image as an image file, after prompting the user to
* choose a file and (for EPS) choice of Text or Lineart character rendering
* (unless a preference for this is set)
import java.awt.Container;
import java.io.File;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import jalview.api.AlignmentViewPanel;
import jalview.api.structures.JalviewStructureDisplayI;
import jalview.bin.Cache;
+import jalview.datamodel.AlignmentI;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
import jalview.ext.jmol.JalviewJmolBinding;
import jalview.io.DataSourceType;
import jalview.structure.StructureSelectionManager;
+import jalview.util.MessageManager;
import jalview.util.Platform;
+import jalview.ws.dbsources.EBIAlfaFold;
+import jalview.ws.dbsources.Pdb;
+import jalview.ws.utils.UrlDownloadClient;
import javajs.util.BS;
public class AppJmolBinding extends JalviewJmolBinding
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?)
+ Pdb pdbclient = new Pdb();
+ EBIAlfaFold afclient = new EBIAlfaFold();
+
+ for (int pi = 0; pi < getPdbCount(); pi++)
+ {
+ String file = 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;
+ PDBEntry strucEntry = getPdbEntry(pi);
+ pdbid = strucEntry.getId();
+ long hdl = pdbid.hashCode() - System.currentTimeMillis();
+ structureViewer.setProgressMessage(MessageManager
+ .formatMessage("status.fetching_pdb", new String[]
+ { pdbid }), hdl);
+ try
+ {
+ if (afclient.isValidReference(pdbid))
+ {
+ pdbseq = afclient.getSequenceRecords(pdbid);
+ } else {
+ if (strucEntry.hasRetrievalUrl())
+ {
+ File tmpFile = File.createTempFile(pdbid, ".cif");
+ String fromUrl = strucEntry.getRetrievalUrl();
+ UrlDownloadClient.download(fromUrl, tmpFile);
+
+ // may not need this check ?
+ file = tmpFile.getAbsolutePath();
+ if (file != null)
+ {
+ pdbseq = EBIAlfaFold.importDownloadedStructureFromUrl(fromUrl,tmpFile,pdbid,null,null,null);
+ }
+ } else {
+ 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
+ {
+ structureViewer.setProgressMessage(
+ 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();
+ getPdbEntry(pi).setFile(file);
+ 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;
+ }
+
}
{
alignAddedStructures = alignAdded;
}
+
+ /**
+ * called by the binding model to indicate when adding structures is happening or has been completed
+ * @param addingStructures
+ */
+ public synchronized void setAddingStructures(boolean addingStructures)
+ {
+ this.addingStructures = addingStructures;
+ }
/**
*
progressBar = pi;
}
- protected void setProgressMessage(String message, long id)
+ public void setProgressMessage(String message, long id)
{
if (progressBar != null)
{