Merge branch 'develop' into releases/Release_2_11_2_Branch
[jalview.git] / src / jalview / gui / StructureChooser.java
index af5f8a4..07eec2b 100644 (file)
@@ -35,7 +35,6 @@ import java.util.concurrent.Executors;
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
-import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 import javax.swing.JTable;
@@ -44,6 +43,7 @@ import javax.swing.table.AbstractTableModel;
 
 import jalview.api.structures.JalviewStructureDisplayI;
 import jalview.bin.Cache;
+import jalview.bin.Console;
 import jalview.bin.Jalview;
 import jalview.datamodel.PDBEntry;
 import jalview.datamodel.SequenceI;
@@ -81,6 +81,11 @@ public class StructureChooser extends GStructureChooser
 {
   private static final String AUTOSUPERIMPOSE = "AUTOSUPERIMPOSE";
 
+  /**
+   * warn user if need to fetch more than this many uniprot records at once
+   */
+  private static final int THRESHOLD_WARN_UNIPROT_FETCH_NEEDED = 20;
+
   private SequenceI selectedSequence;
 
   private SequenceI[] selectedSequences;
@@ -197,6 +202,7 @@ public class StructureChooser extends GStructureChooser
 
     Executors.defaultThreadFactory().newThread(new Runnable()
     {
+      @Override
       public void run()
       {
         populateSeqsWithoutSourceDBRef();
@@ -263,6 +269,7 @@ public class StructureChooser extends GStructureChooser
         progressBar.setProgressBar(
                 MessageManager.getString("status.searching_3d_beacons"),
                 progressId);
+        btn_queryTDB.setEnabled(false);
         // TODO: warn if no accessions discovered
         populateSeqsWithoutSourceDBRef();
         // redo initial discovery - this time with 3d beacons
@@ -280,11 +287,13 @@ public class StructureChooser extends GStructureChooser
           btn_queryTDB.setToolTipText(MessageManager.getString(
                   "status.no_structures_discovered_from_3d_beacons"));
           btn_queryTDB.setEnabled(false);
+          pnl_queryTDB.setVisible(false);
         }
         else
         {
           cmb_filterOption.setSelectedIndex(0); // select 'best'
           btn_queryTDB.setVisible(false);
+          pnl_queryTDB.setVisible(false);
           progressBar.setProgressBar(null, progressId);
         }
         mainFrame.setEnabled(true);
@@ -312,6 +321,7 @@ public class StructureChooser extends GStructureChooser
       @Override
       public void run()
       {
+        btn_queryTDB.setEnabled(false);
         populateSeqsWithoutSourceDBRef();
 
         final int y = seqsWithoutSourceDBRef.size();
@@ -324,6 +334,7 @@ public class StructureChooser extends GStructureChooser
                   { new jalview.ws.dbsources.Uniprot() }, null, false);
           dbRefFetcher.addListener(afterDbRefFetch);
           // ideally this would also gracefully run with callbacks
+
           dbRefFetcher.fetchDBRefs(true);
         }
         else
@@ -336,6 +347,7 @@ public class StructureChooser extends GStructureChooser
     };
     final Runnable revertview = new Runnable()
     {
+      @Override
       public void run()
       {
         if (lastSelected != null)
@@ -344,7 +356,10 @@ public class StructureChooser extends GStructureChooser
         }
       };
     };
-    if (ignoreGui)
+    int threshold = Cache.getDefault("UNIPROT_AUTOFETCH_THRESHOLD",
+            THRESHOLD_WARN_UNIPROT_FETCH_NEEDED);
+    Console.debug("Using Uniprot fetch threshold of " + threshold);
+    if (ignoreGui || seqsWithoutSourceDBRef.size() < threshold)
     {
       Executors.defaultThreadFactory().newThread(discoverCanonicalDBrefs)
               .start();
@@ -352,7 +367,9 @@ public class StructureChooser extends GStructureChooser
     }
     // need cancel and no to result in the discoverPDB action - mocked is
     // 'cancel' TODO: mock should be OK
-    JvOptionPane.newOptionDialog(this)
+
+    StructureChooser thisSC = this;
+    JvOptionPane.newOptionDialog(thisSC.getFrame())
             .setResponseHandler(JvOptionPane.OK_OPTION,
                     discoverCanonicalDBrefs)
             .setResponseHandler(JvOptionPane.CANCEL_OPTION, revertview)
@@ -366,7 +383,7 @@ public class StructureChooser extends GStructureChooser
                     null, new Object[]
                     { MessageManager.getString("action.ok"),
                         MessageManager.getString("action.cancel") },
-                    MessageManager.getString("action.ok"));
+                    MessageManager.getString("action.ok"), false);
   }
 
   /**
@@ -707,6 +724,7 @@ public class StructureChooser extends GStructureChooser
     if (canQueryTDB && notQueriedTDBYet)
     {
       btn_queryTDB.setVisible(true);
+      pnl_queryTDB.setVisible(true);
     }
 
     if (cachedPDBExist)
@@ -862,6 +880,7 @@ public class StructureChooser extends GStructureChooser
       popup.add(viewUrl);
       SwingUtilities.invokeLater(new Runnable()
       {
+        @Override
         public void run()
         {
           popup.show(getResultTable(), x, y);
@@ -1372,6 +1391,7 @@ public class StructureChooser extends GStructureChooser
   {
     if (selectedSequences != null)
     {
+      lbl_loading.setVisible(true);
       Thread refreshThread = new Thread(new Runnable()
       {
         @Override
@@ -1383,6 +1403,7 @@ public class StructureChooser extends GStructureChooser
           filterResultSet(
                   ((FilterOption) cmb_filterOption.getSelectedItem())
                           .getValue());
+          lbl_loading.setVisible(false);
         }
       });
       refreshThread.start();