Release and build date methods changed
[jalview.git] / src / jalview / bin / Cache.java
index a5231e1..d4c7e5d 100755 (executable)
-/********************\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
-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
+import java.net.*;\r
 \r
-  public static void loadProperties()\r
-  {\r
-    applicationProperties = new Properties();\r
 \r
-    try\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
-    }\r
-    catch (Exception ex)\r
-    {\r
-      ex.printStackTrace();\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>jalview.browser - used in the jalview.utils.browserLauncher class if it doesn't know what else to do.\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
 \r
-  }\r
+    /** Jalview Properties */\r
+    public static Properties applicationProperties;\r
 \r
-  public static String getProperty(String key)\r
-  {\r
-    return  applicationProperties.getProperty(key);\r
-  }\r
+    /** Default file is  ~/.jalview_properties */\r
+    static String propertiesFile;\r
 \r
-  public static void setProperty(String key, String obj)\r
-  {\r
-    try\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
-\r
-      applicationProperties.setProperty(key, obj);\r
-\r
-      applicationProperties.store(out, "---JalviewX Properties File---");\r
-      out.close();\r
+        applicationProperties = new Properties();\r
+\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
+            fis.close();\r
+        }\r
+        catch (Exception ex)\r
+        {\r
+          System.out.println("Error reading properties file: "+ex);\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
+        }\r
+\r
+        String jnlpVersion = System.getProperty("jalview.version");\r
+        String codeVersion = getProperty("VERSION");\r
+\r
+        // jnlpVersion will be null if we're using InstallAnywhere\r
+        if(jnlpVersion==null)\r
+        {\r
+          try{\r
+            java.net.URL url = new java.net.URL("http://www.jalview.org/webstart/jalview.jnlp");\r
+            BufferedReader in = new BufferedReader(new InputStreamReader(url.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
+              setProperty("jalview.version", line);\r
+            }\r
+          }catch(Exception ex)\r
+          {setProperty("jalview.version", codeVersion);}\r
+        }\r
     }\r
-    catch (Exception ex)\r
-    {}\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
+     * 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
 \r
+            applicationProperties.setProperty(key, obj);\r
 \r
+            applicationProperties.store(out, "---JalviewX Properties File---");\r
+            out.close();\r
+        }\r
+        catch (Exception ex)\r
+        {\r
+        }\r
 \r
+        return obj;\r
+    }\r
 }\r