X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAppJmolBinding.java;h=158bb545d6f2decfbf64a839b79a1ca7878ef044;hb=b7ff4a5c3445124a594a8239327624deeb981a6b;hp=98787cbb749edd01f9eb5e9859940ba57fa9146a;hpb=ca4ed63aacf92872319f2bf64225c2742c338184;p=jalview.git diff --git a/src/jalview/gui/AppJmolBinding.java b/src/jalview/gui/AppJmolBinding.java index 98787cb..158bb54 100644 --- a/src/jalview/gui/AppJmolBinding.java +++ b/src/jalview/gui/AppJmolBinding.java @@ -22,6 +22,7 @@ package jalview.gui; import java.awt.Container; import java.io.File; +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -32,12 +33,14 @@ import org.openscience.jmol.app.jmolpanel.console.AppConsole; import jalview.api.AlignmentViewPanel; import jalview.api.structures.JalviewStructureDisplayI; -import jalview.bin.Cache; +import jalview.bin.Console; +import jalview.bin.Jalview; 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 javajs.util.BS; @@ -85,7 +88,7 @@ public class AppJmolBinding extends JalviewJmolBinding jalview.util.BrowserLauncher.openURL(url); } catch (Exception e) { - Cache.log.error("Failed to launch Jmol-associated url " + url, e); + Console.error("Failed to launch Jmol-associated url " + url, e); // TODO: 2.6 : warn user if browser was not configured. } } @@ -150,7 +153,7 @@ public class AppJmolBinding extends JalviewJmolBinding { jmolViewer.setJmolCallbackListener(this); // BH comment: can't do this yet [for JS only, or generally?] - return Platform.isJS() ? null + return Platform.isJS() || Jalview.isHeadlessMode() ? null : new AppConsole(jmolViewer, consolePanel, buttonsToShow); } @@ -189,4 +192,102 @@ 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 fetchPdbFiles(StructureViewerBase structureViewer) + { + // todo - record which pdbids were successfully imported. + StringBuilder errormsgs = new StringBuilder(); + + List 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; + } + }