prevent exception when no default timeout is specified
[jalview.git] / src / jalview / bin / Cache.java
index 72fec6c..0744cd9 100755 (executable)
@@ -25,16 +25,71 @@ import org.apache.log4j.*;
 
 /**
  * Stores and retrieves Jalview Application Properties
+ * Lists and fields within list entries are separated by '|' symbols unless otherwise stated
+ * (|) clauses are alternative values for a tag.
  * <br><br>Current properties include:
+ * <ul>
  * <br>logs.Axis.Level - one of the stringified Levels for log4j controlling the logging level for axis (used for web services)
- * <br>logs.Castor.Level - one of the stringified Levels for log4j controlling the logging level for castor (used for serialization)
- * <br>logs.Jalview.Level - Cache.log stringified level.
- * <br>DISCOVERY_START - Boolean - controls if discovery services are queried on startup
- * <br>DISCOVERY_URLS - comma separated list of Discovery Service endpoints.
- * <br>SCREEN_WIDTH,SCREEN_HEIGHT,SCREEN_Y=285,SCREEN_X=371,SHOW_FULLSCREEN
- * FONT_NAME,FONT_SIZE,FONT_STYLE,GAP_SYMBOL,LAST_DIRECTORY,USER_DEFINED_COLOUR
- * SHOW_FULL_ID,SHOW_IDENTITY,SHOW_QUALITY,SHOW_ANNOTATIONS,SHOW_CONSERVATION,
- * DEFAULT_COLOUR,DEFAULT_FILE_FORMAT,STARTUP_FILE,SHOW_STARTUP_FILE
+ * <br>
+ * </li><li>logs.Castor.Level - one of the stringified Levels for log4j controlling the logging level for castor (used for serialization)
+ * <br>
+ * </li><li>logs.Jalview.Level - Cache.log stringified level.
+ * <br>
+ * </li><li>DISCOVERY_START - Boolean - controls if discovery services are queried on startup
+ * </li><li>DISCOVERY_URLS - comma separated list of Discovery Service endpoints.
+ * </li><li>SCREEN_WIDTH
+ * </li><li>SCREEN_HEIGHT
+ * </li><li>SCREEN_Y=285
+ * </li><li>SCREEN_X=371
+ * </li><li>SHOW_FULLSCREEN boolean
+ * </li><li>FONT_NAME java font name for alignment text display
+ * </li><li>FONT_SIZE size of displayed alignment text
+ * </li><li>FONT_STYLE style of font displayed (sequence labels are always italic)
+ * </li><li>GAP_SYMBOL character to treat as gap symbol (usually -,.,' ')
+ * </li><li>LAST_DIRECTORY last directory for browsing alignment
+ * </li><li>USER_DEFINED_COLOURS list of user defined colour scheme files
+ * </li><li>SHOW_FULL_ID show id with '/start-end' numbers appended
+ * </li><li>SHOW_IDENTITY show percentage identity annotation
+ * </li><li>SHOW_QUALITY show alignment quality annotation
+ * </li><li>SHOW_ANNOTATIONS show alignment annotation rows
+ * </li><li>SHOW_CONSERVATION show alignment conservation annotation
+ * </li><li>CENTRE_COLUMN_LABELS centre the labels at each column in a displayed annotation row 
+ * </li><li>DEFAULT_COLOUR default colour scheme to apply for a new alignment
+ * </li><li>DEFAULT_FILE_FORMAT file format used to save 
+ * </li><li>STARTUP_FILE file loaded on startup (may be a fully qualified url)
+ * </li><li>SHOW_STARTUP_FILE flag to control loading of startup file
+ * </li><li>VERSION the version of the jalview build
+ * </li><li>BUILD_DATE date of this build
+ * </li><li>LATEST_VERSION the latest jalview version advertised on the www.jalview.org
+ * </li><li>PIR_MODELLER boolean indicating if PIR files are written with MODELLER descriptions
+ * </li><li>(FASTA,MSF,PILEUP,CLUSTAL,BLC,PIR,PFAM)_JVSUFFIX boolean for adding jv suffix to file
+ * </li><li>RECENT_URL list of recently retrieved URLs
+ * </li><li>RECENT_FILE list of recently opened files
+ * </li><li>USE_PROXY flag for whether a http proxy is to be used
+ * </li><li>PROXY_SERVER the proxy
+ * </li><li>PROXY_PORT
+ * </li><li>NOQUESTIONNAIRES true to prevent jalview from checking the questionnaire service
+ * </li><li>QUESTIONNAIRE last questionnaire:responder id string from questionnaire service
+ * </li><li>DAS_LOCAL_SOURCE list of local das sources
+ * </li><li>SHOW_OVERVIEW boolean for overview window display
+ * </li><li>ANTI_ALIAS boolean for smooth fonts
+ * </li><li>RIGHT_ALIGN_IDS boolean
+ * </li><li>AUTO_CALC_CONSENSUS boolean for automatic recalculation of consensus
+ * </li><li>PAD_GAPS boolean
+ * </li><li>ID_ITALICS boolean 
+ * </li><li>SHOW_JV_SUFFIX
+ * </li><li>WRAP_ALIGNMENT
+ * </li><li>EPS_RENDERING (Prompt each time|Lineart|Text) default for EPS rendering style check
+ * </li><li>SORT_ALIGNMENT (No sort|Id|Pairwise Identity)
+ * </li><li>SEQUENCE_LINKS list of name|URL pairs for opening a url with $SEQUENCE_ID$
+ * </li><li>DAS_REGISTRY_URL the registry to query
+ * </li><li>DEFAULT_BROWSER for unix
+ * </li><li>DAS_ACTIVE_SOURCE list of active sources
+ * </li><li>SHOW_MEMUSAGE boolean show memory usage and warning indicator on desktop (false) 
+ * </li><li> 
+ * </li>
+ * 
+ * </ul>
 
  * @author $author$
  * @version $Revision$
@@ -42,7 +97,21 @@ import org.apache.log4j.*;
 public class Cache
 {
   /**
-   * Initialises the Apache Axis logger
+   * property giving log4j level for CASTOR loggers
+   */
+  public static final String CASTORLOGLEVEL = "logs.Castor.level";
+  /**
+   * property giving log4j level for AXIS loggers
+   */
+  public static final String AXISLOGLEVEL = "logs.Axis.level";
+  /**
+   * property giving log4j level for Jalview Log
+   */
+  public static final String JALVIEWLOGLEVEL = "logs.Jalview.level";
+  public static final String DAS_LOCAL_SOURCE = "DAS_LOCAL_SOURCE";
+
+  /**
+   * Initialises the Jalview Application Log
    */
   public static Logger log;
 
@@ -56,6 +125,10 @@ public class Cache
   {
     try
     {
+      ConsoleAppender ap = new ConsoleAppender(new SimpleLayout(),
+      "System.err");
+      ap.setName("JalviewLogger");
+      org.apache.log4j.Logger.getRootLogger().addAppender(ap); // catch all for 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");
@@ -64,22 +137,25 @@ public class Cache
           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())));
       jalview.bin.Cache.log.setLevel(Level.toLevel(Cache.getDefault(
           "logs.Jalview.level",
           Level.INFO.toString())));
-      ConsoleAppender ap = new ConsoleAppender(new SimpleLayout(),
-                                               "System.err");
-      ap.setName("JalviewLogger");
-
-      laxis.addAppender(ap);
-      lcastor.addAppender(ap);
-      jalview.bin.Cache.log.addAppender(ap);
+      //laxis.addAppender(ap);
+      //lcastor.addAppender(ap);
+      //jalview.bin.Cache.log.addAppender(ap);
       // Tell the user that debug is enabled
       jalview.bin.Cache.log.debug("Jalview Debugging Output Follows.");
     }
     catch (Exception ex)
     {
       System.err.println("Problems initializing the log4j system\n");
+      ex.printStackTrace(System.err);
     }
   }
 
@@ -162,9 +238,16 @@ public class Cache
       {
         public void run()
         {
+          String orgtimeout = System.getProperty("sun.net.client.defaultConnectTimeout");
+          if (orgtimeout==null)
+          {
+            orgtimeout="30";
+            System.out.println("# INFO: Setting default net timeout to "+orgtimeout+" seconds.");
+          }
           String jnlpVersion = null;
           try
           {
+            System.setProperty("sun.net.client.defaultConnectTimeout", "5000");
             java.net.URL url = new java.net.URL(
                 "http://www.jalview.org/webstart/jalview.jnlp");
             BufferedReader in = new BufferedReader(new InputStreamReader(url.
@@ -185,9 +268,11 @@ public class Cache
           }
           catch (Exception ex)
           {
+            System.out.println("Non-fatal exceptions when checking version at www.jalview.org :");
             System.out.println(ex);
             jnlpVersion = getProperty("VERSION");
           }
+          System.setProperty("sun.net.client.defaultConnectTimeout", orgtimeout);
 
           setProperty("LATEST_VERSION", jnlpVersion);
         }
@@ -334,5 +419,42 @@ public class Cache
     }
     return (vamsasJarsArePresent > 0);
   }
+  /**
+   * internal vamsas class discovery state
+   */
+  private static int groovyJarsArePresent = -1;
+  /**
+   * Searches for vamsas client classes on class path.
+   * @return true if vamsas client is present on classpath
+   */
+  public static boolean groovyJarsPresent()
+  {
+    if (groovyJarsArePresent == -1)
+    {
+      try
+      {
+        if (Cache.class.getClassLoader().loadClass(
+            "groovy.lang.GroovyObject") != null)
+        {
+          jalview.bin.Cache.log.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"));
+          // Tell the user that debug is enabled
+          lgclient.debug("Jalview Groovy Client Debugging Output Follows.");
+        }
+      }
+      catch (Exception e)
+      {
+        groovyJarsArePresent = 0;
+        jalview.bin.Cache.log.debug("Groovy Classes are not present");
+      }
+    }
+    return (groovyJarsArePresent > 0);
+  }
 
 }