JAL-3829 generalised Alphafold retrieval mechanism to be reused for PDBEntrys with...
[jalview.git] / src / jalview / gui / AppJmol.java
index d085117..9280caa 100644 (file)
@@ -43,6 +43,7 @@ import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.StructureViewerModel;
 import jalview.datamodel.StructureViewerModel.StructureData;
+import jalview.fts.service.alphafold.AlphafoldRestClient;
 import jalview.gui.ImageExporter.ImageWriterI;
 import jalview.gui.StructureViewer.ViewerType;
 import jalview.structure.StructureCommand;
@@ -53,6 +54,7 @@ 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
 {
@@ -448,7 +450,8 @@ public class AppJmol extends StructureViewerBase
           // 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();
+          PDBEntry strucEntry = jmb.getPdbEntry(pi);
+          pdbid = strucEntry.getId();
           long hdl = pdbid.hashCode() - System.currentTimeMillis();
           setProgressMessage(MessageManager
                   .formatMessage("status.fetching_pdb", new String[]
@@ -459,7 +462,21 @@ public class AppJmol extends StructureViewerBase
             {
               pdbseq = afclient.getSequenceRecords(pdbid);
             } else {
-              pdbseq = pdbclient.getSequenceRecords(pdbid);
+              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)
           {