*/
package jalview.bin;
+import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI;
import jalview.datamodel.PDBEntry;
-import jalview.gui.UserDefinedColours;
+import jalview.gui.Preferences;
import jalview.schemes.ColourSchemeLoader;
import jalview.schemes.ColourSchemes;
import jalview.schemes.UserColourScheme;
import jalview.ws.sifts.SiftsSettings;
import java.awt.Color;
+import java.awt.Dimension;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
* panel in web service preferences</li>
* </ul>
*
- * @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
*/
public static Cache getInstance()
{
- Instance i = Instance.getInstance();
- return (i.cache == null ? i.cache = new Cache() : i.cache);
+ return (Cache) ApplicationSingletonProvider.getInstance(Cache.class);
}
/**
*/
public static Logger log;
- private Cache()
- {
- // singleton
- }
-
/** Jalview Properties */
// BH 2019.05.08 was static
@SuppressWarnings("serial")
- private Properties applicationProperties = new Properties()
+ public Properties applicationProperties = new Properties()
{
// override results in properties output in alphabetical order
@Override
};
/** Default file is ~/.jalview_properties */
- // BH 2019.05.07 note: Instances of Jalview will share this file.
- static String propertiesFile;
+ private String propertiesFile;
/**
* flag to possibly allow properties to be written to a property file
getDefault("sifts_cache_threshold_in_days",
DEFAULT_CACHE_THRESHOLD_IN_DAYS));
- IdOrgSettings.setUrl(getDefault("ID_ORG_HOSTURL",
+ IdOrgSettings.setUrl(getDefault(Preferences.ID_ORG_HOSTURL,
"http://www.jalview.org/services/identifiers"));
IdOrgSettings.setDownloadLocation(ID_ORG_FILE);
.println("Jalview Version: " + codeVersion + codeInstallation);
StructureImportSettings.setDefaultStructureFileFormat(jalview.bin.Cache
- .getDefault("PDB_DOWNLOAD_FORMAT", PDB_DOWNLOAD_FORMAT));
+ .getDefault(Preferences.PDB_DOWNLOAD_FORMAT, PDB_DOWNLOAD_FORMAT));
StructureImportSettings
.setDefaultPDBFileParser(DEFAULT_PDB_FILE_PARSER);
// StructureImportSettings
setProperty("VERSION", codeVersion);
// LOAD USERDEFINED COLOURS
- initUserColourSchemes(getProperty("USER_DEFINED_COLOURS"));
+ initUserColourSchemes(getProperty(Preferences.USER_DEFINED_COLOURS));
}
private void deleteBuildProperties()
*/
public static String getProperty(String key)
{
- return getInstance().getPropertyImpl(key);
+ return getInstance().applicationProperties.getProperty(key);
}
- private String getPropertyImpl(String key)
+ /**
+ * Returns the boolean property value for the given property name. If the
+ * value is absent then the default value is returned instead.
+ *
+ * @param property
+ * @param def
+ * @return
+ */
+ public static boolean getDefault(String property, final boolean def)
{
- String prop = applicationProperties.getProperty(key);
- if (prop == null && Platform.isJS())
- {
- prop = applicationProperties.getProperty(Platform.getUniqueAppletID()
- + "_" + JS_PROPERTY_PREFIX + key);
- }
- return prop;
+ String string = getProperty(property);
+ return string == null ? def : Boolean.parseBoolean(string);
}
/**
- * These methods are used when checking if the saved preference is different
- * to the default setting
+ * Returns the integer property value for the given property name. If the
+ * value is absent, or malformed (not an integer), then the default value is
+ * returned instead.
+ *
+ * @param property
+ * @param def
+ * @return
*/
-
- public static boolean getDefault(String property, boolean def)
+ public static int getDefault(String property, final int def)
{
String string = getProperty(property);
if (string != null)
{
- def = Boolean.valueOf(string).booleanValue();
+ try
+ {
+ return Integer.parseInt(string);
+ } catch (NumberFormatException e)
+ {
+ System.out.println("Error parsing int property '" + property
+ + "' with value '" + string + "'");
+ }
}
return def;
}
- public static int getDefault(String property, int def)
+ /**
+ * retrieve a dimension, such as for Jmol
+ *
+ * @param property
+ * @param def
+ * @return
+ */
+ public static Dimension getDefaultDim(String property, Dimension def)
{
- String string = getProperty(property);
- if (string != null)
+ String s = getProperty(property);
+ if (s != null)
{
+ if (s.indexOf(',') < 0)
+ {
+ s = s.trim().replace(' ', ',');
+ if (s.indexOf(',') < 0)
+ {
+ s += "," + s;
+ }
+ }
try
{
- def = Integer.parseInt(string);
+ int pt = s.indexOf(",");
+ return new Dimension(Integer.parseInt(s.substring(0, pt)),
+ Integer.parseInt(s.substring(pt + 1)));
} catch (NumberFormatException e)
{
- System.out.println("Error parsing int property '" + property
- + "' with value '" + string + "'");
+ System.out.println("Error parsing Dimension property '" + property
+ + "' with value '" + s + "'");
}
}
-
return def;
}
/**
- * Answers the value of the given property, or the supplied default value if
+ * Returns the value of the given property, or the supplied default value if
* the property is not set
+ *
+ * @param property
+ * @param def
+ * @return
*/
- public static String getDefault(String property, String def)
+ public static String getDefault(String property, final String def)
{
String value = getProperty(property);
return value == null ? def : value;
return getInstance().setPropertyImpl(key, obj, true);
}
+ /**
+ * 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;
}
/**
- * remove the specified property from the jalview properties file
+ * Removes the specified property from the jalview properties file
*
* @param key
*/
getInstance().removePropertyImpl(key, true);
}
+ /**
+ * Removes the named property for the running application, without saving the
+ * properties file
+ *
+ * @param key
+ */
public static void removePropertyNoSave(String key)
{
getInstance().removePropertyImpl(key, false);
}
+ /**
+ * Removes the named property, and optionally saves the current properties to
+ * file
+ *
+ * @param key
+ * @param andSave
+ */
private void removePropertyImpl(String key, boolean andSave)
{
applicationProperties.remove(key);
}
}
+ /**
+ * Saves the current properties to file
+ */
public static void saveProperties()
{
getInstance().savePropertiesImpl();
}
/**
- * get the user's default colour if available
+ * Returns the Color value of the given property's value, or the supplied
+ * default colour if no property is found, or it cannot be parsed to a colour.
+ * Colours are normally saved as hex rgb values, though other formats may be
+ * parseable.
*
* @param property
- * @param defcolour
+ * @param defaultColour
* @return
+ * @see Cache#setColourPropertyNoSave(String, Color)
+ * @see ColorUtils#parseColourString(String)
*/
- public static Color getDefaultColour(String property, Color defcolour)
+ public static Color getDefaultColour(String property,
+ final Color defaultColour)
{
String colprop = getProperty(property);
if (colprop == null)
{
- return defcolour;
+ return defaultColour;
}
Color col = ColorUtils.parseColourString(colprop);
if (col == null)
log.warn("Couldn't parse '" + colprop + "' as a colour for "
+ property);
}
- return (col == null) ? defcolour : col;
+ return (col == null) ? defaultColour : col;
}
/**
- * store a colour as a Jalview user default property
+ * Stores a colour as a Jalview property, converted to hex values for rgb.
+ * Properties are not saved to file.
*
* @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));
}
/**
* Stores a formatted date in a jalview property, using a fixed locale.
+ * Updated properties are written out to the properties file.
*
* @param propertyName
* @param date
{
if (coloursFound.toString().length() > 1)
{
- setProperty(UserDefinedColours.USER_DEFINED_COLOURS,
+ setProperty(Preferences.USER_DEFINED_COLOURS,
coloursFound.toString());
}
else
{
getInstance().applicationProperties
- .remove(UserDefinedColours.USER_DEFINED_COLOURS);
+ .remove(Preferences.USER_DEFINED_COLOURS);
}
}
}