X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCache.java;fp=src%2Fjalview%2Fbin%2FCache.java;h=8a06b7bf797c8385fdec33d3191a77c6691924e7;hb=d043ce47fc710d3eb2629ba926a8a7417bd67d8c;hp=370a2433c3d8b8bcd8683b89e500bf0581a9da5e;hpb=04c8f7bff663aa469127e9eed4164e02933782f1;p=jalview.git diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index 370a243..8a06b7b 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -42,10 +42,12 @@ import java.util.Locale; import java.util.Properties; import java.util.StringTokenizer; import java.util.TreeSet; +import java.util.regex.Pattern; import javax.swing.LookAndFeel; import javax.swing.UIManager; +import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI; import jalview.datamodel.PDBEntry; import jalview.gui.Preferences; import jalview.gui.UserDefinedColours; @@ -223,8 +225,24 @@ import jalview.ws.sifts.SiftsSettings; * @author $author$ * @version $Revision$ */ -public class Cache +public class Cache implements ApplicationSingletonI { + private Cache() + { + // private singleton + } + + /** + * In Java, this will be a static field instance, which will be + * application-specific; in JavaScript it will be an applet-specific instance + * tied to the applet's ThreadGroup. + * + * @return + */ + public static Cache getInstance() + { + return (Cache) ApplicationSingletonProvider.getInstance(Cache.class); + } /** * property giving log4j level for CASTOR loggers */ @@ -243,9 +261,8 @@ public class Cache /** * Sifts settings */ - public static final String DEFAULT_SIFTS_DOWNLOAD_DIR = System - .getProperty("user.home") + File.separatorChar - + ".sifts_downloads" + File.separatorChar; + public static final String DEFAULT_SIFTS_DOWNLOAD_DIR = Platform.getUserPath(".sifts_downloads/"); + private final static String DEFAULT_CACHE_THRESHOLD_IN_DAYS = "2"; @@ -254,8 +271,7 @@ public class Cache /** * Identifiers.org download settings */ - private static final String ID_ORG_FILE = System.getProperty("user.home") - + File.separatorChar + ".identifiers.org.ids.json"; + private static final String ID_ORG_FILE = Platform.getUserPath(".identifiers.org.ids.json"); /** * Allowed values are PDB or mmCIF @@ -278,7 +294,6 @@ public class Cache /** * Initialises the Jalview Application Log */ - public final static String JALVIEW_LOGGER_NAME = "JalviewLogger"; // save the proxy properties set at startup @@ -304,7 +319,7 @@ public class Cache public static char[] proxyAuthPassword = null; /** Jalview Properties */ - public static Properties applicationProperties = new Properties() + private Properties applicationProperties = new Properties() { // override results in properties output in alphabetical order @Override @@ -324,24 +339,30 @@ public class Cache private final static String JS_PROPERTY_PREFIX = "jalview_"; + /** - * Loads properties from the given properties file. Any existing properties - * are first cleared. + * Loads properties from the given properties file. Any existing properties are + * first cleared. */ public static void loadProperties(String propsFile) { + getInstance().loadPropertiesImpl(propsFile); + + } + + private void loadPropertiesImpl(String propsFile) + { propertiesFile = propsFile; String releasePropertiesFile = null; boolean defaultProperties = false; if (propsFile == null && !propsAreReadOnly) { + // TODO: @bsoares - for 2.12 testing: check test,develop,release props are located correctly String channelPrefsFilename = ChannelProperties .getProperty("preferences.filename"); String releasePrefsFilename = ".jalview_properties"; - propertiesFile = System.getProperty("user.home") + File.separatorChar - + channelPrefsFilename; - releasePropertiesFile = System.getProperty("user.home") - + File.separatorChar + releasePrefsFilename; + propertiesFile = Platform.getUserPath(channelPrefsFilename); + releasePropertiesFile = Platform.getUserPath(releasePrefsFilename); defaultProperties = true; } else @@ -599,7 +620,7 @@ public class Cache return url; } - public static void loadBuildProperties(boolean reportVersion) + public void loadBuildProperties(boolean reportVersion) { String codeInstallation = getProperty("INSTALLATION"); boolean printVersion = codeInstallation == null; @@ -662,7 +683,7 @@ public class Cache } } - private static void deleteBuildProperties() + private void deleteBuildProperties() { applicationProperties.remove("LATEST_VERSION"); applicationProperties.remove("VERSION"); @@ -674,28 +695,27 @@ public class Cache } /** - * Gets Jalview application property of given key. Returns null if key not - * found + * Gets Jalview application property of given key. Returns null if key not found * * @param key - * Name of property + * Name of property * * @return Property value */ public static String getProperty(String key) { - String prop = applicationProperties.getProperty(key); - if (prop == null && Platform.isJS()) - { - prop = applicationProperties.getProperty(Platform.getUniqueAppletID() - + "_" + JS_PROPERTY_PREFIX + key); - } + String prop = getInstance().applicationProperties.getProperty(key); + // if (prop == null && Platform.isJS()) + // { + // prop = applicationProperties.getProperty(Platform.getUniqueAppletID() + // + "_" + JS_PROPERTY_PREFIX + key); + // } return prop; } /** - * These methods are used when checking if the saved preference is different - * to the default setting + * These methods are used when checking if the saved preference is different to + * the default setting */ public static boolean getDefault(String property, boolean def) @@ -728,8 +748,8 @@ public class Cache } /** - * Answers the value of the given property, or the supplied default value if - * the property is not set + * Answers the value of the given property, or the supplied default value if the + * property is not set */ public static String getDefault(String property, String def) { @@ -741,41 +761,56 @@ public class Cache * Stores property in the file "HOME_DIR/.jalview_properties" * * @param key - * Name of object + * Name of object * @param obj - * String value of property + * String value of property * * @return previous value of property (or null) */ public static Object setProperty(String key, String obj) { - Object oldValue = null; - try - { - oldValue = applicationProperties.setProperty(key, obj); - if (propertiesFile != null && !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 + "\n" + ex); - } - return oldValue; + return getInstance().setPropertyImpl(key, obj, true); + } + + /** + * Removes the specified property from the jalview properties file + * + * @param key + */ + public static void removeProperty(String key) + { + getInstance().removePropertyImpl(key, true); + } + + /** + * Removes the named property for the running application, without saving the + * properties file + * + * BH noting that ColourMenuHelper calls this. If the intent is to save, then + * simply chanet that call to removeProperty(key). + * + * @param key + */ + public static void removePropertyNoSave(String key) + { + + getInstance(). + + removePropertyImpl(key, false); } /** - * remove the specified property from the jalview properties file + * Removes the named property, and optionally saves the current properties to + * file * - * @param string + * @param key + * @param andSave */ - public static void removeProperty(String string) + private void removePropertyImpl(String key, boolean andSave) { - applicationProperties.remove(string); - saveProperties(); + applicationProperties.remove(key); + if (andSave) + saveProperties(); } /** @@ -783,6 +818,15 @@ public class Cache */ public static void saveProperties() { + getInstance().savePropertiesImpl(); + } + + /** + * save the properties to the jalview properties path + */ + private void savePropertiesImpl() + + { if (!propsAreReadOnly) { try @@ -1005,9 +1049,9 @@ public class Cache * @param property * @param colour */ - public static void setColourProperty(String property, Color colour) + public static void setColourPropertyNoSave(String property, Color colour) { - setProperty(property, jalview.util.Format.getHexString(colour)); + setPropertyNoSave(property, jalview.util.Format.getHexString(colour)); } /** @@ -1035,11 +1079,16 @@ public class Cache public static Date getDateProperty(String propertyName) { String val = getProperty(propertyName); + if (val != null) { try { - return date_format.parse(val); + if ((val = val.trim()).indexOf(",") < 0 && val.indexOf("-") >= 0 && val.indexOf(" ") == val.lastIndexOf(" ")) { + val = val.replace(" ",", ").replace('-',' '); + } + Date date = date_format.parse(val); + return date; } catch (Exception ex) { System.err.println("Invalid or corrupt date in property '" @@ -1088,11 +1137,11 @@ public class Cache } if (value == null || value.trim().length() < 1) { - Cache.applicationProperties.remove(propName); + getInstance().applicationProperties.remove(propName); } else { - Cache.applicationProperties.setProperty(propName, value); + getInstance().applicationProperties.setProperty(propName, value); } } @@ -1100,7 +1149,7 @@ public class Cache * Loads in user colour schemes from files. * * @param files - * a '|'-delimited list of file paths + * a '|'-delimited list of file paths */ public static void initUserColourSchemes(String files) { @@ -1142,7 +1191,7 @@ public class Cache } else { - applicationProperties + getInstance().applicationProperties .remove(UserDefinedColours.USER_DEFINED_COLOURS); } } @@ -1233,7 +1282,53 @@ public class Cache { // consider returning more human friendly info // eg 'built from Source' or update channel - return Cache.getDefault("INSTALLATION", "unknown"); + return Cache.getDefault("INSTALLATION", "unknown"); + } + + /** + * + * For AppletParams and Preferences ok_actionPerformed and + * startupFileTextfield_mouseClicked + * + * Sets a property value for the running application, without saving it to the + * properties file + * + * @param key + * @param obj + */ + public static void setPropertyNoSave(String key, String obj) + { + getInstance().setPropertyImpl(key, obj, false); + } + + /** + * Sets a property value, and optionally also saves the current properties to + * file + * + * @param key + * @param obj + * @param andSave + * @return + */ + private Object setPropertyImpl( + String key, String obj, boolean andSave) + { + Object oldValue = null; + try + { + oldValue = applicationProperties.setProperty(key, obj); + if (andSave && !propsAreReadOnly && propertiesFile != null) + { + 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); + } + return oldValue; } public static String getStackTraceString(Throwable t)