Merge branch 'develop' into issues/JAL-3553+JAL-3978+JAL-3989+JAL-4014_merged_with_de...
[jalview.git] / getdown / src / getdown / core / src / main / java / com / threerings / getdown / data / Application.java
index 313a690..9d9fe14 100644 (file)
@@ -9,6 +9,8 @@ import java.io.*;
 import java.lang.reflect.Method;
 import java.net.MalformedURLException;
 import java.net.Proxy;
+import java.net.SocketAddress;
+import java.net.InetSocketAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -29,7 +31,7 @@ import java.util.zip.GZIPInputStream;
 
 import jalview.bin.HiDPISetting;
 import jalview.bin.MemorySetting;
-//import com.install4j.api.launcher.Variables;
+import jalview.util.LaunchUtils;
 
 import com.threerings.getdown.util.*;
 // avoid ambiguity with java.util.Base64 which we can't use as it's 1.8+
@@ -354,11 +356,6 @@ public class Application
         return _resources;
     }
 
-    public List<Resource> getDigestOnly ()
-    {
-        return _digestonly;
-    }
-
     /**
      * Returns the digest of the given {@code resource}.
      */
@@ -777,7 +774,6 @@ public class Application
         // clear our arrays as we may be reinitializing
         _codes.clear();
         _resources.clear();
-        _digestonly.clear();
         _auxgroups.clear();
         _jvmargs.clear();
         _appargs.clear();
@@ -798,8 +794,6 @@ public class Application
         parseResources(config, "presource", Resource.PRELOAD, _resources);
         parseResources(config, "nresource", Resource.NATIVE, _resources);
 
-        parseResources(config, "digestonly", Resource.NORMAL, _digestonly);
-        
         // parse our auxiliary resource groups
         for (String auxgroup : config.getList("auxgroups")) {
             ArrayList<Resource> codes = new ArrayList<>();
@@ -1066,13 +1060,33 @@ public class Application
         }
 
         // pass along our proxy settings
-        String proxyHost;
-        if ((proxyHost = System.getProperty("http.proxyHost")) != null) {
+        String proxyHost = System.getProperty("http.proxyHost");
+       String proxyPort = StringUtil.isBlank(System.getProperty("http.proxyPort")) ? "80" : System.getProperty("http.proxyPort");
+        if (StringUtil.isBlank(proxyHost) && ! proxy.equals(Proxy.NO_PROXY)) {
+           try {
+               SocketAddress a = proxy.address();
+               if (a != null && a instanceof InetSocketAddress) {
+                   InetSocketAddress ia = (InetSocketAddress)a;
+                   proxyHost = ia.getHostString();
+                   proxyPort = String.valueOf(ia.getPort());
+               }
+           } catch (Exception e) {
+               log.error("Problem obtaining proxy settings from Proxy object");
+               e.printStackTrace();
+           }
+       }
+        if (proxyHost != null) {
+           log.info("Using proxy settings "+proxyHost+":"+proxyPort);
             args.add("-Dhttp.proxyHost=" + proxyHost);
-            args.add("-Dhttp.proxyPort=" + System.getProperty("http.proxyPort"));
+            args.add("-Dhttp.proxyPort=" + proxyPort);
             args.add("-Dhttps.proxyHost=" + proxyHost);
-            args.add("-Dhttps.proxyPort=" + System.getProperty("http.proxyPort"));
-        }
+            args.add("-Dhttps.proxyPort=" + proxyPort);
+       } else {
+           log.info("Not setting proxy");
+       }
+
+        // add the getdowninstanceappbase property.  getdownappdir is added by getdown.txt
+        args.add("-Dgetdowninstanceappbase=" + getAppbase().toString());
 
         // add the marker indicating the app is running in getdown
         args.add("-D" + Properties.GETDOWN + "=true");
@@ -1170,6 +1184,17 @@ public class Application
             continue;
           }
         }
+
+        // use saved preferences if no cmdline args
+        LaunchUtils.loadChannelProps(getAppDir());
+        if (LaunchUtils.getBooleanUserPreference(MemorySetting.CUSTOMISED_SETTINGS)) {
+          if (jvmmempc == null) {
+            jvmmempc = LaunchUtils.getUserPreference(MemorySetting.MEMORY_JVMMEMPC);
+          }
+          if (jvmmemmax == null) {
+            jvmmemmax = LaunchUtils.getUserPreference(MemorySetting.MEMORY_JVMMEMMAX);
+          }
+        }
         
         // add the memory setting from jvmmempc and jvmmemmax
         long maxMemLong = -1;
@@ -1226,7 +1251,7 @@ public class Application
           if (j > -1) {
             ext = filename.substring(j+1);
           }
-          if (ext != null && LOCATOR_FILE_EXTENSION.equals(ext.toLowerCase())) {
+          if (ext != null && LOCATOR_FILE_EXTENSION.equals(ext.toLowerCase(Locale.ROOT))) {
             // this file extension should have been dealt with in Getdown class
           } else {
             _appargs.add(0, "-open");
@@ -1242,7 +1267,9 @@ public class Application
         String[] sargs = args.toArray(new String[args.size()]);
         log.info("Running " + StringUtil.join(sargs, "\n  "));
 
-        return Runtime.getRuntime().exec(sargs, envp, getAppDir());
+        // don't set the working dir, leave it the same as the working dir of the invocation
+        //return Runtime.getRuntime().exec(sargs, envp, getAppDir());
+        return Runtime.getRuntime().exec(sargs, envp);
     }
 
     /**
@@ -1973,7 +2000,7 @@ public class Application
         String locatorFilename = filenames.length >= 1 ? filenames[0] : null;
         if (
                 !StringUtil.isBlank(locatorFilename)
-                && locatorFilename.toLowerCase().endsWith("."+Application.LOCATOR_FILE_EXTENSION)
+                && locatorFilename.toLowerCase(Locale.ROOT).endsWith("."+Application.LOCATOR_FILE_EXTENSION)
                 ) {
           setLocatorFile(locatorFilename);
           // remove the locator filename from the filenames array
@@ -1987,7 +2014,7 @@ public class Application
           // skip any other locator files in a multiple file list
           if (filename.startsWith("jalview://") || filename.startsWith("jalviews://")) {
             setJalviewUri(filename);
-          } else if (! filename.toLowerCase().endsWith("."+Application.LOCATOR_FILE_EXTENSION)) {
+          } else if (! filename.toLowerCase(Locale.ROOT).endsWith("."+Application.LOCATOR_FILE_EXTENSION)) {
             addStartupFile(filename);
           }
         }
@@ -2084,7 +2111,6 @@ public class Application
 
     protected List<Resource> _codes = new ArrayList<>();
     protected List<Resource> _resources = new ArrayList<>();
-    protected List<Resource> _digestonly = new ArrayList<>();
 
     protected boolean _useCodeCache;
     protected int _codeCacheRetentionDays;