JAL-3633 Added Proxy Authentication credentials in Preferences and set via java.net...
[jalview.git] / src / jalview / jbgui / GPreferences.java
index 4ac1825..67da0f4 100755 (executable)
@@ -51,6 +51,7 @@ import javax.swing.JComboBox;
 import javax.swing.JFileChooser;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JPasswordField;
 import javax.swing.JRadioButton;
 import javax.swing.JScrollPane;
 import javax.swing.JSpinner;
@@ -241,6 +242,10 @@ public class GPreferences extends JPanel
 
   protected JLabel serverLabel2 = new JLabel();
 
+  protected JLabel proxyAuthUsernameLabel = new JLabel();
+
+  protected JLabel proxyAuthPasswordLabel = new JLabel();
+
   protected JTextField proxyServerHttpTB = new JTextField();
 
   protected JTextField proxyPortHttpTB = new JTextField();
@@ -249,6 +254,12 @@ public class GPreferences extends JPanel
 
   protected JTextField proxyPortHttpsTB = new JTextField();
 
+  protected JCheckBox proxyAuth = new JCheckBox();
+
+  protected JTextField proxyAuthUsernameTB = new JTextField();
+
+  protected JTextField proxyAuthPasswordTB = new JPasswordField();
+
   protected JTextField defaultBrowser = new JTextField();
 
   protected ButtonGroup proxyType = new ButtonGroup();
@@ -914,6 +925,10 @@ public class GPreferences extends JPanel
     proxyServerHttpsTB.setColumns(40);
     proxyPortHttpsTB.setFont(LABEL_FONT);
     proxyPortHttpsTB.setColumns(4);
+    proxyAuthUsernameTB.setFont(LABEL_FONT);
+    proxyAuthUsernameTB.setColumns(30);
+    proxyAuthPasswordTB.setFont(LABEL_FONT);
+    proxyAuthPasswordTB.setColumns(30);
 
     // Label for Port text box
     portLabel.setFont(LABEL_FONT);
@@ -930,36 +945,61 @@ public class GPreferences extends JPanel
     httpsLabel.setFont(LABEL_FONT_BOLD);
     httpsLabel.setHorizontalAlignment(SwingConstants.LEFT);
 
+    proxyAuthUsernameLabel
+            .setText(MessageManager.getString("label.username") + ": ");
+    proxyAuthUsernameLabel.setFont(LABEL_FONT);
+    proxyAuthUsernameLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+    proxyAuthPasswordLabel
+            .setText(MessageManager.getString("label.password") + ": ");
+    proxyAuthPasswordLabel.setFont(LABEL_FONT);
+    proxyAuthPasswordLabel.setHorizontalAlignment(SwingConstants.RIGHT);
+
     // Proxy type radio buttons
     noProxy.setFont(LABEL_FONT);
     noProxy.setHorizontalAlignment(SwingConstants.LEFT);
-    // noProxy.setHorizontalTextPosition(SwingConstants.LEADING);
     noProxy.setText(MessageManager.getString("label.no_proxy"));
     systemProxy.setFont(LABEL_FONT);
     systemProxy.setHorizontalAlignment(SwingConstants.LEFT);
-    // systemProxy.setHorizontalTextPosition(SwingConstants.LEADING);
     systemProxy.setText(MessageManager.formatMessage("label.system_proxy",
-            displayHostPort(Cache.startupProxyProperties[0],
+            displayUserHostPort(Cache.startupProxyProperties[4],
+                    Cache.startupProxyProperties[0],
                     Cache.startupProxyProperties[1]),
-            displayHostPort(Cache.startupProxyProperties[2],
+            displayUserHostPort(Cache.startupProxyProperties[6],
+                    Cache.startupProxyProperties[2],
                     Cache.startupProxyProperties[3])));
     customProxy.setFont(LABEL_FONT);
     customProxy.setHorizontalAlignment(SwingConstants.LEFT);
-    // customProxy.setHorizontalTextPosition(SwingConstants.LEADING);
-    customProxy.addActionListener(new ActionListener()
+    customProxy.setText(
+            MessageManager.getString("label.use_proxy_server") + ":");
+    ActionListener al = new ActionListener()
     {
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        customProxy_actionPerformed();
+        proxyType_actionPerformed();
       }
-    });
-    customProxy.setText(
-            MessageManager.getString("label.use_proxy_server") + ":");
+    };
+    noProxy.addActionListener(al);
+    systemProxy.addActionListener(al);
+    customProxy.addActionListener(al);
     proxyType.add(noProxy);
     proxyType.add(systemProxy);
     proxyType.add(customProxy);
 
+    proxyAuth.setFont(LABEL_FONT);
+    proxyAuth.setHorizontalAlignment(SwingConstants.LEFT);
+    proxyAuth.setText(MessageManager.getString("label.auth_required"));
+    proxyAuth.addActionListener(new ActionListener()
+    {
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        proxyAuth_actionPerformed();
+      }
+    });
+
+    setCustomProxyEnabled();
+
     // Make proxy server panel
     JPanel proxyPanel = new JPanel();
     TitledBorder titledBorder1 = new TitledBorder(
@@ -1036,33 +1076,39 @@ public class GPreferences extends JPanel
     gbc.weightx = 0.1;
     proxyPanel.add(proxyPortHttpsTB, gbc);
 
-    /*
-    proxyPanel.add(serverLabel,
-            new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.WEST, GridBagConstraints.NONE,
-                    new Insets(0, 2, 2, 0), 5, 0));
-    proxyPanel.add(portLabel,
-            new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0,
-                    GridBagConstraints.WEST, GridBagConstraints.NONE,
-                    new Insets(0, 0, 2, 0), 11, 0));
-    proxyPanel.add(useProxy,
-            new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0,
-                    GridBagConstraints.WEST, GridBagConstraints.NONE,
-                    new Insets(0, 2, 5, 185), 2, -4));
-    proxyPanel.add(proxyPortTB,
-            new GridBagConstraints(3, 1, 1, 1, 1.0, 0.0,
-                    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
-                    new Insets(0, 2, 2, 2), 54, 1));
-    proxyPanel.add(proxyServerTB,
-            new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0,
-                    GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL,
-                    new Insets(0, 2, 2, 0), 263, 1));
-                    */
+    gbc.gridy++;
+    gbc.gridx = 0;
+    gbc.gridwidth = 5;
+    gbc.anchor = GridBagConstraints.WEST;
+    gbc.weightx = 0.1;
+    proxyPanel.add(proxyAuth, gbc);
+
+    gbc.gridy++;
+    gbc.gridx = 0;
+    gbc.gridwidth = 1;
+    gbc.anchor = GridBagConstraints.EAST;
+    proxyPanel.add(proxyAuthUsernameLabel, gbc);
+
+    gbc.gridx++;
+    gbc.gridwidth = 4;
+    gbc.anchor = GridBagConstraints.WEST;
+    proxyPanel.add(proxyAuthUsernameTB, gbc);
+
+    gbc.gridy++;
+    gbc.gridx = 0;
+    gbc.gridwidth = 1;
+    gbc.anchor = GridBagConstraints.EAST;
+    proxyPanel.add(proxyAuthPasswordLabel, gbc);
+
+    gbc.gridx++;
+    gbc.gridwidth = 4;
+    gbc.anchor = GridBagConstraints.WEST;
+    proxyPanel.add(proxyAuthPasswordTB, gbc);
 
     return proxyPanel;
   }
 
-  private String displayHostPort(String host, String port)
+  private String displayUserHostPort(String user, String host, String port)
   {
     boolean hostBlank = (host == null || host.isEmpty());
     boolean portBlank = (port == null || port.isEmpty());
@@ -1072,6 +1118,12 @@ public class GPreferences extends JPanel
     }
 
     StringBuilder sb = new StringBuilder();
+    if (user != null)
+    {
+      sb.append(user.isEmpty() || user.indexOf(" ") > -1 ? '"' + user + '"'
+              : user);
+      sb.append("@");
+    }
     sb.append(hostBlank ? "" : host);
     if (!portBlank)
     {
@@ -2967,17 +3019,40 @@ public class GPreferences extends JPanel
 
   }
 
-  public void customProxy_actionPerformed()
+  public void setProxyAuthEnabled()
+  {
+    boolean enabled = proxyAuth.isSelected() && proxyAuth.isEnabled();
+    proxyAuthUsernameLabel.setEnabled(enabled);
+    proxyAuthPasswordLabel.setEnabled(enabled);
+    proxyAuthUsernameTB.setEnabled(enabled);
+    proxyAuthPasswordTB.setEnabled(enabled);
+  }
+
+  public void setCustomProxyEnabled()
   {
     boolean enabled = customProxy.isSelected();
     portLabel.setEnabled(enabled);
     serverLabel.setEnabled(enabled);
+    portLabel2.setEnabled(enabled);
+    serverLabel2.setEnabled(enabled);
     httpLabel.setEnabled(enabled);
     httpsLabel.setEnabled(enabled);
     proxyServerHttpTB.setEnabled(enabled);
     proxyPortHttpTB.setEnabled(enabled);
     proxyServerHttpsTB.setEnabled(enabled);
     proxyPortHttpsTB.setEnabled(enabled);
+    proxyAuth.setEnabled(enabled);
+    setProxyAuthEnabled();
+  }
+
+  public void proxyType_actionPerformed()
+  {
+    setCustomProxyEnabled();
+  }
+
+  public void proxyAuth_actionPerformed()
+  {
+    setProxyAuthEnabled();
   }
 
   /**