X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FStructureChooser.java;h=9658a9200e0a5cab2db4255ccf8b4b50e66f8020;hb=37c507c5ed74c4b1564556a19d0bc651f8dccc2d;hp=b17aac9c87f49fc657549a05f90a22502953347b;hpb=a3fac343a7a385f8ec33a739ada884ebd0e170d8;p=jalview.git diff --git a/src/jalview/gui/StructureChooser.java b/src/jalview/gui/StructureChooser.java index b17aac9..9658a92 100644 --- a/src/jalview/gui/StructureChooser.java +++ b/src/jalview/gui/StructureChooser.java @@ -72,7 +72,6 @@ import jalview.gui.structurechooser.PDBStructureChooserQuerySource; import jalview.gui.structurechooser.StructureChooserQuerySource; import jalview.gui.structurechooser.ThreeDBStructureChooserQuerySource; import jalview.io.DataSourceType; -import jalview.io.FileFormatException; import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.jbgui.FilterOption; @@ -86,7 +85,6 @@ import jalview.util.StringUtils; import jalview.ws.DBRefFetcher; import jalview.ws.DBRefFetcher.FetchFinishedListenerI; import jalview.ws.datamodel.alphafold.PAEContactMatrix; -import jalview.ws.dbsources.EBIAlfaFold; import jalview.ws.seqfetcher.DbSourceProxy; import jalview.ws.sifts.SiftsSettings; @@ -143,6 +141,12 @@ public class StructureChooser extends GStructureChooser 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; public StructureChooser(SequenceI[] selectedSeqs, SequenceI selectedSeq, @@ -154,6 +158,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(); @@ -163,6 +174,7 @@ public class StructureChooser extends GStructureChooser this.selectedSequences = selectedSeqs; this.progressIndicator = (ap == null) ? null : ap.alignFrame; this.showChooserGUI = showGUI; + this.dontQueryServices = dontQueryServices; init(); } @@ -234,17 +246,24 @@ 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 @@ -509,7 +528,7 @@ public class StructureChooser extends GStructureChooser } } catch (Exception e) { - e.printStackTrace(); + Console.printStackTrace(e); errors.add(e.getMessage()); continue; } @@ -546,9 +565,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()); + } } } } @@ -609,7 +637,7 @@ public class StructureChooser extends GStructureChooser } catch (Exception e) { - e.printStackTrace(); + Console.debugPrintStackTrace(e); errors.add(e.getMessage()); continue; } @@ -986,8 +1014,14 @@ 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 @@ -1311,10 +1345,10 @@ public class StructureChooser extends GStructureChooser selectedSequence = userSelectedSeq; } String pdbFilename = selectedPdbFileName; - + // TODO - tidy up this ugly hack so we call launchStructureViewer too StructureChooser.openStructureFileForSequence(ssm, sc, ap, - selectedSequence, true, pdbFilename, tft, paeFilename, - true); + selectedSequence, true, pdbFilename, tft, paeFilename,false, + true,false,getTargetedStructureViewer(ssm).getViewerType()); } SwingUtilities.invokeLater(new Runnable() { @@ -1390,6 +1424,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 */ @@ -1526,7 +1566,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); @@ -1766,6 +1807,22 @@ public class StructureChooser extends GStructureChooser paeFilename, false, true, doXferSettings, null); } + /** + * + * @param ssm + * @param sc + * @param ap + * @param seq + * @param prompt + * @param sFilename + * @param tft + * @param paeFilename + * @param forceHeadless + * @param showRefAnnotations + * @param doXferSettings + * @param viewerType - when not null means the viewer will be opened, providing forceHeadless/headless is not true + * @return + */ public static StructureViewer openStructureFileForSequence( StructureSelectionManager ssm, StructureChooser sc, AlignmentPanel ap, SequenceI seq, boolean prompt, @@ -1779,13 +1836,16 @@ 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) { ssm = ap.getStructureSelectionManager(); + StructureSelectionManager.doConfigureStructurePrefs(ssm); } - + PDBEntry fileEntry = new AssociatePdbFileWithSeq().associatePdbWithSeq( sFilename, DataSourceType.FILE, seq, prompt, Desktop.instance, tft, paeFilename, doXferSettings); @@ -1797,12 +1857,17 @@ public class StructureChooser extends GStructureChooser sv = sc.launchStructureViewer(ssm, new PDBEntry[] { fileEntry }, ap, new SequenceI[] { seq }, viewerType); + // foo + sv.getJalviewStructureDisplay().raiseViewer(); } sc.mainFrame.dispose(); + // TODO should honor preferences - only show reference annotation that is requested - JAL-4415 JAL-3124 if (showRefAnnotations) + { showReferenceAnnotationsForSequence(ap.alignFrame, seq); + } return sv; }