X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureViewerBase.java;h=ae2128bdb016298204c15e708c9efc24caf1a844;hb=a226533413dd4db9fe0bbe6e58e934e9bad979d6;hp=e180f6b6c48509294779baf950678f62276ab2ff;hpb=4f30214e8098748469c6a4269ac2ed6c5750e4b0;p=jalview.git diff --git a/src/jalview/gui/StructureViewerBase.java b/src/jalview/gui/StructureViewerBase.java index e180f6b..ae2128b 100644 --- a/src/jalview/gui/StructureViewerBase.java +++ b/src/jalview/gui/StructureViewerBase.java @@ -61,8 +61,11 @@ import jalview.schemes.ColourSchemeI; import jalview.schemes.ColourSchemes; import jalview.structure.StructureMapping; import jalview.structures.models.AAStructureBindingModel; +import jalview.util.BrowserLauncher; import jalview.util.MessageManager; +import jalview.ws.dbsources.EBIAlfaFold; import jalview.ws.dbsources.Pdb; +import jalview.ws.utils.UrlDownloadClient; /** * Base class with common functionality for JMol, Chimera or other structure @@ -152,6 +155,15 @@ public abstract class StructureViewerBase extends GStructureViewer { 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; + } /** * @@ -209,6 +221,10 @@ public abstract class StructureViewerBase extends GStructureViewer _alignwith.add(ap); } ; + // TODO: refactor to allow concrete classes to register buttons for adding + // here + // currently have to override to add buttons back in after they are cleared + // in this loop for (Component c : viewerActionMenu.getMenuComponents()) { if (c != alignStructs) @@ -706,7 +722,7 @@ public abstract class StructureViewerBase extends GStructureViewer } else { - // update the Chimera display now. + // update the viewer display now. seqColour_actionPerformed(); } } @@ -756,6 +772,10 @@ public abstract class StructureViewerBase extends GStructureViewer } }); + viewerActionMenu.setText(getViewerName()); + helpItem.setText(MessageManager.formatMessage("label.viewer_help", + getViewerName())); + buildColourMenu(); } @@ -965,7 +985,7 @@ public abstract class StructureViewerBase extends GStructureViewer * enable 'Superpose with' if more than one mapped structure */ viewSelectionMenu.setEnabled(false); - if (getBinding().getStructureFiles().length > 1 + if (getBinding().getMappedStructureCount() > 1 && getBinding().getSequence().length > 1) { viewSelectionMenu.setEnabled(true); @@ -1071,7 +1091,7 @@ public abstract class StructureViewerBase extends GStructureViewer progressBar = pi; } - protected void setProgressMessage(String message, long id) + public void setProgressMessage(String message, long id) { if (progressBar != null) { @@ -1116,6 +1136,7 @@ public abstract class StructureViewerBase extends GStructureViewer { String filePath = null; Pdb pdbclient = new Pdb(); + EBIAlfaFold afclient = new EBIAlfaFold(); AlignmentI pdbseq = null; String pdbid = processingEntry.getId(); long handle = System.currentTimeMillis() @@ -1133,7 +1154,32 @@ public abstract class StructureViewerBase extends GStructureViewer // { pdbid })); try { - pdbseq = pdbclient.getSequenceRecords(pdbid); + if (afclient.isValidReference(pdbid)) + { + pdbseq = afclient.getSequenceRecords(pdbid,processingEntry.getRetrievalUrl()); + } else { + if (processingEntry.hasRetrievalUrl()) + { + String safePDBId = java.net.URLEncoder.encode(pdbid,"UTF-8"); + + // retrieve from URL to new local tmpfile + File tmpFile = File.createTempFile(safePDBId, + "." + (PDBEntry.Type.MMCIF.toString().equals( + processingEntry.getType().toString()) ? "cif" + : "pdb")); + String fromUrl = processingEntry.getRetrievalUrl(); + UrlDownloadClient.download(fromUrl, tmpFile); + + // may not need this check ? + String file = tmpFile.getAbsolutePath(); + if (file != null) + { + pdbseq = EBIAlfaFold.importDownloadedStructureFromUrl(fromUrl,tmpFile,pdbid,null,null,null); + } + } else { + pdbseq = pdbclient.getSequenceRecords(pdbid); + } + } } catch (Exception e) { System.err.println( @@ -1166,8 +1212,23 @@ public abstract class StructureViewerBase extends GStructureViewer */ public File saveSession() { - // TODO: a wait loop to ensure the file is written fully before returning? - return getBinding() == null ? null : getBinding().saveSession(); + if (getBinding() == null) { return null;} + File session = getBinding().saveSession(); + long l = session.length(); + int wait=50; + do { + try { + Thread.sleep(5); + } catch (InterruptedException e) { + } + long nextl = session.length(); + if (nextl!=l) + { + wait = 50; + l=nextl; + } + } while (--wait>0); + return session; } /** @@ -1204,6 +1265,9 @@ public abstract class StructureViewerBase extends GStructureViewer } forceClose = confirm == JvOptionPane.YES_OPTION; } + } + if (binding != null) + { binding.closeViewer(forceClose); } setAlignmentPanel(null); @@ -1216,4 +1280,28 @@ public abstract class StructureViewerBase extends GStructureViewer dispose(); } + @Override + public void showHelp_actionPerformed() + { + try + { + String url = getBinding().getHelpURL(); + if (url != null) + { + BrowserLauncher.openURL(url); + } + } catch (IOException ex) + { + System.err + .println("Show " + getViewerName() + " failed with: " + + ex.getMessage()); + } + } + @Override + public boolean hasViewerActionsMenu() + { + return viewerActionMenu != null && viewerActionMenu.isEnabled() + && viewerActionMenu.getItemCount() > 0 + && viewerActionMenu.isVisible(); + } }