X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureChooser.java;h=813501901bb41c4b0ac038452cf0505eaf97bee8;hb=7fa567506eea0a202c71e6939b961962f515dcec;hp=790873f11244caaa6af6e4f628f95304b600b7d3;hpb=173c541c3bdef7cee4f72a76cc8e23e8902a8614;p=jalview.git diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index 790873f..8135019 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -33,7 +33,6 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.concurrent.Callable; import java.util.concurrent.Executors; import javax.swing.JCheckBox; @@ -84,6 +83,7 @@ import jalview.util.Platform; import jalview.util.StringUtils; import jalview.ws.DBRefFetcher; import jalview.ws.DBRefFetcher.FetchFinishedListenerI; +import jalview.ws.datamodel.alphafold.PAEContactMatrix; import jalview.ws.seqfetcher.DbSourceProxy; import jalview.ws.sifts.SiftsSettings; @@ -139,6 +139,10 @@ public class StructureChooser extends GStructureChooser List seqsWithoutSourceDBRef = null; private boolean showChooserGUI = true; + /** + * when true, queries to external services are supressed (no SIFTs, no PDBe, no 3D-Beacons, etc) + */ + private boolean dontQueryServices = false; private static StructureViewer lastTargetedView = null; @@ -151,6 +155,13 @@ public class StructureChooser extends GStructureChooser public StructureChooser(SequenceI[] selectedSeqs, SequenceI selectedSeq, AlignmentPanel ap, boolean showGUI) { + this(selectedSeqs, selectedSeq, ap, showGUI, false); + } + + public StructureChooser(SequenceI[] selectedSeqs, SequenceI selectedSeq, + AlignmentPanel ap, boolean showGUI, boolean dontQueryServices) + { + // which FTS engine to use data = StructureChooserQuerySource.getQuerySourceFor(selectedSeqs); initDialog(); @@ -160,6 +171,7 @@ public class StructureChooser extends GStructureChooser this.selectedSequences = selectedSeqs; this.progressIndicator = (ap == null) ? null : ap.alignFrame; this.showChooserGUI = showGUI; + this.dontQueryServices = dontQueryServices; init(); } @@ -231,17 +243,21 @@ public class StructureChooser extends GStructureChooser } }); - Executors.defaultThreadFactory().newThread(new Runnable() + if (!dontQueryServices) { - @Override - public void run() + Executors.defaultThreadFactory().newThread(new Runnable() { - populateSeqsWithoutSourceDBRef(); - initialStructureDiscovery(); - } - - }).start(); + @Override + public void run() + { + populateSeqsWithoutSourceDBRef(); + initialStructureDiscovery(); + } + }).start(); + } else { + Console.debug("Structure chooser not querying services to discover metadata."); + } } // called by init @@ -347,7 +363,7 @@ public class StructureChooser extends GStructureChooser }; // fetch db refs if OK pressed - final Callable discoverCanonicalDBrefs = () -> { + final Runnable discoverCanonicalDBrefs = () -> { btn_queryTDB.setEnabled(false); populateSeqsWithoutSourceDBRef(); @@ -369,14 +385,12 @@ public class StructureChooser extends GStructureChooser // call finished action directly afterDbRefFetch.finished(); } - return null; }; - final Callable revertview = () -> { + final Runnable revertview = () -> { if (lastSelected != null) { cmb_filterOption.setSelectedItem(lastSelected); } - return null; }; int threshold = Cache.getDefault("UNIPROT_AUTOFETCH_THRESHOLD", THRESHOLD_WARN_UNIPROT_FETCH_NEEDED); @@ -508,7 +522,7 @@ public class StructureChooser extends GStructureChooser } } catch (Exception e) { - e.printStackTrace(); + Console.printStackTrace(e); errors.add(e.getMessage()); continue; } @@ -545,9 +559,18 @@ public class StructureChooser extends GStructureChooser { errorMsg.append(error).append("\n"); } - JvOptionPane.showMessageDialog(this, errorMsg.toString(), - MessageManager.getString("label.pdb_web-service_error"), - JvOptionPane.ERROR_MESSAGE); + if (!Jalview.isHeadlessMode()) + { + JvOptionPane.showMessageDialog(this, errorMsg.toString(), + MessageManager.getString("label.pdb_web-service_error"), + JvOptionPane.ERROR_MESSAGE); + } + else + { + Console.error( + MessageManager.getString("label.pdb_web-service_error")); + Console.debug(errorMsg.toString()); + } } } } @@ -608,7 +631,7 @@ public class StructureChooser extends GStructureChooser } catch (Exception e) { - e.printStackTrace(); + Console.debugPrintStackTrace(e); errors.add(e.getMessage()); continue; } @@ -707,7 +730,7 @@ public class StructureChooser extends GStructureChooser } /** - * Handles action event for btn_pdbFromFile + * Handles action event for btn_paeMatrixFile */ @Override protected void paeMatrixFile_actionPerformed() @@ -736,10 +759,26 @@ public class StructureChooser extends GStructureChooser "label.load_pae_matrix_file_associate_with_structure", pdbFile.getName())); + // TODO convert to Callable/Promise int value = chooser.showOpenDialog(null); if (value == JalviewFileChooser.APPROVE_OPTION) { - localPdbPaeMatrixFileName = chooser.getSelectedFile().getPath(); + String fileName = chooser.getSelectedFile().getPath(); + try + { + PAEContactMatrix.validateContactMatrixFile(fileName); + } catch (Exception thr) + { + JvOptionPane.showInternalMessageDialog(this, MessageManager + .formatMessage("label.couldnt_load_file", new Object[] + { fileName }) + "
" + thr.getLocalizedMessage(), + MessageManager.getString("label.error_loading_file"), + JvOptionPane.WARNING_MESSAGE); + Console.error("Couldn't import " + fileName + " as a PAE matrix", + thr); + return; + } + localPdbPaeMatrixFileName = fileName; Cache.setProperty("LAST_DIRECTORY", localPdbPaeMatrixFileName); } validateAssociationFromFile(); @@ -969,8 +1008,13 @@ public class StructureChooser extends GStructureChooser .getFTSDataFor(getResultTable(), selectedRow, discoveredStructuresSet); String pageUrl = row.getModelViewUrl(); + JPopupMenu popup = new JPopupMenu("3D Beacons"); JMenuItem viewUrl = new JMenuItem("View model web page"); + if (pageUrl == null || "".equals(pageUrl.trim())) { + viewUrl.setEnabled(false); + viewUrl.setText("No model page available."); + } viewUrl.addActionListener(new ActionListener() { @Override @@ -1061,11 +1105,13 @@ public class StructureChooser extends GStructureChooser { pdbFileString = MessageManager.getString("label.none"); pdbFileTooltip = MessageManager.getString("label.nothing_selected"); + setPdbOptionsEnabled(false); } } else { btn_pdbFromFile.setEnabled(false); + setPdbOptionsEnabled(false); // lbl_fromFileStatus.setIcon(errorImage); pdbFileString = MessageManager.getString("label.none"); pdbFileTooltip = MessageManager.getString("label.nothing_selected"); @@ -1190,7 +1236,14 @@ public class StructureChooser extends GStructureChooser final StructureSelectionManager ssm = ap.getStructureSelectionManager(); final int preferredHeight = pnl_filter.getHeight(); + btn_add.setEnabled(false); + btn_newView.setEnabled(false); + btn_cancel.setEnabled(false); + actionsPanel.setEnabled(false); + final String progress = MessageManager + .getString("label.working_ellipsis"); + setProgressBar(progress, progress.hashCode()); Runnable viewStruc = new Runnable() { @Override @@ -1281,7 +1334,9 @@ public class StructureChooser extends GStructureChooser .getCmb_assSeq().getSelectedItem(); SequenceI userSelectedSeq = assSeqOpt.getSequence(); if (userSelectedSeq != null) + { selectedSequence = userSelectedSeq; + } String pdbFilename = selectedPdbFileName; StructureChooser.openStructureFileForSequence(ssm, sc, ap, @@ -1293,6 +1348,7 @@ public class StructureChooser extends GStructureChooser @Override public void run() { + setProgressBar("Complete.", progress.hashCode()); closeAction(preferredHeight); mainFrame.dispose(); } @@ -1361,6 +1417,12 @@ public class StructureChooser extends GStructureChooser boolean superimpose = chk_superpose.isSelected(); theViewer.setSuperpose(superimpose); + // if we're running in --headless mode make this viewer synchronous + if (Jalview.isHeadlessMode()) + { + theViewer.setAsync(false); + } + /* * remember user's choice of superimpose or not */ @@ -1497,7 +1559,8 @@ public class StructureChooser extends GStructureChooser // for moment, it will work fine as is because it is self-contained String searchTerm = text.toLowerCase(Locale.ROOT); searchTerm = searchTerm.split(":")[0]; - // System.out.println(">>>>> search term : " + searchTerm); + // jalview.bin.Console.outPrintln(">>>>> search term : " + + // searchTerm); List wantedFields = new ArrayList<>(); FTSRestRequest pdbRequest = new FTSRestRequest(); pdbRequest.setAllowEmptySeq(false); @@ -1669,20 +1732,21 @@ public class StructureChooser extends GStructureChooser @Override public void setProgressBar(String message, long id) { - if (!Platform.isHeadless()) + if (!Platform.isHeadless() && progressBar != null) progressBar.setProgressBar(message, id); } @Override public void registerHandler(long id, IProgressIndicatorHandler handler) { - progressBar.registerHandler(id, handler); + if (progressBar != null) + progressBar.registerHandler(id, handler); } @Override public boolean operationInProgress() { - return progressBar.operationInProgress(); + return progressBar == null ? false : progressBar.operationInProgress(); } public JalviewStructureDisplayI getOpenedStructureViewer() @@ -1749,7 +1813,8 @@ public class StructureChooser extends GStructureChooser { // headless = true; prompt = false; - sc = new StructureChooser(new SequenceI[] { seq }, seq, ap, false); + // suppress structure viewer's external service queries + sc = new StructureChooser(new SequenceI[] { seq }, seq, ap, false,true); } if (ssm == null) { @@ -1769,11 +1834,12 @@ public class StructureChooser extends GStructureChooser { seq }, viewerType); } - if (headless) - sc.mainFrame.dispose(); + sc.mainFrame.dispose(); if (showRefAnnotations) + { showReferenceAnnotationsForSequence(ap.alignFrame, seq); + } return sv; }