JAL-3066 Fix NullPointerException thrown when showing HMMER run dialog
[jalview.git] / src / jalview / gui / WsJobParameters.java
index 8377a16..c1a925d 100644 (file)
@@ -23,10 +23,7 @@ package jalview.gui;
 import jalview.gui.OptsAndParamsPage.OptionBox;
 import jalview.gui.OptsAndParamsPage.ParamBox;
 import jalview.util.MessageManager;
-import jalview.ws.jws2.JabaParamStore;
-import jalview.ws.jws2.JabaPreset;
-import jalview.ws.jws2.Jws2Discoverer;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
+import jalview.ws.api.UIinfo;
 import jalview.ws.params.ArgumentI;
 import jalview.ws.params.OptionI;
 import jalview.ws.params.ParamDatastoreI;
@@ -48,12 +45,11 @@ import java.awt.event.HierarchyBoundsListener;
 import java.awt.event.HierarchyEvent;
 import java.awt.event.ItemEvent;
 import java.awt.event.ItemListener;
-import java.awt.event.WindowEvent;
-import java.awt.event.WindowListener;
 import java.util.Hashtable;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Vector;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
 
 import javax.swing.JButton;
 import javax.swing.JComboBox;
@@ -63,15 +59,11 @@ import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
+import javax.swing.WindowConstants;
 import javax.swing.border.TitledBorder;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
 
-import compbio.metadata.Argument;
-import compbio.metadata.Option;
-import compbio.metadata.Parameter;
-import compbio.metadata.Preset;
-import compbio.metadata.PresetManager;
 import net.miginfocom.swing.MigLayout;
 
 /**
@@ -103,8 +95,13 @@ public class WsJobParameters extends JPanel implements ItemListener,
 
   // URL linkImageURL = getClass().getResource("/images/link.gif");
 
-  /*
-   * controller for options and parameters layout
+  // TODO ABSRACT FROM JABAWS CLASSES
+
+  // completion stage representing whether start was clicked
+  private final CompletableFuture<Boolean> completionStage = new CompletableFuture<>();
+  
+  /**
+   * manager for options and parameters.
    */
   OptsAndParamsPage opanp;
 
@@ -133,15 +130,24 @@ public class WsJobParameters extends JPanel implements ItemListener,
   JTextArea setDescr = new JTextArea();
 
   JScrollPane paramPane = new JScrollPane();
+  
+  JButton startjob = JvSwingUtils.makeButton(
+          MessageManager.getString("action.start_job"),
+          MessageManager.getString("label.start_job_current_settings"),
+          this::startjob_actionPerformed);
+  JButton canceljob = JvSwingUtils.makeButton(
+          MessageManager.getString("action.cancel_job"),
+          MessageManager.getString("label.cancel_job_close_dialog"),
+          this::canceljob_actionPerformed);
 
   ParamDatastoreI paramStore;
 
   // set true when 'Start Job' is clicked
   boolean startJob = false;
 
-  JDialog frame = null;
+  JFrame frame = null;
 
-  Jws2Instance service;
+  UIinfo service;
 
   /*
    * list of service presets in the gui
@@ -180,8 +186,8 @@ public class WsJobParameters extends JPanel implements ItemListener,
    * @param preset
    * @param jobArgset
    */
-  public WsJobParameters(ParamDatastoreI paramStorei, Jws2Instance service,
-          WsParamSetI preset, List<Argument> jobArgset)
+  public WsJobParameters(ParamDatastoreI paramStorei, UIinfo service,
+          WsParamSetI preset, List<ArgumentI> jobArgset)
   {
     super();
 
@@ -205,18 +211,16 @@ public class WsJobParameters extends JPanel implements ItemListener,
    * 
    * @return
    */
-  public boolean showRunDialog()
+  public CompletionStage<Boolean> showRunDialog()
   {
-
-    frame = new JDialog(Desktop.instance, true);
+    frame = new JFrame();
+    frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
     if (service != null)
     {
       frame.setTitle(MessageManager.formatMessage("label.edit_params_for",
-              new String[]
-      { service.getActionText() }));
+              new String[] { service.getActionText() }));
     }
-
-    Rectangle deskr = Desktop.instance.getBounds();
+    Rectangle deskr = Desktop.getInstance().getBounds();
     Dimension pref = this.getPreferredSize();
     frame.setBounds(
             new Rectangle((int) (deskr.getCenterX() - pref.width / 2),
@@ -236,9 +240,9 @@ public class WsJobParameters extends JPanel implements ItemListener,
 
       }
     });
+    
     frame.setVisible(true);
-
-    return startJob;
+    return completionStage;
   }
 
   private void jbInit()
@@ -262,75 +266,21 @@ public class WsJobParameters extends JPanel implements ItemListener,
     updatepref = JvSwingUtils.makeButton(
             MessageManager.getString("action.update"),
             MessageManager.getString("label.update_user_parameter_set"),
-            new ActionListener()
-            {
-
-              @Override
-              public void actionPerformed(ActionEvent e)
-              {
-                update_actionPerformed();
-              }
-            });
+            this::update_actionPerformed);
     deletepref = JvSwingUtils.makeButton(
             MessageManager.getString("action.delete"),
             MessageManager.getString("label.delete_user_parameter_set"),
-            new ActionListener()
-            {
-
-              @Override
-              public void actionPerformed(ActionEvent e)
-              {
-                delete_actionPerformed();
-              }
-            });
+            this::delete_actionPerformed);
     createpref = JvSwingUtils.makeButton(
             MessageManager.getString("action.create"),
             MessageManager.getString("label.create_user_parameter_set"),
-            new ActionListener()
-            {
-
-              @Override
-              public void actionPerformed(ActionEvent e)
-              {
-                create_actionPerformed();
-              }
-            });
+            this::create_actionPerformed);
     revertpref = JvSwingUtils.makeButton(
             MessageManager.getString("action.revert"),
             MessageManager
                     .getString("label.revert_changes_user_parameter_set"),
-            new ActionListener()
-            {
+            this::revert_actionPerformed);
 
-              @Override
-              public void actionPerformed(ActionEvent e)
-              {
-                revert_actionPerformed();
-              }
-            });
-
-    JButton startjob = JvSwingUtils.makeButton(
-            MessageManager.getString("action.start_job"),
-            MessageManager.getString("label.start_job_current_settings"),
-            new ActionListener()
-            {
-              @Override
-              public void actionPerformed(ActionEvent e)
-              {
-                startjob_actionPerformed();
-              }
-            });
-    JButton canceljob = JvSwingUtils.makeButton(
-            MessageManager.getString("action.cancel_job"),
-            MessageManager.getString("label.cancel_job_close_dialog"),
-            new ActionListener()
-            {
-              @Override
-              public void actionPerformed(ActionEvent e)
-              {
-                canceljob_actionPerformed();
-              }
-            });
 
     JPanel setDetails = new JPanel();
     setDetails.setBorder(
@@ -425,20 +375,20 @@ public class WsJobParameters extends JPanel implements ItemListener,
     dialogpanel.add(canceljob);
     // JAL-1580: setMaximumSize() doesn't work, so just size for the worst case:
     // check for null is for JUnit usage
-    final int windowHeight = Desktop.instance == null ? DEFAULT_HEIGHT
-            : Desktop.instance.getHeight();
-    // setPreferredSize(new Dimension(PREFERRED_WIDTH, windowHeight));
+    final int windowHeight = Desktop.getInstance() == null ? DEFAULT_HEIGHT
+            : Desktop.getInstance().getHeight();
+    setPreferredSize(new Dimension(540, windowHeight));
     add(dialogpanel, BorderLayout.SOUTH);
     validate();
   }
 
-  protected void revert_actionPerformed()
+  protected void revert_actionPerformed(ActionEvent e)
   {
     reInitDialog(lastParmSet);
     updateWebServiceMenus();
   }
 
-  protected void update_actionPerformed()
+  protected void update_actionPerformed(ActionEvent e)
   {
     if (isUserPreset)
     {
@@ -456,7 +406,7 @@ public class WsJobParameters extends JPanel implements ItemListener,
     paramStore.deletePreset(lastParmSet2);
   }
 
-  protected void delete_actionPerformed()
+  protected void delete_actionPerformed(ActionEvent e)
   {
     if (isUserPreset)
     {
@@ -467,7 +417,7 @@ public class WsJobParameters extends JPanel implements ItemListener,
     updateWebServiceMenus();
   }
 
-  protected void create_actionPerformed()
+  protected void create_actionPerformed(ActionEvent e)
   {
     String curname = ((String) setName.getSelectedItem()).trim();
     if (curname.length() > 0)
@@ -486,37 +436,31 @@ public class WsJobParameters extends JPanel implements ItemListener,
     }
   }
 
-  protected void canceljob_actionPerformed()
+  protected void canceljob_actionPerformed(ActionEvent e)
   {
     startJob = false;
     if (frame != null)
     {
       frame.setVisible(false);
     }
+    completionStage.complete(false);
   }
 
-  protected void startjob_actionPerformed()
+  protected void startjob_actionPerformed(ActionEvent e)
   {
     startJob = true;
     if (frame != null)
     {
       frame.setVisible(false);
     }
+    completionStage.complete(true);
   }
 
-  void initForService(WsParamSetI jabap, List<Argument> jabajobArgset)
+  void initForService(WsParamSetI paramSet, List<ArgumentI> jobArgset)
   {
-    WsParamSetI p = null;
-    List<ArgumentI> jobArgset = null;
     settingDialog = true;
-    { // instantiate the abstract proxy for Jaba objects
-      jobArgset = jabajobArgset == null ? null
-              : JabaParamStore.getJwsArgsfromJaba(jabajobArgset);
-      p = jabap; // (jabap != null) ? paramStore.getPreset(jabap.getName()) :
-                 // null;
-    }
 
-    init(p, jobArgset);
+    init(paramSet, jobArgset);
 
   }
 
@@ -924,244 +868,6 @@ public class WsJobParameters extends JPanel implements ItemListener,
     paramPane.revalidate();
     revalidate();
   }
-
-  /**
-   * testing method - grab a service and parameter set and show the window
-   * 
-   * @param args
-   */
-  public static void main(String[] args)
-  {
-    jalview.ws.jws2.Jws2Discoverer disc = jalview.ws.jws2.Jws2Discoverer
-            .getDiscoverer();
-    int p = 0;
-    if (args.length > 0)
-    {
-      Vector<String> services = new Vector<>();
-      services.addElement(args[p++]);
-      Jws2Discoverer.getDiscoverer().setServiceUrls(services);
-    }
-    try
-    {
-      disc.run();
-    } catch (Exception e)
-    {
-      System.err.println("Aborting. Problem discovering services.");
-      e.printStackTrace();
-      return;
-    }
-    Jws2Instance lastserv = null;
-    for (Jws2Instance service : disc.getServices())
-    {
-      lastserv = service;
-      if (p >= args.length || service.serviceType.equalsIgnoreCase(args[p]))
-      {
-        if (lastserv != null)
-        {
-          List<Preset> prl = null;
-          Preset pr = null;
-          if (++p < args.length)
-          {
-            PresetManager prman = lastserv.getPresets();
-            if (prman != null)
-            {
-              pr = prman.getPresetByName(args[p]);
-              if (pr == null)
-              {
-                // just grab the last preset.
-                prl = prman.getPresets();
-              }
-            }
-          }
-          else
-          {
-            PresetManager prman = lastserv.getPresets();
-            if (prman != null)
-            {
-              prl = prman.getPresets();
-            }
-          }
-          Iterator<Preset> en = (prl == null) ? null : prl.iterator();
-          while (en != null && en.hasNext())
-          {
-            if (en != null)
-            {
-              if (!en.hasNext())
-              {
-                en = prl.iterator();
-              }
-              pr = en.next();
-            }
-            {
-              System.out.println("Testing opts dupes for "
-                      + lastserv.getUri() + " : " + lastserv.getActionText()
-                      + ":" + pr.getName());
-              List<Option> rg = lastserv.getRunnerConfig().getOptions();
-              for (Option o : rg)
-              {
-                try
-                {
-                  Option cpy = jalview.ws.jws2.ParameterUtils.copyOption(o);
-                } catch (Exception e)
-                {
-                  System.err.println("Failed to copy " + o.getName());
-                  e.printStackTrace();
-                } catch (Error e)
-                {
-                  System.err.println("Failed to copy " + o.getName());
-                  e.printStackTrace();
-                }
-              }
-            }
-            {
-              System.out.println("Testing param dupes:");
-              List<Parameter> rg = lastserv.getRunnerConfig()
-                      .getParameters();
-              for (Parameter o : rg)
-              {
-                try
-                {
-                  Parameter cpy = jalview.ws.jws2.ParameterUtils
-                          .copyParameter(o);
-                } catch (Exception e)
-                {
-                  System.err.println("Failed to copy " + o.getName());
-                  e.printStackTrace();
-                } catch (Error e)
-                {
-                  System.err.println("Failed to copy " + o.getName());
-                  e.printStackTrace();
-                }
-              }
-            }
-            {
-              System.out.println("Testing param write:");
-              List<String> writeparam = null, readparam = null;
-              try
-              {
-                writeparam = jalview.ws.jws2.ParameterUtils
-                        .writeParameterSet(
-                                pr.getArguments(lastserv.getRunnerConfig()),
-                                " ");
-                System.out.println("Testing param read :");
-                List<Option> pset = jalview.ws.jws2.ParameterUtils
-                        .processParameters(writeparam,
-                                lastserv.getRunnerConfig(), " ");
-                readparam = jalview.ws.jws2.ParameterUtils
-                        .writeParameterSet(pset, " ");
-                Iterator<String> o = pr.getOptions().iterator(),
-                        s = writeparam.iterator(), t = readparam.iterator();
-                boolean failed = false;
-                while (s.hasNext() && t.hasNext())
-                {
-                  String on = o.next(), sn = s.next(), st = t.next();
-                  if (!sn.equals(st))
-                  {
-                    System.out.println(
-                            "Original was " + on + " Phase 1 wrote " + sn
-                                    + "\tPhase 2 wrote " + st);
-                    failed = true;
-                  }
-                }
-                if (failed)
-                {
-                  System.out.println(
-                          "Original parameters:\n" + pr.getOptions());
-                  System.out.println(
-                          "Wrote parameters in first set:\n" + writeparam);
-                  System.out.println(
-                          "Wrote parameters in second set:\n" + readparam);
-
-                }
-              } catch (Exception e)
-              {
-                e.printStackTrace();
-              }
-            }
-            WsJobParameters pgui = new WsJobParameters(null, lastserv,
-                    new JabaPreset(lastserv, pr), null);
-            JFrame jf = new JFrame(MessageManager
-                    .formatMessage("label.ws_parameters_for", new String[]
-                    { lastserv.getActionText() }));
-            JPanel cont = new JPanel(new BorderLayout());
-            pgui.validate();
-            cont.setPreferredSize(pgui.getPreferredSize());
-            cont.add(pgui, BorderLayout.CENTER);
-            jf.setLayout(new BorderLayout());
-            jf.add(cont, BorderLayout.CENTER);
-            jf.validate();
-            final Thread thr = Thread.currentThread();
-            jf.addWindowListener(new WindowListener()
-            {
-
-              @Override
-              public void windowActivated(WindowEvent e)
-              {
-                // TODO Auto-generated method stub
-
-              }
-
-              @Override
-              public void windowClosed(WindowEvent e)
-              {
-              }
-
-              @Override
-              public void windowClosing(WindowEvent e)
-              {
-                thr.interrupt();
-
-              }
-
-              @Override
-              public void windowDeactivated(WindowEvent e)
-              {
-                // TODO Auto-generated method stub
-
-              }
-
-              @Override
-              public void windowDeiconified(WindowEvent e)
-              {
-                // TODO Auto-generated method stub
-
-              }
-
-              @Override
-              public void windowIconified(WindowEvent e)
-              {
-                // TODO Auto-generated method stub
-
-              }
-
-              @Override
-              public void windowOpened(WindowEvent e)
-              {
-                // TODO Auto-generated method stub
-
-              }
-
-            });
-            jf.setVisible(true);
-            boolean inter = false;
-            while (!inter)
-            {
-              try
-              {
-                Thread.sleep(10000);
-              } catch (Exception e)
-              {
-                inter = true;
-              }
-              ;
-            }
-            jf.dispose();
-          }
-        }
-      }
-    }
-  }
-
   public boolean isServiceDefaults()
   {
     return (!isModified()
@@ -1294,9 +1000,13 @@ public class WsJobParameters extends JPanel implements ItemListener,
    */
   protected void updateWebServiceMenus()
   {
+    if (Desktop.getInstance() == null)
+    {
+      return;
+    }
     for (AlignFrame alignFrame : Desktop.getAlignFrames())
     {
-      alignFrame.BuildWebServiceMenu();
+      alignFrame.buildWebServicesMenu();
     }
   }
 
@@ -1366,12 +1076,6 @@ public class WsJobParameters extends JPanel implements ItemListener,
 
   }
 
-  private void _renameExistingPreset(String oldName, String curSetName2)
-  {
-    paramStore.updatePreset(oldName, curSetName2, setDescr.getText(),
-            getJobParams());
-  }
-
   /**
    * store current settings as given name. You should then reset gui.
    *