Cache JS adds search of Info for jalview_xxx properties
[jalview.git] / src / jalview / bin / Cache.java
index e8c3151..fda04cb 100755 (executable)
@@ -281,6 +281,8 @@ public class Cache
   private static boolean propsAreReadOnly = Platform.isJS();/// ** @j2sNative
                                                             /// true || */false;
 
+  private final static String JS_PROPERTY_PREFIX = "jalview_";
+
   public static void initLogger()
   {
     if (log != null)
@@ -332,7 +334,7 @@ public class Cache
   public static void loadProperties(String propsFile)
   {
     propertiesFile = propsFile;
-    if (propsFile == null)
+    if (propsFile == null && !propsAreReadOnly)
     {
       propertiesFile = System.getProperty("user.home") + File.separatorChar
               + ".jalview_properties";
@@ -343,38 +345,45 @@ public class Cache
       propsAreReadOnly = true;
     }
 
-    try
+    if (propertiesFile == null)
+    { // BH 2019
+      Platform.readInfoProperties(JS_PROPERTY_PREFIX,
+              applicationProperties);
+    }
+    else
     {
-      InputStream fis;
       try
       {
-        fis = new java.net.URL(propertiesFile).openStream();
-        System.out.println(
-                "Loading jalview properties from : " + propertiesFile);
-        System.out.println(
-                "Disabling Jalview writing to user's local properties file.");
-        propsAreReadOnly = true;
+        InputStream fis;
+        try
+        {
+          fis = new java.net.URL(propertiesFile).openStream();
+          System.out.println(
+                  "Loading jalview properties from : " + propertiesFile);
+          System.out.println(
+                  "Disabling Jalview writing to user's local properties file.");
+          propsAreReadOnly = true;
+
+        } catch (Exception ex)
+        {
+          fis = null;
+        }
+        if (fis == null)
+        {
+          fis = new FileInputStream(propertiesFile);
+        }
+        applicationProperties.clear();
+        applicationProperties.load(fis);
 
+        // remove any old build properties
+
+        deleteBuildProperties();
+        fis.close();
       } catch (Exception ex)
       {
-        fis = null;
-      }
-      if (fis == null)
-      {
-        fis = new FileInputStream(propertiesFile);
+        System.out.println("Error reading properties file: " + ex);
       }
-      applicationProperties.clear();
-      applicationProperties.load(fis);
-
-      // remove any old build properties
-
-      deleteBuildProperties();
-      fis.close();
-    } catch (Exception ex)
-    {
-      System.out.println("Error reading properties file: " + ex);
     }
-
     if (getDefault("USE_PROXY", false))
     {
       String proxyServer = getDefault("PROXY_SERVER", ""),
@@ -388,69 +397,57 @@ public class Cache
     }
 
     // LOAD THE AUTHORS FROM THE authors.props file
-    boolean ignore = Platform.isJS();
-    if (!ignore)
-      /**
-       * @j2sNative
-       */
+    String authorDetails = (Platform.isJS() ? null
+            : "jar:".concat(Cache.class.getProtectionDomain()
+                    .getCodeSource().getLocation().toString()
+                    .concat("!/authors.props")));
+
+    try
     {
-      try
+      if (authorDetails != null)
       {
-        String authorDetails = "jar:"
-                .concat(Cache.class.getProtectionDomain().getCodeSource()
-                        .getLocation().toString().concat("!/authors.props"));
-
         java.net.URL localJarFileURL = new java.net.URL(authorDetails);
-
         InputStream in = localJarFileURL.openStream();
         applicationProperties.load(in);
         in.close();
-        
-      } catch (Exception ex)
-      {
-        System.out.println("Error reading author details: " + ex);
-        ignore = true;
       }
+    } catch (Exception ex)
+    {
+      System.out.println("Error reading author details: " + ex);
+      authorDetails = null;
     }
-
-    if (ignore) {
+    if (authorDetails == null)
+    {
         applicationProperties.remove("AUTHORS");
         applicationProperties.remove("AUTHORFNAMES");
         applicationProperties.remove("YEAR");
     }
-    
+
     // FIND THE VERSION NUMBER AND BUILD DATE FROM jalview.jar
     // MUST FOLLOW READING OF LOCAL PROPERTIES FILE AS THE
     // VERSION MAY HAVE CHANGED SINCE LAST USING JALVIEW
-    // BH 2019.01.25 switching to Platform.isJS()
-    ignore = Platform.isJS();
-    if (!ignore)
-    /**
-     * @j2sNative
-     */
+    String buildDetails = (Platform.isJS() ? null
+            : "jar:".concat(Cache.class.getProtectionDomain()
+                    .getCodeSource().getLocation().toString()
+                    .concat("!/.build_properties")));
+    if (buildDetails != null)
     {
       try
       {
-        String buildDetails = "jar:".concat(Cache.class.getProtectionDomain()
-                .getCodeSource().getLocation().toString()
-                .concat("!/.build_properties"));
-
         java.net.URL localJarFileURL = new java.net.URL(buildDetails);
-
         InputStream in = localJarFileURL.openStream();
         applicationProperties.load(in);
         in.close();
       } catch (Exception ex)
       {
         System.out.println("Error reading build details: " + ex);
-        ignore = true;
+        buildDetails = null;
       }
     }
-    
-    if (ignore) {
+    if (buildDetails == null)
+    {
         applicationProperties.remove("VERSION");
     }
-
     String jnlpVersion = System.getProperty("jalview.version");
     String codeVersion = getProperty("VERSION");
     String codeInstallation = getProperty("INSTALLATION");
@@ -576,6 +573,7 @@ public class Cache
             false);
   }
 
+
   private static void deleteBuildProperties()
   {
     applicationProperties.remove("LATEST_VERSION");
@@ -598,7 +596,13 @@ public class Cache
    */
   public static String getProperty(String key)
   {
-    return applicationProperties.getProperty(key);
+    String prop = applicationProperties.getProperty(key);
+    if (prop == null && Platform.isJS())
+    {
+      prop = applicationProperties.getProperty(Platform.getUniqueAppletID()
+              + "_" + JS_PROPERTY_PREFIX + key);
+    }
+    return prop;
   }
 
   /**