-/********************\r
- * 2004 Jalview Reengineered\r
- * Barton Group\r
- * Dundee University\r
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer\r
+ * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
*\r
- * AM Waterhouse\r
- *******************/\r
+ * This program is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License\r
+ * as published by the Free Software Foundation; either version 2\r
+ * of the License, or (at your option) any later version.\r
+ *\r
+ * This program is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with this program; if not, write to the Free Software\r
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\r
+ */\r
+package jalview.bin;\r
\r
+import java.io.*;\r
\r
-package jalview.bin;\r
import java.util.*;\r
-import java.io.*;\r
\r
+import org.apache.log4j.Logger;\r
+import org.apache.log4j.SimpleLayout;\r
+import org.apache.log4j.Level;\r
+import org.apache.log4j.ConsoleAppender;\r
+\r
+\r
+/**\r
+ * Stores and retrieves Jalview Application Properties\r
+ * <br><br>Current properties include:\r
+ * <br>logs.Axis.Level - one of the stringified Levels for log4j controlling the logging level for axis (used for web services)\r
+ * <br>logs.Castor.Level - one of the stringified Levels for log4j controlling the logging level for castor (used for serialization)\r
+ * <br>logs.Jalview.Level - Cache.log stringified level.\r
+ * <br>DISCOVERY_START - Boolean - controls if discovery services are queried on startup\r
+ * <br>DISCOVERY_URLS - comma separated list of Discovery Service endpoints.\r
+ * <br>SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_Y=285,SCREEN_X=371,SHOW_FULLSCREEN\r
+ * FONT_NAME,FONT_SIZE,FONT_STYLE,GAP_SYMBOL,LAST_DIRECTORY,USER_DEFINED_COLOUR\r
+ * SHOW_FULL_ID,SHOW_IDENTITY,SHOW_QUALITY,SHOW_ANNOTATIONS,SHOW_CONSERVATION,\r
+ * DEFAULT_COLOUR,DEFAULT_FILE_FORMAT,STARTUP_FILE,SHOW_STARTUP_FILE\r
+\r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
public class Cache\r
{\r
- public static Properties applicationProperties;\r
- // Current properties include:\r
- //\r
- // LAST_DIRECTORY , use this to cache record of where the user looked to find a file\r
- // UNIPROT_CACHE\r
+ /**\r
+ * Initialises the Apache Axis logger\r
+ */\r
+ public static Logger log;\r
\r
- public static void loadProperties()\r
- {\r
- applicationProperties = new Properties();\r
+ /** Jalview Properties */\r
+ public static Properties applicationProperties = new Properties();\r
\r
- try\r
+ /** Default file is ~/.jalview_properties */\r
+ static String propertiesFile;\r
+\r
+ public static void initLogger()\r
{\r
- FileInputStream in = new FileInputStream(System.getProperty("user.home") +\r
- "/.jalview_properties");\r
- applicationProperties = new Properties();\r
- applicationProperties.load(in);\r
- in.close();\r
+ try\r
+ {\r
+ Logger laxis = Logger.getLogger("org.apache.axis");\r
+ Logger lcastor = Logger.getLogger("org.exolab.castor");\r
+ jalview.bin.Cache.log = Logger.getLogger("jalview.bin.Jalview");\r
+\r
+ laxis.setLevel(Level.toLevel(Cache.getDefault("logs.Axis.Level",\r
+ Level.INFO.toString())));\r
+ lcastor.setLevel(Level.toLevel(Cache.getDefault("logs.Castor.Level",\r
+ Level.INFO.toString())));\r
+ jalview.bin.Cache.log.setLevel(Level.toLevel(Cache.getDefault(\r
+ "logs.Jalview.level",\r
+ Level.INFO.toString())));\r
+\r
+ ConsoleAppender ap = new ConsoleAppender(new SimpleLayout(),\r
+ "System.err");\r
+ ap.setName("JalviewLogger");\r
+\r
+ laxis.addAppender(ap);\r
+ lcastor.addAppender(ap);\r
+ jalview.bin.Cache.log.addAppender(ap);\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ System.err.println("Problems initializing the log4j system\n");\r
+ }\r
}\r
- catch (Exception ex)\r
- { }\r
- }\r
-\r
- public static String getProperty(String key)\r
- {\r
- return applicationProperties.getProperty(key);\r
- }\r
-\r
- public static String setProperty(String key, String obj)\r
- {\r
- try\r
+\r
+\r
+ /** Called when Jalview is started */\r
+ public static void loadProperties(String propsFile)\r
{\r
- FileOutputStream out = new FileOutputStream(System.getProperty(\r
- "user.home") + "/.jalview_properties");\r
+ propertiesFile = propsFile;\r
+ if (propsFile == null)\r
+ {\r
+ propertiesFile = System.getProperty("user.home") + "/.jalview_properties";\r
+ }\r
+\r
+ try\r
+ {\r
+ FileInputStream fis = new FileInputStream(propertiesFile);\r
+ applicationProperties.load(fis);\r
+ applicationProperties.remove("LATEST_VERSION");\r
+ applicationProperties.remove("VERSION");\r
+ fis.close();\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ System.out.println("Error reading properties file: "+ex);\r
+ }\r
+\r
+ if(getDefault("USE_PROXY", false))\r
+ {\r
+ System.out.println("Using proxyServer: "+getDefault("PROXY_SERVER", null)+\r
+ " proxyPort: "+getDefault("PROXY_PORT", null));\r
+ System.setProperty("http.proxyHost", getDefault("PROXY_SERVER", null));\r
+ System.setProperty("http.proxyPort", getDefault("PROXY_PORT", null));\r
+ }\r
+\r
+ // FIND THE VERSION NUMBER AND BUILD DATE FROM jalview.jar\r
+ // MUST FOLLOW READING OF LOCAL PROPERTIES FILE AS THE\r
+ // VERSION MAY HAVE CHANGED SINCE LAST USING JALVIEW\r
+ try\r
+ {\r
+ String buildDetails = "jar:"\r
+ .concat(\r
+ Cache.class.getProtectionDomain().getCodeSource().getLocation().toString()\r
+ .concat("!/.build_properties")\r
+ );\r
+\r
+ java.net.URL localJarFileURL = new java.net.URL(buildDetails);\r
+\r
+ InputStream in = localJarFileURL.openStream();\r
+ applicationProperties.load(in);\r
+ in.close();\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ System.out.println("Error reading build details: "+ex);\r
+ applicationProperties.remove("VERSION");\r
+ }\r
+\r
+ String jnlpVersion = System.getProperty("jalview.version");\r
+ String codeVersion = getProperty("VERSION");\r
+\r
+\r
+ if(codeVersion==null)\r
+ {\r
+ // THIS SHOULD ONLY BE THE CASE WHEN TESTING!!\r
+ codeVersion = "Test";\r
+ jnlpVersion = "Test";\r
+ }\r
\r
- applicationProperties.setProperty(key, obj);\r
\r
- applicationProperties.store(out, "---JalviewX Properties File---");\r
- out.close();\r
+ System.out.println("Jalview Version: "+codeVersion);\r
+\r
+\r
+ // jnlpVersion will be null if we're using InstallAnywhere\r
+ // Dont do this check if running in headless mode\r
+ if(jnlpVersion==null && (\r
+ System.getProperty("java.awt.headless")==null\r
+ || System.getProperty("java.awt.headless").equals("false")))\r
+ {\r
+\r
+ class VersionChecker\r
+ extends Thread\r
+ {\r
+ public void run()\r
+ {\r
+ String jnlpVersion = null;\r
+ try\r
+ {\r
+ java.net.URL url = new java.net.URL(\r
+ "http://www.jalview.org/webstart/jalview.jnlp");\r
+ BufferedReader in = new BufferedReader(new InputStreamReader(url.\r
+ openStream()));\r
+ String line = null;\r
+ while ( (line = in.readLine()) != null)\r
+ {\r
+ if (line.indexOf("jalview.version") == -1)\r
+ continue;\r
+\r
+ line = line.substring(line.indexOf("value=") + 7);\r
+ line = line.substring(0, line.lastIndexOf("\""));\r
+ jnlpVersion = line;\r
+ break;\r
+ }\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ System.out.println(ex);\r
+ jnlpVersion = getProperty("VERSION");\r
+ }\r
+\r
+ setProperty("LATEST_VERSION", jnlpVersion);\r
+ }\r
+ }\r
+\r
+ VersionChecker vc = new VersionChecker();\r
+ vc.start();\r
+ }\r
+ else\r
+ {\r
+ if(jnlpVersion!=null)\r
+ setProperty("LATEST_VERSION", jnlpVersion);\r
+ else\r
+ applicationProperties.remove("LATEST_VERSION");\r
+ }\r
+\r
+ setProperty("VERSION", codeVersion);\r
+\r
+ //LOAD USERDEFINED COLOURS\r
+ jalview.gui.UserDefinedColours.initUserColourSchemes( getProperty("USER_DEFINED_COLOURS"));\r
}\r
- catch (Exception ex)\r
- {}\r
\r
- return obj;\r
\r
- }\r
\r
+ /**\r
+ * Gets Jalview application property of given key. Returns null\r
+ * if key not found\r
+ *\r
+ * @param key Name of property\r
+ *\r
+ * @return Property value\r
+ */\r
+ public static String getProperty(String key)\r
+ {\r
+ return applicationProperties.getProperty(key);\r
+ }\r
\r
\r
+ /** These methods are used when checking if the saved preference\r
+ * is different to the default setting\r
+ */\r
\r
+ public static boolean getDefault(String property, boolean def)\r
+ {\r
+ String string = getProperty(property);\r
+ if (string != null)\r
+ {\r
+ def = Boolean.valueOf(string).booleanValue();\r
+ }\r
\r
+ return def;\r
+ }\r
+\r
+ /** These methods are used when checking if the saved preference\r
+ * is different to the default setting\r
+ */\r
+ public static String getDefault(String property, String def)\r
+ {\r
+ String string = getProperty(property);\r
+ if (string != null)\r
+ {\r
+ return string;\r
+ }\r
+\r
+ return def;\r
+ }\r
+\r
+\r
+ /**\r
+ * Stores property in the file "HOME_DIR/.jalview_properties"\r
+ *\r
+ * @param key Name of object\r
+ * @param obj String value of property\r
+ *\r
+ * @return String value of property\r
+ */\r
+ public static String setProperty(String key, String obj)\r
+ {\r
+ try\r
+ {\r
+ FileOutputStream out = new FileOutputStream(propertiesFile);\r
+ applicationProperties.setProperty(key, obj);\r
+ applicationProperties.store(out, "---JalviewX Properties File---");\r
+ out.close();\r
+ }\r
+ catch (Exception ex)\r
+ { System.out.println("Error setting property: "+key+" "+obj+"\n"+ex); }\r
+ return obj;\r
+ }\r
+\r
+ public static void saveProperties()\r
+ {\r
+ try\r
+ {\r
+ FileOutputStream out = new FileOutputStream(propertiesFile);\r
+ applicationProperties.store(out, "---JalviewX Properties File---");\r
+ out.close();\r
+ }\r
+ catch (Exception ex)\r
+ { System.out.println("Error saving properties: "+ex); }\r
+ }\r
}\r