X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCache.java;h=3750d9de3f82d1f30a39e1cd4145dda57a07c854;hb=81d1b5ee333dee61382971eca41792d6a64a29fc;hp=769c86857cc99f9c7087e73ef1a7cc9975eb868c;hpb=79456f40b33e73e2fb5420a3287ae80854281ef6;p=jalview.git diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index 769c868..3750d9d 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -42,7 +42,10 @@ import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.Enumeration; +import java.util.HashMap; +import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import java.util.TreeSet; @@ -50,6 +53,7 @@ import java.util.TreeSet; import javax.swing.LookAndFeel; import javax.swing.UIManager; +import jalview.analytics.Plausible; import jalview.datamodel.PDBEntry; import jalview.gui.Preferences; import jalview.gui.UserDefinedColours; @@ -125,7 +129,7 @@ import jalview.ws.sifts.SiftsSettings; * service *
  • QUESTIONNAIRE last questionnaire:responder id string from questionnaire * service
  • - *
  • USAGESTATS (false - user prompted) Enable google analytics tracker for + *
  • USAGESTATS (false - user prompted) Enable analytics tracker for * collecting usage statistics
  • *
  • SHOW_OVERVIEW boolean for overview window display
  • *
  • ANTI_ALIAS boolean for smooth fonts
  • @@ -310,6 +314,24 @@ public class Cache // in-memory only storage of proxy password, safer to use char array public static char[] proxyAuthPassword = null; + /** + * Session properties, set by command line, try not to affect stored + * properties! + */ + private static Map sessionProperties = new HashMap<>(); + + private static boolean bypassSessionProperties = false; + + public static void enableSessionProperties() + { + bypassSessionProperties = false; + } + + public static void disableSessionProperties() + { + bypassSessionProperties = true; + } + /** Jalview Properties */ public static Properties applicationProperties = new Properties() { @@ -383,10 +405,13 @@ public class Cache { // props file provided as URL fis = new URL(propertiesFile).openStream(); - System.out.println( - "Loading jalview properties from : " + propertiesFile); - System.out.println( - "Disabling Jalview writing to user's local properties file."); + if (!Jalview.quiet()) + { + jalview.bin.Console.outPrintln( + "Loading jalview properties from : " + propertiesFile); + jalview.bin.Console.outPrintln( + "Disabling Jalview writing to user's local properties file."); + } propsAreReadOnly = true; } catch (Exception ex) { @@ -414,7 +439,9 @@ public class Cache fis.close(); } catch (Exception ex) { - System.out.println("Error reading properties file: " + ex); + if (!Jalview.quiet()) + jalview.bin.Console + .outPrintln("Error reading properties file: " + ex); } } @@ -470,7 +497,9 @@ public class Cache } } catch (Exception ex) { - System.out.println("Error reading author details: " + ex); + if (!Jalview.quiet()) + jalview.bin.Console + .outPrintln("Error reading author details: " + ex); authorDetails = null; } if (authorDetails == null) @@ -554,10 +583,13 @@ public class Cache remoteVersion = remoteBuildProperties.getProperty("VERSION"); } catch (Exception ex) { - System.out.println( - "Non-fatal exception when checking version at " - + remoteBuildPropertiesUrl + ":"); - System.out.println(ex); + if (!Jalview.quiet()) + { + jalview.bin.Console.outPrintln( + "Non-fatal exception when checking version at " + + remoteBuildPropertiesUrl + ":"); + jalview.bin.Console.printStackTrace(ex); + } remoteVersion = getProperty("VERSION"); } } @@ -606,7 +638,7 @@ public class Cache url = Cache.class.getResource(resourcePath).toString(); } catch (Exception ex) { - System.err.println("Failed to resolve resource " + resourcePath + jalview.bin.Console.errPrintln("Failed to resolve resource " + resourcePath + ": " + ex.getMessage()); } } @@ -656,7 +688,9 @@ public class Cache } } catch (Exception ex) { - System.out.println("Error reading build details: " + ex); + if (!Jalview.quiet()) + jalview.bin.Console + .outPrintln("Error reading build details: " + ex); applicationProperties.remove("VERSION"); } String codeVersion = getProperty("VERSION"); @@ -676,11 +710,9 @@ public class Cache new BuildDetails(codeVersion, null, codeInstallation); if (printVersion && reportVersion) { - if (!Jalview.quiet()) - { - System.out.println(ChannelProperties.getProperty("app_name") - + " Version: " + codeVersion + codeInstallation); - } + jalview.bin.Console + .outPrintln(ChannelProperties.getProperty("app_name") + + " version: " + codeVersion + codeInstallation); } } @@ -706,7 +738,21 @@ public class Cache */ public static String getProperty(String key) { - String prop = applicationProperties.getProperty(key); + return getProperty(key, false); + } + + public static String getProperty(String key, + boolean skipSessionProperties) + { + String prop = null; + if (!(skipSessionProperties || bypassSessionProperties)) + { + prop = getSessionProperty(key); + } + if (prop == null) + { + prop = applicationProperties.getProperty(key); + } if (prop == null && Platform.isJS()) { prop = applicationProperties.getProperty(Platform.getUniqueAppletID() @@ -741,8 +787,9 @@ public class Cache def = Integer.parseInt(string); } catch (NumberFormatException e) { - System.out.println("Error parsing int property '" + property - + "' with value '" + string + "'"); + if (!Jalview.quiet()) + jalview.bin.Console.outPrintln("Error parsing int property '" + + property + "' with value '" + string + "'"); } } @@ -775,16 +822,25 @@ public class Cache try { oldValue = applicationProperties.setProperty(key, obj); - if (propertiesFile != null && !propsAreReadOnly) + if (propertiesFile != null && !propsAreReadOnly + // don't rewrite if new value is same as old value + && !((obj == null && oldValue == null) + || (obj != null && obj.equals(oldValue)))) { + // reset the session property too + if (sessionProperties.containsKey(key)) + { + sessionProperties.remove(key); + } FileOutputStream out = new FileOutputStream(propertiesFile); applicationProperties.store(out, "---JalviewX Properties File---"); out.close(); } } catch (Exception ex) { - System.out.println( - "Error setting property: " + key + " " + obj + "\n" + ex); + if (!Jalview.quiet()) + jalview.bin.Console.outPrintln( + "Error setting property: " + key + " " + obj + "\n" + ex); } return oldValue; } @@ -814,7 +870,8 @@ public class Cache out.close(); } catch (Exception ex) { - System.out.println("Error saving properties: " + ex); + if (!Jalview.quiet()) + jalview.bin.Console.outPrintln("Error saving properties: " + ex); } } } @@ -902,102 +959,42 @@ public class Cache } /** - * GA tracker object - actually JGoogleAnalyticsTracker null if tracking not - * enabled. + * Initialise the tracker if it is not done already. */ - protected static Object tracker = null; - - protected static Class trackerfocus = null; - - protected static Class jgoogleanalyticstracker = null; - - /** - * Initialise the google tracker if it is not done already. - */ - public static void initGoogleTracker() + public static void initAnalytics() { - if (tracker == null) + Plausible.setEnabled(true); + + String appName = ChannelProperties.getProperty("app_name") + " Desktop"; + String version = Cache.getProperty("VERSION") + "_" + + Cache.getDefault("BUILD_DATE", "unknown"); + String path; + /* we don't want to encode ':' as "%3A" for backward compatibility with the UA setup + try { - if (jgoogleanalyticstracker == null) - { - // try to get the tracker class - try - { - jgoogleanalyticstracker = Cache.class.getClassLoader().loadClass( - "com.boxysystems.jgoogleanalytics.JGoogleAnalyticsTracker"); - trackerfocus = Cache.class.getClassLoader() - .loadClass("com.boxysystems.jgoogleanalytics.FocusPoint"); - } catch (Exception e) - { - Console.debug( - "com.boxysystems.jgoogleanalytics package is not present - tracking not enabled."); - tracker = null; - jgoogleanalyticstracker = null; - trackerfocus = null; - return; - } - } - // now initialise tracker - Exception re = null, ex = null; - Error err = null; - String vrs = "No Version Accessible"; - try - { - // Google analytics tracking code for Library Finder - tracker = jgoogleanalyticstracker - .getConstructor(new Class[] - { String.class, String.class, String.class }) - .newInstance(new Object[] - { ChannelProperties.getProperty("app_name") + " Desktop", - (vrs = Cache.getProperty("VERSION") + "_" - + Cache.getDefault("BUILD_DATE", "unknown")), - "UA-9060947-1" }); - jgoogleanalyticstracker - .getMethod("trackAsynchronously", new Class[] - { trackerfocus }) - .invoke(tracker, new Object[] - { trackerfocus.getConstructor(new Class[] { String.class }) - .newInstance(new Object[] - { "Application Started." }) }); - } catch (RuntimeException e) - { - re = e; - } catch (Exception e) - { - ex = e; - } catch (Error e) - { - err = e; - } - if (re != null || ex != null || err != null) - { - if (re != null) - { - Console.debug("Caught runtime exception in googletracker init:", - re); - } - if (ex != null) - { - Console.warn( - "Failed to initialise GoogleTracker for Jalview Desktop with version " - + vrs, - ex); - } - if (err != null) - { - Console.error( - "Whilst initing GoogleTracker for Jalview Desktop version " - + vrs, - err); - } - } - else - { - Console.debug("Successfully initialised tracker."); - } + path = "/" + String.join("/", URLEncoder.encode(appName, "UTF-8"), + URLEncoder.encode(version, "UTF-8"), + URLEncoder.encode(APPLICATION_STARTED, "UTF-8")); + } catch (UnsupportedEncodingException e) + { + */ + List pathParts = new ArrayList<>(); + pathParts.add(appName); + pathParts.add(version); + pathParts.add(APPLICATION_STARTED); + path = ("/" + String.join("/", pathParts)).replace(' ', '+'); + /* } + */ + Plausible plausible = Plausible.getInstance(); + + // This will send a new "application_launch" event with parameters + // including the old-style "path", the channel name and version + plausible.sendEvent("application_launch", path, true); } + private static final String APPLICATION_STARTED = "Application Started"; + /** * get the user's default colour if available * @@ -1064,7 +1061,7 @@ public class Cache return date_format.parse(val); } catch (Exception ex) { - System.err.println("Invalid or corrupt date in property '" + jalview.bin.Console.errPrintln("Invalid or corrupt date in property '" + propertyName + "' : value was '" + val + "'"); } } @@ -1088,7 +1085,7 @@ public class Cache return Integer.valueOf(val); } catch (NumberFormatException x) { - System.err.println("Invalid integer in property '" + property + jalview.bin.Console.errPrintln("Invalid integer in property '" + property + "' (value was '" + val + "')"); } } @@ -1152,7 +1149,9 @@ public class Cache } } catch (Exception ex) { - System.out.println("Error loading User ColourFile\n" + ex); + if (!Jalview.quiet()) + jalview.bin.Console + .outPrintln("Error loading User ColourFile\n" + ex); } } if (!files.equals(coloursFound.toString())) @@ -1658,7 +1657,7 @@ public class Cache return null; if (!file.exists()) { - System.err.println("Could not load bootstrap preferences file '" + jalview.bin.Console.errPrintln("Could not load bootstrap preferences file '" + filename + "'"); return null; } @@ -1675,14 +1674,27 @@ public class Cache } } catch (FileNotFoundException e) { - System.err.println("Could not find bootstrap preferences file '" + jalview.bin.Console.errPrintln("Could not find bootstrap preferences file '" + file.getAbsolutePath() + "'"); } catch (IOException e) { - System.err.println( + jalview.bin.Console.errPrintln( "IOException when loading bootstrap preferences file '" + file.getAbsolutePath() + "'"); } return bootstrapProps; } + + public static void setSessionProperty(String key, String val) + { + if (key != null) + { + sessionProperties.put(key, val); + } + } + + public static String getSessionProperty(String key) + { + return key == null ? null : sessionProperties.get(key); + } }