Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / src / jalview / gui / StructureChooser.java
index cbf381a..0e834d4 100644 (file)
@@ -140,6 +140,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,
@@ -151,6 +157,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 +173,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 +245,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
@@ -506,7 +527,7 @@ public class StructureChooser extends GStructureChooser
         }
       } catch (Exception e)
       {
-        Console.debugPrintStackTrace(e);
+        Console.printStackTrace(e);
         errors.add(e.getMessage());
         continue;
       }
@@ -992,8 +1013,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
@@ -1317,10 +1344,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()
         {
@@ -1779,6 +1806,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,
@@ -1792,13 +1835,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);
@@ -1810,10 +1856,13 @@ 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);