JAL-3633 Small changes to allow future fitting with ApplicationSingletonI/Jalview...
[jalview.git] / src / jalview / gui / Preferences.java
index 827c9a0..b447214 100755 (executable)
@@ -81,6 +81,10 @@ import jalview.ws.sifts.SiftsSettings;
  * @author $author$
  * @version $Revision$
  */
+/*
+ * for merge with Jalview-JS
+ public class Preferences extends GPreferences implements ApplicationSingletonI
+ */
 public class Preferences extends GPreferences
 {
   public static final String ENABLE_SPLIT_FRAME = "ENABLE_SPLIT_FRAME";
@@ -129,6 +133,8 @@ public class Preferences extends GPreferences
 
   private String previousProxyType;
 
+  private static Preferences INSTANCE = null; // add "final"
+
   /**
    * Holds name and link separated with | character. Sequence ID must be
    * $SEQUENCE_ID$ or $SEQUENCE_ID=/.possible | chars ./=$
@@ -188,10 +194,48 @@ public class Preferences extends GPreferences
   private OptionsParam textOpt = new OptionsParam(
           MessageManager.getString("action.text"), "Text");
 
+  // get singleton Preferences instance
+  public static Preferences getInstance()
+  {
+    if (INSTANCE == null || INSTANCE.frame == null
+            || INSTANCE.frame.isClosed())
+    {
+      INSTANCE = new Preferences();
+    }
+    return INSTANCE;
+
+    /*
+     * Replace code with the following for Jalvew-JS
+    Preferences INSTANCE = ApplicationSingletonProvider.getInstance(Preferences.class);
+    if (INSTANCE == null || INSTANCE.frame == null
+            || INSTANCE.frame.isClosed())
+    {
+      ApplicationSingletonProvider.remove(Preferences.class);
+      INSTANCE = ApplicationSingletonProvider.getInstance(Preferences.class);
+    }
+    return INSTANCE;
+    */
+  }
+
+  public static void openPreferences()
+  {
+    openPreferences(0, null);
+  }
+
+  public static void openPreferences(int selectTab, String message)
+  {
+    Preferences p = getInstance();
+    p.selectTab(selectTab);
+    p.setMessage(message);
+    p.frame.show();
+    p.frame.moveToFront();
+    p.frame.grabFocus();
+  }
+
   /**
    * Creates a new Preferences object.
    */
-  public Preferences()
+  private Preferences()
   {
     super();
     frame = new JInternalFrame();
@@ -552,9 +596,9 @@ public class Preferences extends GPreferences
       proxyType.setSelected(customProxy.getModel(), true);
       break;
     default:
-      String message = "Incorrect PROXY_TYPE - should be 'none' (clear proxy properties), 'false' (system settings), 'true' (custom settings): "
-              + proxyTypeString;
-      Cache.log.warn(message);
+      Cache.log.warn(
+              "Incorrect PROXY_TYPE - should be 'none' (clear proxy properties), 'false' (system settings), 'true' (custom settings): "
+                      + proxyTypeString);
     }
     proxyServerHttpTB.setText(Cache.getDefault("PROXY_SERVER", ""));
     proxyPortHttpTB.setText(Cache.getDefault("PROXY_PORT", ""));
@@ -563,8 +607,9 @@ public class Preferences extends GPreferences
     proxyAuth.setSelected(Cache.getDefault("PROXY_AUTH", false));
     proxyAuthUsernameTB
             .setText(Cache.getDefault("PROXY_AUTH_USERNAME", ""));
-    proxyAuthPasswordTB
-            .setText(Cache.getDefault("PROXY_AUTH_PASSWORD", ""));
+    // we are not storing or retrieving proxy password from .jalview_properties
+    proxyAuthPasswordPB.setText(Cache.proxyAuthPassword == null ? ""
+            : new String(Cache.proxyAuthPassword));
     setCustomProxyEnabled();
 
     defaultBrowser.setText(Cache.getDefault("DEFAULT_BROWSER", ""));
@@ -664,6 +709,11 @@ public class Preferences extends GPreferences
       return;
     }
 
+    /* 
+     * Set proxy settings first (to be before web services refresh)
+     */
+    saveProxySettings();
+
     /*
      * Save Visual settings
      */
@@ -807,6 +857,8 @@ public class Preferences extends GPreferences
     /*
      * Save Connections settings
      */
+    // Proxy settings set first (to catch web services)
+
     Cache.setOrRemove("DEFAULT_BROWSER", defaultBrowser.getText());
 
     jalview.util.BrowserLauncher.resetBrowser();
@@ -837,21 +889,6 @@ public class Preferences extends GPreferences
     Cache.applicationProperties.setProperty("DEFAULT_URL",
             sequenceUrlLinks.getPrimaryUrlId());
 
-    // Proxy settings
-    Cache.applicationProperties.setProperty("USE_PROXY",
-            customProxy.isSelected() ? Cache.PROXYTYPE_CUSTOM
-                    : noProxy.isSelected() ? Cache.PROXYTYPE_NONE
-                            : Cache.PROXYTYPE_SYSTEM);
-    Cache.setOrRemove("PROXY_SERVER", proxyServerHttpTB.getText());
-    Cache.setOrRemove("PROXY_PORT", proxyPortHttpTB.getText());
-    Cache.setOrRemove("PROXY_SERVER_HTTPS", proxyServerHttpsTB.getText());
-    Cache.setOrRemove("PROXY_PORT_HTTPS", proxyPortHttpsTB.getText());
-    Cache.setOrRemove("PROXY_AUTH",
-            Boolean.toString(proxyAuth.isSelected()));
-    Cache.setOrRemove("PROXY_AUTH_USERNAME", proxyAuthUsernameTB.getText());
-    Cache.setOrRemove("PROXY_AUTH_PASSWORD", proxyAuthPasswordTB.getText());
-    setProxyFromSettings();
-
     Cache.setProperty("VERSION_CHECK",
             Boolean.toString(versioncheck.isSelected()));
     if (Cache.getProperty("USAGESTATS") != null || usagestats.isSelected())
@@ -948,37 +985,28 @@ public class Preferences extends GPreferences
     }
   }
 
-  public void setProxyFromSettings()
+  public void saveProxySettings()
   {
-    String proxyType = Cache.getDefault("USE_PROXY",
-            Cache.PROXYTYPE_SYSTEM);
-    if (proxyType.equals(Cache.PROXYTYPE_NONE))
-    {
-      if (!previousProxyType.equals(proxyType))
-        Cache.log.info("Setting no proxy settings");
-      Cache.setProxyProperties(null, null, null, null, null, null, null,
-              null);
-    }
-    else if (proxyType.equals(Cache.PROXYTYPE_CUSTOM))
-    {
-      if (!previousProxyType.equals(proxyType))
-        Cache.log.info("Setting custom proxy settings");
-      boolean proxyAuthSet = Cache.getDefault("PROXY_AUTH", false);
-      Cache.setProxyProperties(Cache.getDefault("PROXY_SERVER", null),
-              Cache.getDefault("PROXY_PORT", null),
-              Cache.getDefault("PROXY_SERVER_HTTPS", null),
-              Cache.getDefault("PROXY_PORT_HTTPS", null),
-              proxyAuthSet ? Cache.getDefault("PROXY_AUTH_USERNAME", "")
-                      : null,
-              proxyAuthSet ? Cache.getDefault("PROXY_AUTH_PASSWORD", "")
-                      : null);
-    }
-    else // systemProxy should be selected and is sensible default anyway
+    String newProxyType = customProxy.isSelected() ? Cache.PROXYTYPE_CUSTOM
+            : noProxy.isSelected() ? Cache.PROXYTYPE_NONE
+                    : Cache.PROXYTYPE_SYSTEM;
+    Cache.applicationProperties.setProperty("USE_PROXY", newProxyType);
+    Cache.setOrRemove("PROXY_SERVER", proxyServerHttpTB.getText());
+    Cache.setOrRemove("PROXY_PORT", proxyPortHttpTB.getText());
+    Cache.setOrRemove("PROXY_SERVER_HTTPS", proxyServerHttpsTB.getText());
+    Cache.setOrRemove("PROXY_PORT_HTTPS", proxyPortHttpsTB.getText());
+    Cache.setOrRemove("PROXY_AUTH",
+            Boolean.toString(proxyAuth.isSelected()));
+    Cache.setOrRemove("PROXY_AUTH_USERNAME", proxyAuthUsernameTB.getText());
+    Cache.proxyAuthPassword = proxyAuthPasswordPB.getPassword();
+    Cache.setProxyPropertiesFromPreferences(previousProxyType);
+    if (newProxyType.equals(Cache.PROXYTYPE_CUSTOM)
+            || !newProxyType.equals(previousProxyType))
     {
-      if (!previousProxyType.equals(proxyType))
-        Cache.log.info("Setting system proxy settings");
-      Cache.resetProxyProperties();
+      // force a re-lookup of ws if proxytype is custom or has changed
+      wsPrefs.update++;
     }
+    previousProxyType = newProxyType;
   }
 
   /**