JAL-4034 showConfirmDialog works for both desktop and jalviewjs
[jalview.git] / src / jalview / gui / StructureChooser.java
index 5ea68fb..9ff181b 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();
@@ -339,6 +345,7 @@ public class StructureChooser extends GStructureChooser
     };
     final Runnable revertview = new Runnable()
     {
+      @Override
       public void run()
       {
         if (lastSelected != null)
@@ -347,29 +354,36 @@ public class StructureChooser extends GStructureChooser
         }
       };
     };
-    if (ignoreGui)
+    int threshold = Cache.getDefault("THRESHOLD_WARN_UNIPROT_FETCH",
+            THRESHOLD_WARN_UNIPROT_FETCH_NEEDED);
+    Console.debug("Using Uniprot fetch threshold of " + threshold);
+    boolean runThread = false;
+    if (ignoreGui || seqsWithoutSourceDBRef.size() < threshold)
+    {
+      runThread = true;
+    }
+    // need cancel and no to result in the discoverPDB action - mocked is
+    // 'cancel' TODO: mock should be OK
+    if (!runThread)
+    {
+      int answer = JvOptionPane.showConfirmDialog(this,
+              MessageManager.formatMessage(
+                      "label.fetch_references_for_3dbeacons",
+                      seqsWithoutSourceDBRef.size()),
+              MessageManager.getString("label.3dbeacons"),
+              JvOptionPane.YES_NO_OPTION, JvOptionPane.PLAIN_MESSAGE);
+      runThread = (answer == JvOptionPane.OK_OPTION);
+    }
+    if (runThread)
     {
       Executors.defaultThreadFactory().newThread(discoverCanonicalDBrefs)
               .start();
       return;
     }
-    // need cancel and no to result in the discoverPDB action - mocked is
-    // 'cancel' TODO: mock should be OK
-    JvOptionPane.newOptionDialog(this)
-            .setResponseHandler(JvOptionPane.OK_OPTION,
-                    discoverCanonicalDBrefs)
-            .setResponseHandler(JvOptionPane.CANCEL_OPTION, revertview)
-            .setResponseHandler(JvOptionPane.NO_OPTION, revertview)
-            .showDialog(
-                    MessageManager.formatMessage(
-                            "label.fetch_references_for_3dbeacons",
-                            seqsWithoutSourceDBRef.size()),
-                    MessageManager.getString("label.3dbeacons"),
-                    JvOptionPane.YES_NO_OPTION, JvOptionPane.PLAIN_MESSAGE,
-                    null, new Object[]
-                    { MessageManager.getString("action.ok"),
-                        MessageManager.getString("action.cancel") },
-                    MessageManager.getString("action.ok"));
+    else
+    {
+      revertview.run();
+    }
   }
 
   /**
@@ -866,6 +880,7 @@ public class StructureChooser extends GStructureChooser
       popup.add(viewUrl);
       SwingUtilities.invokeLater(new Runnable()
       {
+        @Override
         public void run()
         {
           popup.show(getResultTable(), x, y);