*/
package jalview.bin;
-import jalview.datamodel.PDBEntry;
-import jalview.gui.UserDefinedColours;
-import jalview.schemes.ColourSchemeLoader;
-import jalview.schemes.ColourSchemes;
-import jalview.schemes.UserColourScheme;
-import jalview.structure.StructureImportSettings;
-import jalview.urls.IdOrgSettings;
-import jalview.util.ColorUtils;
-import jalview.util.Platform;
-import jalview.ws.sifts.SiftsSettings;
-
import java.awt.Color;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collections;
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 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.UserDefinedColours;
+import jalview.schemes.ColourSchemeLoader;
+import jalview.schemes.ColourSchemes;
+import jalview.schemes.UserColourScheme;
+import jalview.structure.StructureImportSettings;
+import jalview.urls.IdOrgSettings;
+import jalview.util.ColorUtils;
+import jalview.util.Platform;
+import jalview.ws.sifts.SiftsSettings;
+
/**
* Stores and retrieves Jalview Application Properties Lists and fields within
* list entries are separated by '|' symbols unless otherwise stated (|) clauses
// 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);
InputStream fis;
try
{
- fis = new java.net.URL(propertiesFile).openStream();
+ fis = new URL(propertiesFile).openStream();
System.out.println(
"Loading jalview properties from : " + propertiesFile);
System.out.println(
}
// LOAD THE AUTHORS FROM THE authors.props file
- String authorDetails = (Platform.isJS() ? null
- : "jar:".concat(Cache.class.getProtectionDomain()
- .getCodeSource().getLocation().toString()
- .concat("!/authors.props")));
+ String authorDetails = resolveResourceURLFor("/authors.props");
try
{
if (authorDetails != null)
{
- java.net.URL localJarFileURL = new java.net.URL(authorDetails);
+ URL localJarFileURL = new URL(authorDetails);
InputStream in = localJarFileURL.openStream();
applicationProperties.load(in);
in.close();
}
if (authorDetails == null)
{
- applicationProperties.remove("AUTHORS");
- applicationProperties.remove("AUTHORFNAMES");
- applicationProperties.remove("YEAR");
+ applicationProperties.remove("AUTHORS");
+ applicationProperties.remove("AUTHORFNAMES");
+ applicationProperties.remove("YEAR");
}
- // FIND THE VERSION NUMBER AND BUILD DATE FROM jalview.jar
- // MUST FOLLOW READING OF LOCAL PROPERTIES FILE AS THE
- // VERSION MAY HAVE CHANGED SINCE LAST USING JALVIEW
- String buildDetails = (Platform.isJS() ? null
- : "jar:".concat(Cache.class.getProtectionDomain()
- .getCodeSource().getLocation().toString()
- .concat("!/.build_properties")));
- if (buildDetails != null)
- {
- try
- {
- java.net.URL localJarFileURL = new java.net.URL(buildDetails);
- InputStream in = localJarFileURL.openStream();
- applicationProperties.load(in);
- in.close();
- } catch (Exception ex)
- {
- System.out.println("Error reading build details: " + ex);
- buildDetails = null;
- }
- }
- if (buildDetails == null)
- {
- applicationProperties.remove("VERSION");
- }
- String jnlpVersion = System.getProperty("jalview.version");
- String codeVersion = getProperty("VERSION");
- String codeInstallation = getProperty("INSTALLATION");
- if (codeVersion == null)
- {
- // THIS SHOULD ONLY BE THE CASE WHEN TESTING!!
- codeVersion = "Test";
- jnlpVersion = "Test";
- codeInstallation = "";
- }
- else
- {
- codeInstallation = " (" + codeInstallation + ")";
- }
- new BuildDetails(codeVersion, null, codeInstallation);
+ loadBuildProperties(false);
SiftsSettings
.setMapWithSifts(Cache.getDefault("MAP_WITH_SIFTS", false));
"http://www.jalview.org/services/identifiers"));
IdOrgSettings.setDownloadLocation(ID_ORG_FILE);
- System.out
- .println("Jalview Version: " + codeVersion + codeInstallation);
-
StructureImportSettings.setDefaultStructureFileFormat(jalview.bin.Cache
.getDefault("PDB_DOWNLOAD_FORMAT", PDB_DOWNLOAD_FORMAT));
StructureImportSettings
// StructureImportSettings
// .setDefaultPDBFileParser(jalview.bin.Cache.getDefault(
// "DEFAULT_PDB_FILE_PARSER", DEFAULT_PDB_FILE_PARSER));
- // jnlpVersion will be null if we're using InstallAnywhere
+
+ String jnlpVersion = System.getProperty("jalview.version");
+
+ // jnlpVersion will be null if a latest version check for the channel needs
+ // to be done
// Dont do this check if running in headless mode
+
if (jnlpVersion == null && getDefault("VERSION_CHECK", true)
&& (System.getProperty("java.awt.headless") == null || System
.getProperty("java.awt.headless").equals("false")))
}
}
- setProperty("VERSION", codeVersion);
-
// LOAD USERDEFINED COLOURS
- jalview.bin.Cache
- .initUserColourSchemes(getProperty("USER_DEFINED_COLOURS"));
+ Cache.initUserColourSchemes(getProperty("USER_DEFINED_COLOURS"));
jalview.io.PIRFile.useModellerOutput = Cache.getDefault("PIR_MODELLER",
false);
}
+ /**
+ * construct a resource URL for the given absolute resource pathname
+ *
+ * @param resourcePath
+ * @return
+ */
+ private static String resolveResourceURLFor(String resourcePath)
+ {
+ String url = null;
+ if (Platform.isJS() || !Cache.class.getProtectionDomain()
+ .getCodeSource().getLocation().toString().endsWith(".jar"))
+ {
+ try
+ {
+ url = Cache.class.getResource(resourcePath).toString();
+ } catch (Exception ex)
+ {
+ System.err.println("Failed to resolve resource " + resourcePath
+ + ": " + ex.getMessage());
+ }
+ }
+ else
+ {
+ url = "jar:".concat(Cache.class.getProtectionDomain().getCodeSource()
+ .getLocation().toString().concat("!" + resourcePath));
+ }
+ return url;
+ }
+
+ public static void loadBuildProperties(boolean reportVersion)
+ {
+ String codeInstallation = getProperty("INSTALLATION");
+ boolean printVersion = codeInstallation == null;
+
+ /*
+ * read build properties - from the Jalview jar for a Java distribution,
+ * or from codebase file in test or JalviewJS context
+ */
+ try
+ {
+ String buildDetails = resolveResourceURLFor("/.build_properties");
+ URL localJarFileURL = new URL(buildDetails);
+ InputStream in = localJarFileURL.openStream();
+ applicationProperties.load(in);
+ in.close();
+ } catch (Exception ex)
+ {
+ System.out.println("Error reading build details: " + ex);
+ applicationProperties.remove("VERSION");
+ }
+ String codeVersion = getProperty("VERSION");
+ codeInstallation = getProperty("INSTALLATION");
+
+ if (codeVersion == null)
+ {
+ // THIS SHOULD ONLY BE THE CASE WHEN TESTING!!
+ codeVersion = "Test";
+ codeInstallation = "";
+ }
+ else
+ {
+ codeInstallation = " (" + codeInstallation + ")";
+ }
+ setProperty("VERSION", codeVersion);
+ new BuildDetails(codeVersion, null, codeInstallation);
+ if (printVersion && reportVersion)
+ {
+ System.out.println(
+ "Jalview Version: " + codeVersion + codeInstallation);
+ }
+ }
private static void deleteBuildProperties()
{
try
{
oldValue = applicationProperties.setProperty(key, obj);
- if (!propsAreReadOnly)
+ if (propertiesFile != null && !propsAreReadOnly)
{
FileOutputStream out = new FileOutputStream(propertiesFile);
applicationProperties.store(out, "---JalviewX Properties File---");
}
}
+ /**
+ * Initial logging information helper for various versions output
+ *
+ * @param prefix
+ * @param value
+ * @param defaultValue
+ */
+ private static void appendIfNotNull(StringBuilder sb, String prefix,
+ String value, String suffix, String defaultValue)
+ {
+ if (value == null && defaultValue == null)
+ {
+ return;
+ }
+ String line = prefix + (value != null ? value : defaultValue) + suffix;
+ sb.append(line);
+ }
+
+ /**
+ *
+ * @return Jalview version, build details and JVM platform version for console
+ */
+ public static String getVersionDetailsForConsole()
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Jalview Version: ");
+ sb.append(jalview.bin.Cache.getDefault("VERSION", "TEST"));
+ sb.append("\n");
+ sb.append("Jalview Installation: ");
+ sb.append(jalview.bin.Cache.getDefault("INSTALLATION", "unknown"));
+ sb.append("\n");
+ sb.append("Build Date: ");
+ sb.append(jalview.bin.Cache.getDefault("BUILD_DATE", "unknown"));
+ sb.append("\n");
+ sb.append("Java version: ");
+ sb.append(System.getProperty("java.version"));
+ sb.append("\n");
+ sb.append(System.getProperty("os.arch"));
+ sb.append(" ");
+ sb.append(System.getProperty("os.name"));
+ sb.append(" ");
+ sb.append(System.getProperty("os.version"));
+ sb.append("\n");
+ appendIfNotNull(sb, "Install4j version: ",
+ System.getProperty("sys.install4jVersion"), "\n", null);
+ appendIfNotNull(sb, "Install4j template version: ",
+ System.getProperty("installer_template_version"), "\n", null);
+ appendIfNotNull(sb, "Launcher version: ",
+ System.getProperty("launcher_version"), "\n", null);
+ LookAndFeel laf = UIManager.getLookAndFeel();
+ String lafName = laf == null ? "Not obtained" : laf.getName();
+ String lafClass = laf == null ? "unknown" : laf.getClass().getName();
+ sb.append("LookAndFeel: ");
+ sb.append(lafName);
+ 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]*$",
+ jalview.bin.Cache.getDefault("VERSION", "TEST")))
+ {
+ appendIfNotNull(sb, "Getdown appdir: ",
+ System.getProperty("getdownappdir"), "\n", null);
+ appendIfNotNull(sb, "Java home: ", System.getProperty("java.home"),
+ "\n", "unknown");
+ }
+ return sb.toString();
+ }
+
+ /**
+ *
+ * @return build details as reported in splashscreen
+ */
+ public static String getBuildDetailsForSplash()
+ {
+ // consider returning more human friendly info
+ // eg 'built from Source' or update channel
+ return jalview.bin.Cache.getDefault("INSTALLATION", "unknown");
+ }
+
+ public static String getStackTraceString(Throwable t)
+ {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+ t.printStackTrace(pw);
+ return sw.toString();
+ }
}