import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
+import java.beans.PropertyVetoException;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import jalview.api.AlignmentViewPanel;
import jalview.bin.Cache;
+import jalview.bin.Console;
import jalview.datamodel.AlignmentI;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
public StructureViewerBase()
{
super();
+ setFrameIcon(null);
}
/**
{
alignAddedStructures = alignAdded;
}
-
+
/**
- * called by the binding model to indicate when adding structures is happening or has been completed
+ * called by the binding model to indicate when adding structures is happening
+ * or has been completed
+ *
* @param addingStructures
*/
public synchronized void setAddingStructures(boolean addingStructures)
_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)
{
return;
}
- AlignmentPanel alignPanel = (AlignmentPanel) apanel; // Implementation error if this
- // cast fails
+ AlignmentPanel alignPanel = (AlignmentPanel) apanel; // Implementation error
+ // if this
+ // cast fails
useAlignmentPanelForSuperposition(alignPanel);
addStructure(pdbentry, seq, chains, alignPanel.alignFrame);
}
public void changeColour_actionPerformed(String colourSchemeName)
{
AlignmentI al = getAlignmentPanel().av.getAlignment();
- ColourSchemeI cs = ColourSchemes.getInstance()
- .getColourScheme(colourSchemeName, getAlignmentPanel().av, al,
- null);
+ ColourSchemeI cs = ColourSchemes.getInstance().getColourScheme(
+ colourSchemeName, getAlignmentPanel().av, al, null);
getBinding().colourByJalviewColourScheme(cs);
}
{
sp.append("'" + alignPanel.getViewName() + "' ");
}
- Cache.log.info("Couldn't align structures with the " + sp.toString()
+ Console.info("Couldn't align structures with the " + sp.toString()
+ "associated alignment panels.", e);
}
return reply;
{
return false;
}
- int p=0;
- for (String pdbid:pdbids) {
+ int p = 0;
+ for (String pdbid : pdbids)
+ {
StructureMapping sm[] = getBinding().getSsm().getMapping(pdbid);
- if (sm!=null && sm.length>0 && sm[0]!=null) {
+ if (sm != null && sm.length > 0 && sm[0] != null)
+ {
p++;
}
}
- // only return true if there is a mapping for every structure file we have loaded
+ // only return true if there is a mapping for every structure file we have
+ // loaded
if (p == 0 || p != pdbids.length)
{
return false;
{
String filePath = null;
Pdb pdbclient = new Pdb();
- EBIAlfaFold afclient = new EBIAlfaFold();
+ EBIAlfaFold afclient = new EBIAlfaFold();
AlignmentI pdbseq = null;
String pdbid = processingEntry.getId();
long handle = System.currentTimeMillis()
+ Thread.currentThread().hashCode();
-
+
/*
* Write 'fetching PDB' progress on AlignFrame as we are not yet visible
*/
{
if (afclient.isValidReference(pdbid))
{
- pdbseq = afclient.getSequenceRecords(pdbid);
- } else {
- if (processingEntry.hasRetrievalUrl())
+ pdbseq = afclient.getSequenceRecords(pdbid,
+ processingEntry.getRetrievalUrl());
+ }
+ else
+ {
+ if (processingEntry.hasRetrievalUrl())
+ {
+ String safePDBId = java.net.URLEncoder.encode(pdbid, "UTF-8")
+ .replace("%", "__");
+
+ // 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)
{
- // retrieve from URL to new local tmpfile
- File tmpFile = File.createTempFile(pdbid,
- "." + (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);
+ pdbseq = EBIAlfaFold.importDownloadedStructureFromUrl(fromUrl,
+ tmpFile, pdbid, null, null, null);
}
+ }
+ else
+ {
+ pdbseq = pdbclient.getSequenceRecords(pdbid);
+ }
}
} catch (Exception e)
{
*/
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;
+ }
+
+ private static boolean quitClose = false;
+
+ public static void setQuitClose(boolean b)
+ {
+ quitClose = b;
+ }
+
+ @Override
+ public boolean stillRunning()
+ {
+ AAStructureBindingModel binding = getBinding();
+ return binding != null && binding.isViewerRunning();
}
/**
public void closeViewer(boolean forceClose)
{
AAStructureBindingModel binding = getBinding();
- if (binding != null && binding.isViewerRunning())
+ if (stillRunning())
{
if (!forceClose)
{
String viewerName = getViewerName();
- String prompt = MessageManager
- .formatMessage("label.confirm_close_viewer", new Object[]
- { binding.getViewerTitle(viewerName, false), viewerName });
- prompt = JvSwingUtils.wrapTooltip(true, prompt);
- int confirm = JvOptionPane.showConfirmDialog(this, prompt,
- MessageManager.getString("label.close_viewer"),
- JvOptionPane.YES_NO_CANCEL_OPTION);
+
+ int confirm = JvOptionPane.CANCEL_OPTION;
+ if (QuitHandler.quitting())
+ {
+ // already asked about closing external windows
+ confirm = quitClose ? JvOptionPane.YES_OPTION
+ : JvOptionPane.NO_OPTION;
+ }
+ else
+ {
+ String prompt = MessageManager
+ .formatMessage("label.confirm_close_viewer", new Object[]
+ { binding.getViewerTitle(viewerName, false),
+ viewerName });
+ prompt = JvSwingUtils.wrapTooltip(true, prompt);
+ String title = MessageManager.getString("label.close_viewer");
+ confirm = showCloseDialog(title, prompt);
+ }
+
/*
* abort closure if user hits escape or Cancel
*/
if (confirm == JvOptionPane.CANCEL_OPTION
|| confirm == JvOptionPane.CLOSED_OPTION)
{
+ // abort possible quit handling if CANCEL chosen
+ if (confirm == JvOptionPane.CANCEL_OPTION)
+ {
+ try
+ {
+ // this is a bit futile
+ this.setClosed(false);
+ } catch (PropertyVetoException e)
+ {
+ }
+ QuitHandler.abortQuit();
+ }
return;
}
forceClose = confirm == JvOptionPane.YES_OPTION;
dispose();
}
+ private int showCloseDialog(final String title, final String prompt)
+ {
+ int confirmResponse = JvOptionPane.CANCEL_OPTION;
+ confirmResponse = JvOptionPane.showConfirmDialog(this, prompt,
+ MessageManager.getString("label.close_viewer"),
+ JvOptionPane.YES_NO_CANCEL_OPTION,
+ JvOptionPane.WARNING_MESSAGE);
+ return confirmResponse;
+ }
+
@Override
public void showHelp_actionPerformed()
{
+ /*
try
{
- String url = getBinding().getHelpURL();
- if (url != null)
- {
- BrowserLauncher.openURL(url);
- }
- } catch (IOException ex)
+ */
+ 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();
+ return viewerActionMenu != null && viewerActionMenu.isEnabled()
+ && viewerActionMenu.getItemCount() > 0
+ && viewerActionMenu.isVisible();
}
+
}