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;
* <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_JWS2_SERVICES (true) when set to false, jalview will not
+ * auto-discover JABAWS services</li>
* <li>JWS2HOSTURLS comma-separated list of URLs to try for JABAWS services</li>
* <li>SHOW_WSDISCOVERY_ERRORS (true) Controls if the web service URL discovery
* warning dialog box is displayed.</li>
* <li>CHIMERA_PATH specify full path to Chimera program (if non-standard)</li>
* <li>ID_ORG_HOSTURL location of jalview service providing identifiers.org urls
* </li>
- *
* <li>NONEWS - when set disables Jalview News from automatically appearing</li>
+ * <li>NOHTMLTEMPLATES - when set, the
+ * https://github.com/jalview/exporter-templates/tree/master/biojs repository is
+ * not downloaded automatically</li>
+ * <li>NOIDENTIFIERSSERVICE - when set, jalview won't automatically download
+ * available URL linkouts via www.jalview.org/services/identifiers</li>
+ * <li>
* </ul>
* Deprecated settings:
* <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
+ * tied to the applet's ThreadGroup.
+ *
+ * @return
+ */
+ public static Cache getInstance()
+ {
+ return (Cache) ApplicationSingletonProvider.getInstance(Cache.class);
+ }
/**
* property giving log4j level for CASTOR loggers
*/
/**
* 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";
/**
* 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
/**
* Initialises the Jalview Application Log
*/
-
public final static String JALVIEW_LOGGER_NAME = "JalviewLogger";
// save the proxy properties set at startup
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
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
+ orgtimeout + " seconds.");
}
String remoteVersion = null;
- try
+ if (remoteBuildPropertiesUrl.startsWith("http"))
{
- System.setProperty("sun.net.client.defaultConnectTimeout",
- "5000");
- java.net.URL url = new java.net.URL(remoteBuildPropertiesUrl);
+ try
+ {
+ System.setProperty("sun.net.client.defaultConnectTimeout",
+ "5000");
- BufferedReader in = new BufferedReader(
- new InputStreamReader(url.openStream()));
+ URL url = new URL(remoteBuildPropertiesUrl);
- Properties remoteBuildProperties = new Properties();
- remoteBuildProperties.load(in);
- remoteVersion = remoteBuildProperties.getProperty("VERSION");
- } catch (Exception ex)
- {
- System.out
- .println("Non-fatal exception when checking version at "
- + remoteBuildPropertiesUrl + ":");
- System.out.println(ex);
- remoteVersion = getProperty("VERSION");
+ BufferedReader in = new BufferedReader(
+ new InputStreamReader(url.openStream()));
+
+ Properties remoteBuildProperties = new Properties();
+ remoteBuildProperties.load(in);
+ remoteVersion = remoteBuildProperties.getProperty("VERSION");
+ } catch (Exception ex)
+ {
+ System.out.println(
+ "Non-fatal exception when checking version at "
+ + remoteBuildPropertiesUrl + ":");
+ System.out.println(ex);
+ remoteVersion = getProperty("VERSION");
+ }
}
System.setProperty("sun.net.client.defaultConnectTimeout",
orgtimeout);
return url;
}
- public static void loadBuildProperties(boolean reportVersion)
+ public void loadBuildProperties(boolean reportVersion)
{
String codeInstallation = getProperty("INSTALLATION");
boolean printVersion = codeInstallation == null;
applicationProperties.put("VERSION",
buildProperties.getProperty("VERSION"));
}
+ if (buildProperties.getProperty("JAVA_COMPILE_VERSION", null) != null)
+ {
+ applicationProperties.put("JAVA_COMPILE_VERSION",
+ buildProperties.getProperty("JAVA_COMPILE_VERSION"));
+ }
} catch (Exception ex)
{
System.out.println("Error reading build details: " + ex);
}
}
- private static void deleteBuildProperties()
+ private void deleteBuildProperties()
{
applicationProperties.remove("LATEST_VERSION");
applicationProperties.remove("VERSION");
}
/**
- * 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)
}
/**
- * 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)
{
* 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();
}
/**
*/
public static void saveProperties()
{
+ getInstance().savePropertiesImpl();
+ }
+
+ /**
+ * save the properties to the jalview properties path
+ */
+ private void savePropertiesImpl()
+
+ {
if (!propsAreReadOnly)
{
try
if (jalview.jbgui.GDesktop.class.getClassLoader()
.loadClass("uk.ac.vamsas.client.VorbaId") != null)
{
- Console.debug("Found Vamsas Classes (uk.ac..vamsas.client.VorbaId can be loaded)");
+ Console.debug(
+ "Found Vamsas Classes (uk.ac..vamsas.client.VorbaId can be loaded)");
vamsasJarsArePresent = 1;
JLoggerLog4j lvclient = JLoggerLog4j.getLogger("uk.ac.vamsas",
Console.getCachedLogLevel("logs.Vamsas.Level"));
- JLoggerLog4j.addAppender(lvclient, Console.log, JALVIEW_LOGGER_NAME);
+ JLoggerLog4j.addAppender(lvclient, Console.log,
+ JALVIEW_LOGGER_NAME);
// Tell the user that debug is enabled
lvclient.debug(ChannelProperties.getProperty("app_name")
+ " Vamsas Client Debugging Output Follows.");
if (Cache.class.getClassLoader()
.loadClass("groovy.lang.GroovyObject") != null)
{
- Console.debug("Found Groovy (groovy.lang.GroovyObject can be loaded)");
+ Console.debug(
+ "Found Groovy (groovy.lang.GroovyObject can be loaded)");
groovyJarsArePresent = 1;
JLoggerLog4j lgclient = JLoggerLog4j.getLogger("groovy",
Console.getCachedLogLevel("logs.Groovy.Level"));
- JLoggerLog4j.addAppender(lgclient, Console.log, JALVIEW_LOGGER_NAME);
+ JLoggerLog4j.addAppender(lgclient, Console.log,
+ JALVIEW_LOGGER_NAME);
// Tell the user that debug is enabled
lgclient.debug(ChannelProperties.getProperty("app_name")
+ " Groovy Client Debugging Output Follows.");
.loadClass("com.boxysystems.jgoogleanalytics.FocusPoint");
} catch (Exception e)
{
- Console.debug("com.boxysystems.jgoogleanalytics package is not present - tracking not enabled.");
+ Console.debug(
+ "com.boxysystems.jgoogleanalytics package is not present - tracking not enabled.");
tracker = null;
jgoogleanalyticstracker = null;
trackerfocus = null;
{
if (re != null)
{
- Console.debug("Caught runtime exception in googletracker init:", re);
+ 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);
+ 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);
+ Console.error(
+ "Whilst initing GoogleTracker for Jalview Desktop version "
+ + vrs,
+ err);
}
}
else
Color col = ColorUtils.parseColourString(colprop);
if (col == null)
{
- Console.warn("Couldn't parse '" + colprop + "' as a colour for " + property);
+ Console.warn("Couldn't parse '" + colprop + "' as a colour for "
+ + property);
}
return (col == null) ? defcolour : col;
}
* @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));
}
/**
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 '"
}
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);
}
}
* 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)
{
}
else
{
- applicationProperties
+ getInstance().applicationProperties
.remove(UserDefinedColours.USER_DEFINED_COLOURS);
}
}
{
return;
}
- String line = prefix + (value != null ? value : defaultValue) + suffix;
- sb.append(line);
+ if (prefix != null)
+ sb.append(prefix);
+ sb.append(value == null ? defaultValue : value);
+ if (suffix != null)
+ sb.append(suffix);
}
/**
sb.append(" (");
sb.append(lafClass);
sb.append(")\n");
- // Not displayed in release version ( determined by possible version number
- // regex 9[9.]*9[.-_a9]* )
- if (Pattern.matches("^\\d[\\d\\.]*\\d[\\.\\-\\w]*$",
- Cache.getDefault("VERSION", "TEST")))
+ if (Console.isDebugEnabled()
+ || !"release".equals(ChannelProperties.getProperty("channel")))
{
+ appendIfNotNull(sb, "Channel: ",
+ ChannelProperties.getProperty("channel"), "\n", null);
appendIfNotNull(sb, "Getdown appdir: ",
- System.getProperty("getdownappdir"), "\n", null);
+ System.getProperty("getdowninstanceappdir"), "\n", null);
appendIfNotNull(sb, "Getdown appbase: ",
- System.getProperty("getdownappbase"), "\n", null);
+ System.getProperty("getdowninstanceappbase"), "\n", null);
appendIfNotNull(sb, "Java home: ", System.getProperty("java.home"),
"\n", "unknown");
}
{
// 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)
char[] displayHttpPw = new char[httpPassword == null ? 0
: httpPassword.length];
Arrays.fill(displayHttpPw, '*');
- Console.debug("CACHE Proxy: setting new Authenticator with httpUser='"
- + httpUser + "' httpPassword='" + displayHttpPw + "'");
+ Console.debug(
+ "CACHE Proxy: setting new Authenticator with httpUser='"
+ + httpUser + "' httpPassword='" + displayHttpPw
+ + "'");
if (!Platform.isJS())
/* *
* java.net.Authenticator not implemented in SwingJS yet
*
*/
{
- Console.debug("AUTHENTICATOR setting default Authenticator to null");
+ Console.debug(
+ "AUTHENTICATOR setting default Authenticator to null");
Authenticator.setDefault(null);
}
}
// nonProxyHosts not currently configurable in Preferences
- Console.debug("AUTHENTICATOR setting property 'http.nonProxyHosts' to \""
- + nonProxyHosts + "\"");
+ Console.debug(
+ "AUTHENTICATOR setting property 'http.nonProxyHosts' to \""
+ + nonProxyHosts + "\"");
setOrClearSystemProperty("http.nonProxyHosts", nonProxyHosts);
}