method to get a user default colour (JAL-234)
[jalview.git] / src / jalview / bin / Cache.java
index 5688ae1..09ebadd 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
  * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
@@ -17,6 +17,7 @@
  */
 package jalview.bin;
 
+import java.awt.Color;
 import java.io.*;
 import java.util.*;
 
@@ -124,6 +125,13 @@ import org.biojava.dasobert.dasregistry.Das1Source;
  * histogram.</li>
  * <li>SHOW_CONSENSUS_LOGO (false) Show consensus annotation row's sequence
  * logo.</li>
+ * <li>FOLLOW_SELECTIONS (true) Controls whether a new alignment view should
+ * respond to selections made in other alignments containing the same sequences.
+ * </li>
+ * <li>SHOW_WSDISCOVERY_ERRORS (true) Controls if the web service URL discovery
+ * warning dialog box is displayed.</li>
+ * <li>ANNOTATIONCOLOUR_MIN (orange) Shade used for minimum value of annotation when shading by annotation</li>
+ * <li>ANNOTATIONCOLOUR_MAX (red) Shade used for maximum value of annotation when shading by annotation</li>
  * 
  * <li></li>
  * 
@@ -168,9 +176,11 @@ public class Cache
   /** Default file is ~/.jalview_properties */
   static String propertiesFile;
 
+  private static boolean propsAreReadOnly=false;
+
   public static void initLogger()
   {
-    if (log!=null)
+    if (log != null)
     {
       return;
     }
@@ -220,11 +230,31 @@ public class Cache
     {
       propertiesFile = System.getProperty("user.home") + File.separatorChar
               + ".jalview_properties";
+    } else {
+      // don't corrupt the file we've been given.
+      propsAreReadOnly = true;
     }
 
     try
     {
-      FileInputStream fis = new FileInputStream(propertiesFile);
+      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.load(fis);
       applicationProperties.remove("LATEST_VERSION");
       applicationProperties.remove("VERSION");
@@ -239,9 +269,7 @@ public class Cache
       System.out.println("Using proxyServer: "
               + getDefault("PROXY_SERVER", null) + " proxyPort: "
               + getDefault("PROXY_PORT", null));
-      System
-              .setProperty("http.proxyHost", getDefault("PROXY_SERVER",
-                      null));
+      System.setProperty("http.proxyHost", getDefault("PROXY_SERVER", null));
       System.setProperty("http.proxyPort", getDefault("PROXY_PORT", null));
     }
 
@@ -251,8 +279,8 @@ public class Cache
     try
     {
       String buildDetails = "jar:".concat(Cache.class.getProtectionDomain()
-              .getCodeSource().getLocation().toString().concat(
-                      "!/.build_properties"));
+              .getCodeSource().getLocation().toString()
+              .concat("!/.build_properties"));
 
       java.net.URL localJarFileURL = new java.net.URL(buildDetails);
 
@@ -414,12 +442,16 @@ public class Cache
    */
   public static String setProperty(String key, String obj)
   {
+
     try
     {
-      FileOutputStream out = new FileOutputStream(propertiesFile);
       applicationProperties.setProperty(key, obj);
-      applicationProperties.store(out, "---JalviewX Properties File---");
-      out.close();
+      if (!propsAreReadOnly)
+      {
+        FileOutputStream out = new FileOutputStream(propertiesFile);
+        applicationProperties.store(out, "---JalviewX Properties File---");
+        out.close();
+      }
     } catch (Exception ex)
     {
       System.out.println("Error setting property: " + key + " " + obj
@@ -444,14 +476,17 @@ public class Cache
    */
   public static void saveProperties()
   {
-    try
-    {
-      FileOutputStream out = new FileOutputStream(propertiesFile);
-      applicationProperties.store(out, "---JalviewX Properties File---");
-      out.close();
-    } catch (Exception ex)
+    if (!propsAreReadOnly)
     {
-      System.out.println("Error saving properties: " + ex);
+      try
+      {
+        FileOutputStream out = new FileOutputStream(propertiesFile);
+        applicationProperties.store(out, "---JalviewX Properties File---");
+        out.close();
+      } catch (Exception ex)
+      {
+        System.out.println("Error saving properties: " + ex);
+      }
     }
   }
 
@@ -607,8 +642,7 @@ public class Cache
                   "com.boxysystems.jgoogleanalytics.FocusPoint");
         } catch (Exception e)
         {
-          log
-                  .debug("com.boxysystems.jgoogleanalytics package is not present - tracking not enabled.");
+          log.debug("com.boxysystems.jgoogleanalytics package is not present - tracking not enabled.");
           tracker = null;
           jgoogleanalyticstracker = null;
           trackerfocus = null;
@@ -652,10 +686,7 @@ public class Cache
         if (log != null)
         {
           if (re != null)
-            log
-                    .debug(
-                            "Caught runtime exception in googletracker init:",
-                            re);
+            log.debug("Caught runtime exception in googletracker init:", re);
           if (ex != null)
             log.warn(
                     "Failed to initialise GoogleTracker for Jalview Desktop with version "
@@ -698,4 +729,29 @@ public class Cache
     }
   }
 
+  /**
+   * get the user's default colour if available
+   * @param property
+   * @param defcolour
+   * @return
+   */
+  public static Color getDefaultColour(String property, Color defcolour)
+  {
+    String colprop = getProperty(property);
+    if (colprop==null) {
+      return defcolour;
+    }
+    Color col = jalview.schemes.ColourSchemeProperty.getAWTColorFromName(colprop);
+    if (col==null)
+    {
+      try {
+        col = new jalview.schemes.UserColourScheme(colprop).findColour('A');
+      } catch (Exception ex)
+      {
+        log.warn("Couldn't parse '"+colprop+"' as a colour for "+property);
+        col=null;
+      }
+    }
+    return (col==null) ? defcolour: col;
+  }
 }