X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCache.java;h=1a4f3418168d75b6e5f16152c2c603126e40dc88;hb=a1984b1c8c273ed33c7ce9283039f4027dcae2de;hp=e96fef1caf9c38189c31ed8a9dcaaba0f157c775;hpb=197e43e3b7bc447d36ebdd690f1e8133b4f6262b;p=jalview.git diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index e96fef1..1a4f341 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -47,20 +47,19 @@ import java.util.regex.Pattern; import javax.swing.LookAndFeel; import javax.swing.UIManager; -import org.apache.log4j.ConsoleAppender; -import org.apache.log4j.Level; -import org.apache.log4j.Logger; -import org.apache.log4j.SimpleLayout; - import jalview.datamodel.PDBEntry; import jalview.gui.Preferences; import jalview.gui.UserDefinedColours; +import jalview.log.JLogger; +import jalview.log.JLoggerLog4j; import jalview.schemes.ColourSchemeLoader; import jalview.schemes.ColourSchemes; import jalview.schemes.UserColourScheme; import jalview.structure.StructureImportSettings; import jalview.urls.IdOrgSettings; +import jalview.util.ChannelProperties; import jalview.util.ColorUtils; +import jalview.util.Log4j; import jalview.util.MessageManager; import jalview.util.Platform; import jalview.ws.sifts.SiftsSettings; @@ -181,8 +180,8 @@ import jalview.ws.sifts.SiftsSettings; * when shading by annotation *
  • ANNOTATIONCOLOUR_MAX (red) Shade used for maximum value of annotation * when shading by annotation
  • - *
  • www.jalview.org (http://www.jalview.org) a property enabling all HTTP - * requests to be redirected to a mirror of http://www.jalview.org
  • + *
  • www.jalview.org (https://www.jalview.org) a property enabling all HTTP + * requests to be redirected to a mirror of https://www.jalview.org
  • *
  • FIGURE_AUTOIDWIDTH (false) Expand the left hand column of an exported * alignment figure to accommodate even the longest sequence ID or annotation * label.
  • @@ -274,7 +273,10 @@ public class Cache /** * Initialises the Jalview Application Log */ - public static Logger log; + + public final static String JALVIEW_LOGGER_NAME = "JalviewLogger"; + + public static JLoggerLog4j log; // save the proxy properties set at startup public final static String[] startupProxyProperties = { @@ -309,6 +311,9 @@ public class Cache } }; + /* build Properties (not all saved to .jalview_properties) */ + public static Properties buildProperties = new Properties(); + /** Default file is ~/.jalview_properties */ static String propertiesFile; @@ -316,51 +321,58 @@ public class Cache private final static String JS_PROPERTY_PREFIX = "jalview_"; - public static void initLogger() + public final static String LOGGING_TEST_MESSAGE = "Logging to STDERR"; + + public static JLogger.LogLevel getCachedLogLevel() + { + return getCachedLogLevel(JALVIEWLOGLEVEL); + } + + public static JLogger.LogLevel getCachedLogLevel(String key) + { + return JLogger.toLevel(Cache.getDefault(key, "INFO")); + } + + public static boolean initLogger() { if (log != null) { - return; + return true; } try { - // TODO: redirect stdout and stderr here in order to grab the output of - // the log - - ConsoleAppender ap = new ConsoleAppender(new SimpleLayout(), - "System.err"); - ap.setName("JalviewLogger"); - org.apache.log4j.Logger.getRootLogger().addAppender(ap); // catch all for + JLogger.LogLevel cachedLevel = getCachedLogLevel(); + if (!Platform.isJS()) + { + Log4j.init(cachedLevel); + } // log output - Logger laxis = Logger.getLogger("org.apache.axis"); - Logger lcastor = Logger.getLogger("org.exolab.castor"); - jalview.bin.Cache.log = Logger.getLogger("jalview.bin.Jalview"); - - laxis.setLevel(Level.toLevel( - Cache.getDefault("logs.Axis.Level", Level.INFO.toString()))); - lcastor.setLevel(Level.toLevel(Cache.getDefault("logs.Castor.Level", - Level.INFO.toString()))); - lcastor = Logger.getLogger("org.exolab.castor.xml"); - lcastor.setLevel(Level.toLevel(Cache.getDefault("logs.Castor.Level", - Level.INFO.toString()))); - // lcastor = Logger.getLogger("org.exolab.castor.xml.Marshaller"); - // lcastor.setLevel(Level.toLevel(Cache.getDefault("logs.Castor.Level", - // Level.INFO.toString()))); - // we shouldn't need to do this - org.apache.log4j.Logger.getRootLogger() - .setLevel(org.apache.log4j.Level.INFO); - - jalview.bin.Cache.log.setLevel(Level.toLevel(Cache - .getDefault("logs.Jalview.level", Level.INFO.toString()))); - // laxis.addAppender(ap); - // lcastor.addAppender(ap); - // jalview.bin.Cache.log.addAppender(ap); + // is laxis used? Does getLogger do anything without a Logger object? + // Logger laxis = Log4j.getLogger("org.apache.axis", myLevel); + JLoggerLog4j.getLogger("org.apache.axis", cachedLevel); + + // The main application logger + log = JLoggerLog4j.getLogger(JALVIEW_LOGGER_NAME, cachedLevel); + } catch (NoClassDefFoundError e) + { + System.err.println("Could not initialise the logger framework"); + e.printStackTrace(); + } + + // Test message + if (log != null) + { + // Logging test message should got through the logger object + if (log.loggerExists()) + log.debug(LOGGING_TEST_MESSAGE); // Tell the user that debug is enabled - jalview.bin.Cache.log.debug("Jalview Debugging Output Follows."); - } catch (Exception ex) + Cache.debug(ChannelProperties.getProperty("app_name") + + " Debugging Output Follows."); + return true; + } + else { - System.err.println("Problems initializing the log4j system\n"); - ex.printStackTrace(System.err); + return false; } } @@ -371,10 +383,18 @@ public class Cache public static void loadProperties(String propsFile) { propertiesFile = propsFile; + String releasePropertiesFile = null; + boolean defaultProperties = false; if (propsFile == null && !propsAreReadOnly) { + String channelPrefsFilename = ChannelProperties + .getProperty("preferences.filename"); + String releasePrefsFilename = ".jalview_properties"; propertiesFile = System.getProperty("user.home") + File.separatorChar - + ".jalview_properties"; + + channelPrefsFilename; + releasePropertiesFile = System.getProperty("user.home") + + File.separatorChar + releasePrefsFilename; + defaultProperties = true; } else { @@ -394,20 +414,29 @@ public class Cache InputStream fis; try { + // 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."); propsAreReadOnly = true; - } catch (Exception ex) { fis = null; } if (fis == null) { - fis = new FileInputStream(propertiesFile); + String readPropertiesFile = propertiesFile; + // if we're using the usual properties file and the channel properties + // file doesn't exist, read .jalview_properties + // (but we'll still save to the channel properties file). + if (defaultProperties && (!new File(propertiesFile).exists()) + && (new File(releasePropertiesFile).exists())) + { + readPropertiesFile = releasePropertiesFile; + } + fis = new FileInputStream(readPropertiesFile); } applicationProperties.clear(); applicationProperties.load(fis); @@ -489,27 +518,27 @@ public class Cache SiftsSettings .setMapWithSifts(Cache.getDefault("MAP_WITH_SIFTS", false)); - SiftsSettings.setSiftDownloadDirectory(jalview.bin.Cache + SiftsSettings.setSiftDownloadDirectory(Cache .getDefault("sifts_download_dir", DEFAULT_SIFTS_DOWNLOAD_DIR)); SiftsSettings.setFailSafePIDThreshold( - jalview.bin.Cache.getDefault("sifts_fail_safe_pid_threshold", + Cache.getDefault("sifts_fail_safe_pid_threshold", DEFAULT_FAIL_SAFE_PID_THRESHOLD)); SiftsSettings.setCacheThresholdInDays( - jalview.bin.Cache.getDefault("sifts_cache_threshold_in_days", + Cache.getDefault("sifts_cache_threshold_in_days", DEFAULT_CACHE_THRESHOLD_IN_DAYS)); IdOrgSettings.setUrl(getDefault("ID_ORG_HOSTURL", - "http://www.jalview.org/services/identifiers")); + "https://www.jalview.org/services/identifiers")); IdOrgSettings.setDownloadLocation(ID_ORG_FILE); - StructureImportSettings.setDefaultStructureFileFormat(jalview.bin.Cache - .getDefault("PDB_DOWNLOAD_FORMAT", PDB_DOWNLOAD_FORMAT)); + StructureImportSettings.setDefaultStructureFileFormat( + Cache.getDefault("PDB_DOWNLOAD_FORMAT", PDB_DOWNLOAD_FORMAT)); StructureImportSettings .setDefaultPDBFileParser(DEFAULT_PDB_FILE_PARSER); // StructureImportSettings - // .setDefaultPDBFileParser(jalview.bin.Cache.getDefault( + // .setDefaultPDBFileParser(Cache.getDefault( // "DEFAULT_PDB_FILE_PARSER", DEFAULT_PDB_FILE_PARSER)); String jnlpVersion = System.getProperty("jalview.version"); @@ -525,9 +554,13 @@ public class Cache class VersionChecker extends Thread { + @Override public void run() { + String remoteBuildPropertiesUrl = Cache + .getAppbaseBuildProperties(); + String orgtimeout = System .getProperty("sun.net.client.defaultConnectTimeout"); if (orgtimeout == null) @@ -541,28 +574,19 @@ public class Cache { System.setProperty("sun.net.client.defaultConnectTimeout", "5000"); - java.net.URL url = new java.net.URL(Cache - .getDefault("www.jalview.org", "http://www.jalview.org") - + "/webstart/jalview.jnlp"); + java.net.URL url = new java.net.URL(remoteBuildPropertiesUrl); + BufferedReader in = new BufferedReader( new InputStreamReader(url.openStream())); - String line = null; - while ((line = in.readLine()) != null) - { - if (line.indexOf("jalview.version") == -1) - { - continue; - } - line = line.substring(line.indexOf("value=") + 7); - line = line.substring(0, line.lastIndexOf("\"")); - remoteVersion = line; - break; - } + Properties remoteBuildProperties = new Properties(); + remoteBuildProperties.load(in); + remoteVersion = remoteBuildProperties.getProperty("VERSION"); } catch (Exception ex) { - System.out.println( - "Non-fatal exception when checking version at www.jalview.org :"); + System.out + .println("Non-fatal exception when checking version at " + + remoteBuildPropertiesUrl + ":"); System.out.println(ex); remoteVersion = getProperty("VERSION"); } @@ -637,8 +661,23 @@ public class Cache String buildDetails = resolveResourceURLFor("/.build_properties"); URL localJarFileURL = new URL(buildDetails); InputStream in = localJarFileURL.openStream(); - applicationProperties.load(in); + buildProperties.load(in); in.close(); + if (buildProperties.getProperty("BUILD_DATE", null) != null) + { + applicationProperties.put("BUILD_DATE", + buildProperties.getProperty("BUILD_DATE")); + } + if (buildProperties.getProperty("INSTALLATION", null) != null) + { + applicationProperties.put("INSTALLATION", + buildProperties.getProperty("INSTALLATION")); + } + if (buildProperties.getProperty("VERSION", null) != null) + { + applicationProperties.put("VERSION", + buildProperties.getProperty("VERSION")); + } } catch (Exception ex) { System.out.println("Error reading build details: " + ex); @@ -661,8 +700,8 @@ public class Cache new BuildDetails(codeVersion, null, codeInstallation); if (printVersion && reportVersion) { - System.out.println( - "Jalview Version: " + codeVersion + codeInstallation); + System.out.println(ChannelProperties.getProperty("app_name") + + " Version: " + codeVersion + codeInstallation); } } @@ -820,21 +859,19 @@ public class Cache if (jalview.jbgui.GDesktop.class.getClassLoader() .loadClass("uk.ac.vamsas.client.VorbaId") != null) { - jalview.bin.Cache.log.debug( - "Found Vamsas Classes (uk.ac..vamsas.client.VorbaId can be loaded)"); + debug("Found Vamsas Classes (uk.ac..vamsas.client.VorbaId can be loaded)"); vamsasJarsArePresent = 1; - Logger lvclient = Logger.getLogger("uk.ac.vamsas"); - lvclient.setLevel(Level.toLevel(Cache - .getDefault("logs.Vamsas.Level", Level.INFO.toString()))); - - lvclient.addAppender(log.getAppender("JalviewLogger")); + JLoggerLog4j lvclient = JLoggerLog4j.getLogger("uk.ac.vamsas", + getCachedLogLevel("logs.Vamsas.Level")); + JLoggerLog4j.addAppender(lvclient, log, JALVIEW_LOGGER_NAME); // Tell the user that debug is enabled - lvclient.debug("Jalview Vamsas Client Debugging Output Follows."); + lvclient.debug(ChannelProperties.getProperty("app_name") + + " Vamsas Client Debugging Output Follows."); } } catch (Exception e) { vamsasJarsArePresent = 0; - jalview.bin.Cache.log.debug("Vamsas Classes are not present"); + debug("Vamsas Classes are not present"); } } return (vamsasJarsArePresent > 0); @@ -859,25 +896,23 @@ public class Cache if (Cache.class.getClassLoader() .loadClass("groovy.lang.GroovyObject") != null) { - jalview.bin.Cache.log.debug( - "Found Groovy (groovy.lang.GroovyObject can be loaded)"); + debug("Found Groovy (groovy.lang.GroovyObject can be loaded)"); groovyJarsArePresent = 1; - Logger lgclient = Logger.getLogger("groovy"); - lgclient.setLevel(Level.toLevel(Cache - .getDefault("logs.Groovy.Level", Level.INFO.toString()))); - - lgclient.addAppender(log.getAppender("JalviewLogger")); + JLoggerLog4j lgclient = JLoggerLog4j.getLogger("groovy", + getCachedLogLevel("logs.Groovy.Level")); + JLoggerLog4j.addAppender(lgclient, log, JALVIEW_LOGGER_NAME); // Tell the user that debug is enabled - lgclient.debug("Jalview Groovy Client Debugging Output Follows."); + lgclient.debug(ChannelProperties.getProperty("app_name") + + " Groovy Client Debugging Output Follows."); } } catch (Error e) { groovyJarsArePresent = 0; - jalview.bin.Cache.log.debug("Groovy Classes are not present", e); + debug("Groovy Classes are not present", e); } catch (Exception e) { groovyJarsArePresent = 0; - jalview.bin.Cache.log.debug("Groovy Classes are not present"); + debug("Groovy Classes are not present"); } } return (groovyJarsArePresent > 0); @@ -911,8 +946,7 @@ public class Cache .loadClass("com.boxysystems.jgoogleanalytics.FocusPoint"); } catch (Exception e) { - log.debug( - "com.boxysystems.jgoogleanalytics package is not present - tracking not enabled."); + debug("com.boxysystems.jgoogleanalytics package is not present - tracking not enabled."); tracker = null; jgoogleanalyticstracker = null; trackerfocus = null; @@ -930,10 +964,9 @@ public class Cache .getConstructor(new Class[] { String.class, String.class, String.class }) .newInstance(new Object[] - { "Jalview Desktop", - (vrs = jalview.bin.Cache.getProperty("VERSION") + "_" - + jalview.bin.Cache.getDefault("BUILD_DATE", - "unknown")), + { ChannelProperties.getProperty("app_name") + " Desktop", + (vrs = Cache.getProperty("VERSION") + "_" + + Cache.getDefault("BUILD_DATE", "unknown")), "UA-9060947-1" }); jgoogleanalyticstracker .getMethod("trackAsynchronously", new Class[] @@ -954,57 +987,24 @@ public class Cache } if (re != null || ex != null || err != null) { - if (log != null) + if (re != null) { - if (re != null) - { - log.debug("Caught runtime exception in googletracker init:", - re); - } - if (ex != null) - { - log.warn( - "Failed to initialise GoogleTracker for Jalview Desktop with version " - + vrs, - ex); - } - if (err != null) - { - log.error( - "Whilst initing GoogleTracker for Jalview Desktop version " - + vrs, - err); - } + debug("Caught runtime exception in googletracker init:", re); } - else + if (ex != null) { - if (re != null) - { - System.err.println( - "Debug: Caught runtime exception in googletracker init:" - + vrs); - re.printStackTrace(); - } - if (ex != null) - { - System.err.println( - "Warning: Failed to initialise GoogleTracker for Jalview Desktop with version " - + vrs); - ex.printStackTrace(); - } - - if (err != null) - { - System.err.println( - "ERROR: Whilst initing GoogleTracker for Jalview Desktop version " - + vrs); - err.printStackTrace(); - } + warn("Failed to initialise GoogleTracker for Jalview Desktop with version " + + vrs, ex); + } + if (err != null) + { + error("Whilst initing GoogleTracker for Jalview Desktop version " + + vrs, err); } } else { - log.debug("Successfully initialised tracker."); + debug("Successfully initialised tracker."); } } } @@ -1026,8 +1026,7 @@ public class Cache Color col = ColorUtils.parseColourString(colprop); if (col == null) { - log.warn("Couldn't parse '" + colprop + "' as a colour for " - + property); + warn("Couldn't parse '" + colprop + "' as a colour for " + property); } return (col == null) ? defcolour : col; } @@ -1206,14 +1205,16 @@ public class Cache public static String getVersionDetailsForConsole() { StringBuilder sb = new StringBuilder(); - sb.append("Jalview Version: "); - sb.append(jalview.bin.Cache.getDefault("VERSION", "TEST")); + sb.append(ChannelProperties.getProperty("app_name")) + .append(" Version: "); + sb.append(Cache.getDefault("VERSION", "TEST")); sb.append("\n"); - sb.append("Jalview Installation: "); - sb.append(jalview.bin.Cache.getDefault("INSTALLATION", "unknown")); + sb.append(ChannelProperties.getProperty("app_name")) + .append(" Installation: "); + sb.append(Cache.getDefault("INSTALLATION", "unknown")); sb.append("\n"); sb.append("Build Date: "); - sb.append(jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")); + sb.append(Cache.getDefault("BUILD_DATE", "unknown")); sb.append("\n"); sb.append("Java version: "); sb.append(System.getProperty("java.version")); @@ -1241,10 +1242,12 @@ public class Cache // Not displayed in release version ( determined by possible version number // regex 9[9.]*9[.-_a9]* ) if (Pattern.matches("^\\d[\\d\\.]*\\d[\\.\\-\\w]*$", - jalview.bin.Cache.getDefault("VERSION", "TEST"))) + Cache.getDefault("VERSION", "TEST"))) { appendIfNotNull(sb, "Getdown appdir: ", System.getProperty("getdownappdir"), "\n", null); + appendIfNotNull(sb, "Getdown appbase: ", + System.getProperty("getdownappbase"), "\n", null); appendIfNotNull(sb, "Java home: ", System.getProperty("java.home"), "\n", "unknown"); } @@ -1259,7 +1262,7 @@ public class Cache { // consider returning more human friendly info // eg 'built from Source' or update channel - return jalview.bin.Cache.getDefault("INSTALLATION", "unknown"); + return Cache.getDefault("INSTALLATION", "unknown"); } public static String getStackTraceString(Throwable t) @@ -1329,7 +1332,7 @@ public class Cache case Cache.PROXYTYPE_NONE: if (!previousProxyType.equals(proxyType)) { - Cache.log.info("Setting no proxy settings"); + Cache.info("Setting no proxy settings"); Cache.setProxyProperties(null, null, null, null, null, null, null, null, null); } @@ -1337,7 +1340,7 @@ public class Cache case Cache.PROXYTYPE_CUSTOM: // always re-set a custom proxy -- it might have changed, particularly // password - Cache.log.info("Setting custom proxy settings"); + Cache.info("Setting custom proxy settings"); boolean proxyAuthSet = Cache.getDefault("PROXY_AUTH", false); Cache.setProxyProperties(Cache.getDefault("PROXY_SERVER", null), Cache.getDefault("PROXY_PORT", null), @@ -1351,7 +1354,7 @@ public class Cache proxyAuthSet ? Cache.proxyAuthPassword : null, "localhost"); break; default: // system proxy settings by default - Cache.log.info("Setting system proxy settings"); + Cache.info("Setting system proxy settings"); Cache.resetProxyProperties(); } } @@ -1400,86 +1403,97 @@ public class Cache { try { + char[] displayHttpPw = new char[httpPassword == null ? 0 + : httpPassword.length]; + Arrays.fill(displayHttpPw, '*'); Cache.debug("CACHE Proxy: setting new Authenticator with httpUser='" - + httpUser + "' httpPassword='" - + (proxyAuthPassword == null ? "null" - : new String(proxyAuthPassword)) - + "'"); // DELETE THIS LINE (password in logs) - Authenticator.setDefault(new Authenticator() + + httpUser + "' httpPassword='" + displayHttpPw + "'"); + if (!Platform.isJS()) + /* * + * java.net.Authenticator not implemented in SwingJS yet + * + * @j2sIgnore + * + */ { - @Override - protected PasswordAuthentication getPasswordAuthentication() + Authenticator.setDefault(new Authenticator() { - if (getRequestorType() == RequestorType.PROXY) + @Override + protected PasswordAuthentication getPasswordAuthentication() { - String protocol = getRequestingProtocol(); - boolean needProxyPasswordSet = false; - if (customProxySet && - // we have a username but no password for the scheme being - // requested - (protocol.equalsIgnoreCase("http") - && (httpUser != null && httpUser.length() > 0 - && (httpPassword == null - || httpPassword.length == 0))) - || (protocol.equalsIgnoreCase("https") - && (httpsUser != null - && httpsUser.length() > 0 - && (httpsPassword == null - || httpsPassword.length == 0)))) + if (getRequestorType() == RequestorType.PROXY) { - // open Preferences -> Connections - String message = MessageManager - .getString("label.proxy_password_required"); - Preferences.openPreferences(Preferences.CONNECTIONS_TAB, - message); - Preferences.getPreferences().proxyAuthPasswordFocus(); - } - else - { - try + String protocol = getRequestingProtocol(); + boolean needProxyPasswordSet = false; + if (customProxySet && + // we have a username but no password for the scheme being + // requested + (protocol.equalsIgnoreCase("http") + && (httpUser != null && httpUser.length() > 0 + && (httpPassword == null + || httpPassword.length == 0))) + || (protocol.equalsIgnoreCase("https") + && (httpsUser != null + && httpsUser.length() > 0 + && (httpsPassword == null + || httpsPassword.length == 0)))) { - if (protocol.equalsIgnoreCase("http") - && getRequestingHost().equalsIgnoreCase(httpHost) - && getRequestingPort() == Integer - .valueOf(httpPort)) + // open Preferences -> Connections + String message = MessageManager + .getString("label.proxy_password_required"); + Preferences.openPreferences( + Preferences.TabRef.CONNECTIONS_TAB, message); + Preferences.getInstance() + .proxyAuthPasswordCheckHighlight(true, true); + } + else + { + try { - char[] displayHttpPw = new char[httpPassword.length]; - Arrays.fill(displayHttpPw, '*'); - Cache.debug( - "AUTHENTICATOR returning PasswordAuthentication(\"" - + httpUser + "\", '" - + new String(displayHttpPw) + "')"); - return new PasswordAuthentication(httpUser, - httpPassword); - } - if (protocol.equalsIgnoreCase("https") - && getRequestingHost().equalsIgnoreCase(httpsHost) - && getRequestingPort() == Integer - .valueOf(httpsPort)) + if (protocol.equalsIgnoreCase("http") + && getRequestingHost() + .equalsIgnoreCase(httpHost) + && getRequestingPort() == Integer + .valueOf(httpPort)) + { + Cache.debug( + "AUTHENTICATOR returning PasswordAuthentication(\"" + + httpUser + "\", '" + + new String(displayHttpPw) + "')"); + return new PasswordAuthentication(httpUser, + httpPassword); + } + if (protocol.equalsIgnoreCase("https") + && getRequestingHost() + .equalsIgnoreCase(httpsHost) + && getRequestingPort() == Integer + .valueOf(httpsPort)) + { + char[] displayHttpsPw = new char[httpPassword.length]; + Arrays.fill(displayHttpsPw, '*'); + Cache.debug( + "AUTHENTICATOR returning PasswordAuthentication(\"" + + httpsUser + "\", '" + displayHttpsPw + + "'"); + return new PasswordAuthentication(httpsUser, + httpsPassword); + } + } catch (NumberFormatException e) { - char[] displayHttpsPw = new char[httpPassword.length]; - Arrays.fill(displayHttpsPw, '*'); - Cache.debug( - "AUTHENTICATOR returning PasswordAuthentication(\"" - + httpsUser + "\", '" + displayHttpsPw - + "'"); - return new PasswordAuthentication(httpsUser, - httpsPassword); + Cache.error("Problem with proxy port values [http:" + + httpPort + ", https:" + httpsPort + "]"); } - } catch (NumberFormatException e) - { - Cache.error("Problem with proxy port values [http:" - + httpPort + ", https:" + httpsPort + "]"); + Cache.debug( + "AUTHENTICATOR after trying to get PasswordAuthentication"); } - Cache.debug( - "AUTHENTICATOR after trying to get PasswordAuthentication"); } + // non proxy request + Cache.debug("AUTHENTICATOR returning null"); + return null; } - // non proxy request - Cache.debug("AUTHENTICATOR returning null"); - return null; - } - }); + }); + } // end of j2sIgnore for java.net.Authenticator + // required to re-enable basic authentication (should be okay for a // local proxy) Cache.debug( @@ -1495,8 +1509,20 @@ public class Cache { // reset the Authenticator to protect http.proxyUser and // http.proxyPassword Just In Case - Cache.debug("AUTHENTICATOR setting default Authenticator to null"); - Authenticator.setDefault(null); + /* as noted above, due to bug in java this doesn't work if the sun.net.www.protocol.http.AuthCache + * has working credentials. No workaround for Java 11. + */ + if (!Platform.isJS()) + /* * + * java.net.Authenticator not implemented in SwingJS yet + * + * @j2sIgnore + * + */ + { + Cache.debug("AUTHENTICATOR setting default Authenticator to null"); + Authenticator.setDefault(null); + } } // nonProxyHosts not currently configurable in Preferences @@ -1527,56 +1553,246 @@ public class Cache } } - public final static int DEBUG = 10; + public static void trace(String message) + { + if (initLogger()) + { + log.trace(message, null); + } + else + { + System.out.println(message); + } + } - public final static int INFO = 20; + public static void trace(String message, Throwable t) + { + if (initLogger()) + { + log.trace(message, t); + } + else + { + System.out.println(message); + t.printStackTrace(); + } + } - public final static int WARN = 30; + public static void debug(String message) + { + if (initLogger()) + { + log.debug(message, null); + } + else + { + System.out.println(message); + } - public final static int ERROR = 40; + } - public static boolean println(int level, String message) + public static void debug(String message, Throwable t) { - if (Cache.log == null) + if (initLogger()) { - if (level >= ERROR) - System.err.println(message); - else - System.out.println(message); - return false; + log.debug(message, t); } - if (level >= WARN) + else { - Cache.log.warn(message); + System.out.println(message); + t.printStackTrace(); } - else if (level >= INFO) + + } + + public static void info(String message) + { + if (initLogger()) { - Cache.log.info(message); + log.info(message, null); } else { - Cache.log.debug(message); + System.out.println(message); } - return true; + } - public static void debug(String message) + public static void info(String message, Throwable t) { - println(DEBUG, message); + if (initLogger()) + { + log.info(message, t); + } + else + { + System.out.println(message); + t.printStackTrace(); + } + } - public static void info(String message) + public static void warn(String message) { - println(INFO, message); + if (initLogger()) + { + log.warn(message, null); + } + else + { + System.out.println(message); + } + } - public static void warn(String message) + public static void warn(String message, Throwable t) { - println(WARN, message); + if (initLogger()) + { + log.warn(message, t); + } + else + { + System.out.println(message); + t.printStackTrace(); + } + } public static void error(String message) { - println(ERROR, message); + if (initLogger()) + { + log.error(message, null); + } + else + { + System.err.println(message); + } + + } + + public static void error(String message, Throwable t) + { + if (initLogger()) + { + log.error(message, t); + } + else + { + System.err.println(message); + t.printStackTrace(System.err); + } + + } + + public static void fatal(String message) + { + if (initLogger()) + { + log.fatal(message, null); + } + else + { + System.err.println(message); + } + + } + + public static void fatal(String message, Throwable t) + { + if (initLogger()) + { + log.fatal(message, t); + } + else + { + System.err.println(message); + t.printStackTrace(System.err); + } + + } + + public static boolean isDebugEnabled() + { + return log == null ? false : log.isDebugEnabled(); + } + + public static boolean isTraceEnabled() + { + return log == null ? false : log.isTraceEnabled(); + } + + /** + * Getdown appbase methods + */ + + private static final String releaseAppbase; + + private static String getdownAppbase; + + private static String getdownDistDir; + + static + { + if (!Platform.isJS()) + { + Float specversion = Float + .parseFloat(System.getProperty("java.specification.version")); + releaseAppbase = (specversion < 9) + ? "https://www.jalview.org/getdown/release/1.8" + : "https://www.jalview.org/getdown/release/11"; + } + else + { + // this value currenly made up, can be changed to URL that will be + // "https://www.jalview.org/jalview-js/swingjs/j2s/build_properties" + releaseAppbase = "https://www.jalview.org/jalview-js"; + getdownAppbase = releaseAppbase; + getdownDistDir = "/swingjs/j2s"; + } + } + + // look for properties (passed in by getdown) otherwise default to release + private static void setGetdownAppbase() + { + if (getdownAppbase != null) + { + return; + } + String appbase = System.getProperty("getdownappbase"); + String distDir = System.getProperty("getdowndistdir"); + if (appbase == null) + { + appbase = buildProperties.getProperty("GETDOWNAPPBASE"); + distDir = buildProperties.getProperty("GETDOWNAPPDISTDIR"); + } + if (appbase == null) + { + appbase = releaseAppbase; + distDir = "release"; + } + if (appbase.endsWith("/")) + { + appbase = appbase.substring(0, appbase.length() - 1); + } + if (distDir == null) + { + distDir = appbase.equals(releaseAppbase) ? "release" : "alt"; + } + getdownAppbase = appbase; + getdownDistDir = distDir; + } + + public static String getGetdownAppbase() + { + setGetdownAppbase(); + return getdownAppbase; + } + + public static String getAppbaseBuildProperties() + { + String appbase = getGetdownAppbase(); + return appbase + "/" + getdownDistDir + "/build_properties"; } }