X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2FCache.java;h=1481666637ec4f457f61ca750d283cbce5ecc26c;hb=c68ebaddf1925d9458aab5f2fea6e6f3240b3b99;hp=dad7326bdea2a31af710ae0cc9d5ff918b8113e6;hpb=67d61f58fbff9bdb395ebb12ed389a58e6e75a03;p=jalview.git diff --git a/src/jalview/bin/Cache.java b/src/jalview/bin/Cache.java index dad7326..1481666 100755 --- a/src/jalview/bin/Cache.java +++ b/src/jalview/bin/Cache.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4) - * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.bin; @@ -24,9 +23,6 @@ import java.util.*; import org.apache.log4j.*; import org.biojava.dasobert.dasregistry.Das1Source; -import com.boxysystems.jgoogleanalytics.FocusPoint; -import com.boxysystems.jgoogleanalytics.JGoogleAnalyticsTracker; - /** * Stores and retrieves Jalview Application Properties Lists and fields within * list entries are separated by '|' symbols unless otherwise stated (|) clauses @@ -43,76 +39,97 @@ import com.boxysystems.jgoogleanalytics.JGoogleAnalyticsTracker; * *
  • logs.Jalview.Level - Cache.log stringified level.
    *
  • - *
  • DISCOVERY_START - Boolean - controls if discovery services are queried - * on startup
  • - *
  • DISCOVERY_URLS - comma separated list of Discovery Service endpoints. - *
  • - *
  • SCREEN_WIDTH
  • - *
  • SCREEN_HEIGHT
  • - *
  • SCREEN_Y=285
  • - *
  • SCREEN_X=371
  • - *
  • SHOW_FULLSCREEN boolean
  • - *
  • FONT_NAME java font name for alignment text display
  • - *
  • FONT_SIZE size of displayed alignment text
  • - *
  • FONT_STYLE style of font displayed (sequence labels are always italic) - *
  • - *
  • GAP_SYMBOL character to treat as gap symbol (usually -,.,' ')
  • - *
  • LAST_DIRECTORY last directory for browsing alignment
  • - *
  • USER_DEFINED_COLOURS list of user defined colour scheme files
  • - *
  • SHOW_FULL_ID show id with '/start-end' numbers appended
  • - *
  • SHOW_IDENTITY show percentage identity annotation
  • - *
  • SHOW_QUALITY show alignment quality annotation
  • - *
  • SHOW_ANNOTATIONS show alignment annotation rows
  • - *
  • SHOW_CONSERVATION show alignment conservation annotation
  • + *
  • DISCOVERY_START - Boolean - controls if discovery services are queried on + * startup
  • + *
  • DISCOVERY_URLS - comma separated list of Discovery Service endpoints.
  • + *
  • SCREEN_WIDTH
  • + *
  • SCREEN_HEIGHT
  • + *
  • SCREEN_Y=285
  • + *
  • SCREEN_X=371
  • + *
  • SHOW_FULLSCREEN boolean
  • + *
  • FONT_NAME java font name for alignment text display
  • + *
  • FONT_SIZE size of displayed alignment text
  • + *
  • FONT_STYLE style of font displayed (sequence labels are always italic)
  • + *
  • GAP_SYMBOL character to treat as gap symbol (usually -,.,' ')
  • + *
  • LAST_DIRECTORY last directory for browsing alignment
  • + *
  • USER_DEFINED_COLOURS list of user defined colour scheme files
  • + *
  • SHOW_FULL_ID show id with '/start-end' numbers appended
  • + *
  • SHOW_IDENTITY show percentage identity annotation
  • + *
  • SHOW_QUALITY show alignment quality annotation
  • + *
  • SHOW_ANNOTATIONS show alignment annotation rows
  • + *
  • SHOW_CONSERVATION show alignment conservation annotation
  • *
  • CENTRE_COLUMN_LABELS centre the labels at each column in a displayed - * annotation row
  • - *
  • DEFAULT_COLOUR default colour scheme to apply for a new alignment
  • - *
  • DEFAULT_FILE_FORMAT file format used to save
  • - *
  • STARTUP_FILE file loaded on startup (may be a fully qualified url)
  • - *
  • SHOW_STARTUP_FILE flag to control loading of startup file
  • - *
  • VERSION the version of the jalview build
  • - *
  • BUILD_DATE date of this build
  • + * annotation row + *
  • DEFAULT_COLOUR default colour scheme to apply for a new alignment
  • + *
  • DEFAULT_FILE_FORMAT file format used to save
  • + *
  • STARTUP_FILE file loaded on startup (may be a fully qualified url)
  • + *
  • SHOW_STARTUP_FILE flag to control loading of startup file
  • + *
  • VERSION the version of the jalview build
  • + *
  • BUILD_DATE date of this build
  • *
  • LATEST_VERSION the latest jalview version advertised on the - * www.jalview.org
  • + * www.jalview.org *
  • PIR_MODELLER boolean indicating if PIR files are written with MODELLER - * descriptions
  • + * descriptions *
  • (FASTA,MSF,PILEUP,CLUSTAL,BLC,PIR,PFAM)_JVSUFFIX boolean for adding jv - * suffix to file
  • - *
  • RECENT_URL list of recently retrieved URLs
  • - *
  • RECENT_FILE list of recently opened files
  • - *
  • USE_PROXY flag for whether a http proxy is to be used
  • - *
  • PROXY_SERVER the proxy
  • - *
  • PROXY_PORT
  • + * suffix to file + *
  • RECENT_URL list of recently retrieved URLs
  • + *
  • RECENT_FILE list of recently opened files
  • + *
  • USE_PROXY flag for whether a http proxy is to be used
  • + *
  • PROXY_SERVER the proxy
  • + *
  • PROXY_PORT
  • *
  • NOQUESTIONNAIRES true to prevent jalview from checking the questionnaire - * service
  • + * service *
  • QUESTIONNAIRE last questionnaire:responder id string from questionnaire - * service
  • - *
  • DAS_LOCAL_SOURCE list of local das sources
  • - *
  • SHOW_OVERVIEW boolean for overview window display
  • - *
  • ANTI_ALIAS boolean for smooth fonts
  • - *
  • RIGHT_ALIGN_IDS boolean
  • - *
  • AUTO_CALC_CONSENSUS boolean for automatic recalculation of consensus - *
  • - *
  • PAD_GAPS boolean
  • - *
  • ID_ITALICS boolean
  • - *
  • SHOW_JV_SUFFIX
  • - *
  • WRAP_ALIGNMENT
  • + * service + *
  • USAGESTATS (false - user prompted) Enable google analytics tracker for + * collecting usage statistics
  • + *
  • DAS_LOCAL_SOURCE list of local das sources
  • + *
  • SHOW_OVERVIEW boolean for overview window display
  • + *
  • ANTI_ALIAS boolean for smooth fonts
  • + *
  • RIGHT_ALIGN_IDS boolean
  • + *
  • AUTO_CALC_CONSENSUS boolean for automatic recalculation of consensus
  • + *
  • PAD_GAPS boolean
  • + *
  • ID_ITALICS boolean
  • + *
  • SHOW_JV_SUFFIX
  • + *
  • WRAP_ALIGNMENT
  • *
  • EPS_RENDERING (Prompt each time|Lineart|Text) default for EPS rendering - * style check
  • - *
  • SORT_ALIGNMENT (No sort|Id|Pairwise Identity)
  • + * style check + *
  • SORT_ALIGNMENT (No sort|Id|Pairwise Identity)
  • *
  • SEQUENCE_LINKS list of name|URL pairs for opening a url with - * $SEQUENCE_ID$
  • - *
  • DAS_REGISTRY_URL the registry to query
  • - *
  • DEFAULT_BROWSER for unix
  • - *
  • DAS_ACTIVE_SOURCE list of active sources
  • + * $SEQUENCE_ID$ + *
  • GROUP_LINKS list of name|URL[|<separator>] tuples - see + * jalview.utils.GroupURLLink for more info
  • + *
  • DAS_REGISTRY_URL the registry to query
  • + *
  • DEFAULT_BROWSER for unix
  • + *
  • DAS_ACTIVE_SOURCE list of active sources
  • *
  • SHOW_MEMUSAGE boolean show memory usage and warning indicator on desktop - * (false)
  • - *
  • SHOW_NPFEATS_TOOLTIP (true) show non-positional features in the Sequence ID tooltip
  • - *
  • SHOW_DBREFS_TOOLTIP (true) show Database Cross References in the Sequence ID tooltip
  • - *
  • SHOW_UNCONSERVED (false) only render unconserved residues - conserved displayed as '.'
  • - *
  • SORT_BY_TREE (false) sort the current alignment view according to the order of a newly displayed tree
  • + * (false) + *
  • VERSION_CHECK (true) check for the latest release version from + * www.jalview.org
  • + *
  • SHOW_NPFEATS_TOOLTIP (true) show non-positional features in the Sequence + * ID tooltip
  • + *
  • SHOW_DBREFS_TOOLTIP (true) show Database Cross References in the Sequence + * ID tooltip
  • + *
  • SHOW_UNCONSERVED (false) only render unconserved residues - conserved + * displayed as '.'
  • + *
  • SORT_BY_TREE (false) sort the current alignment view according to the + * order of a newly displayed tree
  • + *
  • DBFETCH_USEPICR (false) use PICR to recover valid DB references from + * sequence ID strings before attempting retrieval from any datasource
  • + *
  • SHOW_GROUP_CONSENSUS (false) Show consensus annotation for groups in the + * alignment.
  • + *
  • SHOW_GROUP_CONSERVATION (false) Show conservation annotation for groups + * in the alignment.
  • + *
  • SHOW_CONSENSUS_HISTOGRAM (false) Show consensus annotation row's + * histogram.
  • + *
  • SHOW_CONSENSUS_LOGO (false) Show consensus annotation row's sequence + * logo.
  • + *
  • FOLLOW_SELECTIONS (true) Controls whether a new alignment view should + * respond to selections made in other alignments containing the same sequences.
  • + * + *
  • * - *
  • + *
  • * * * @@ -155,13 +172,20 @@ public class Cache public static void initLogger() { + if (log!=null) + { + return; + } 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 - // log output + // 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"); @@ -258,6 +282,7 @@ public class Cache // jnlpVersion will be null if we're using InstallAnywhere // 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"))) { @@ -339,7 +364,7 @@ public class Cache * found * * @param key - * Name of property + * Name of property * * @return Property value */ @@ -383,9 +408,9 @@ public class Cache * Stores property in the file "HOME_DIR/.jalview_properties" * * @param key - * Name of object + * Name of object * @param obj - * String value of property + * String value of property * * @return String value of property */ @@ -405,6 +430,20 @@ public class Cache return obj; } + /** + * remove the specified property from the jalview properties file + * + * @param string + */ + public static void removeProperty(String string) + { + applicationProperties.remove(string); + saveProperties(); + } + + /** + * save the properties to the jalview properties path + */ public static void saveProperties() { try @@ -487,6 +526,10 @@ public class Cache // Tell the user that debug is enabled lgclient.debug("Jalview Groovy Client Debugging Output Follows."); } + } catch (Error e) + { + groovyJarsArePresent = 0; + jalview.bin.Cache.log.debug("Groovy Classes are not present", e); } catch (Exception e) { groovyJarsArePresent = 0; @@ -498,6 +541,7 @@ public class Cache /** * generate Das1Sources from the local das source list + * * @return Vector of Das1Sources */ public static Vector getLocalDasSources() @@ -517,10 +561,14 @@ public class Cache { source.setUrl(source.getUrl().substring(9)); // this source also serves sequences as well as features - source.setCapabilities(new String[] { "sequence", "features"}); - } else { + source.setCapabilities(new String[] + { "sequence", "features" }); + } + else + { // default is that all user added sources serve features - source.setCapabilities(new String[] { "features"}); + source.setCapabilities(new String[] + { "features" }); } source.setNickname(token.substring(0, bar)); @@ -530,37 +578,126 @@ public class Cache } return localSources; } - - public static JGoogleAnalyticsTracker tracker=null; - + + /** + * GA tracker object - actually JGoogleAnalyticsTracker null if tracking not + * enabled. + */ + protected static Object tracker = null; + + protected static Class trackerfocus = null; + + protected static Class jgoogleanalyticstracker = null; + + /** + * Initialise the google tracker if it is not done already. + */ public static void initGoogleTracker() { - if (tracker==null) - { - String vrs="No Version Accessible"; - try { - //Google analytics tracking code for Library Finder - tracker = new JGoogleAnalyticsTracker("Jalview Desktop", - (vrs=jalview.bin.Cache.getProperty("VERSION")+"_"+jalview.bin.Cache.getDefault("BUILD_DATE", "unknown")), - "UA-9060947-1"); - tracker.trackAsynchronously(new FocusPoint("Application Started.")); - } catch (RuntimeException e) + if (tracker == null) { - if (log!=null) { - log.debug("Caught runtime exception in googletracker init:",e); - } - // quietly return. - } - catch (Exception e) - { - // unexpected error - if (log!=null) + if (jgoogleanalyticstracker == null) + { + // try to get the tracker class + try + { + jgoogleanalyticstracker = Cache.class + .getClassLoader() + .loadClass( + "com.boxysystems.jgoogleanalytics.JGoogleAnalyticsTracker"); + trackerfocus = Cache.class.getClassLoader().loadClass( + "com.boxysystems.jgoogleanalytics.FocusPoint"); + } catch (Exception e) { - log.warn("Failed to initialise GoogleTracker for Jalview Desktop with version "+vrs,e); - } else { - log.warn("Failed to initialise GoogleTracker for Jalview Desktop with version "+vrs,e); + log + .debug("com.boxysystems.jgoogleanalytics package is not present - tracking not enabled."); + tracker = null; + jgoogleanalyticstracker = null; + trackerfocus = null; + return; } - } + } + // now initialise tracker + Exception re = null, ex = null; + Error err = null; + String vrs = "No Version Accessible"; + try + { + // Google analytics tracking code for Library Finder + tracker = jgoogleanalyticstracker.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")), "UA-9060947-1" }); + jgoogleanalyticstracker.getMethod("trackAsynchronously", + new Class[] + { trackerfocus }).invoke(tracker, new Object[] + { trackerfocus.getConstructor(new Class[] + { String.class }).newInstance(new Object[] + { "Application Started." }) }); + } catch (RuntimeException e) + { + re = e; + } catch (Exception e) + { + ex = e; + } catch (Error e) + { + err = e; + } + if (re != null || ex != null || err != null) + { + if (log != 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); + } + else + { + 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(); + } + } + } + else + { + log.debug("Successfully initialised tracker."); + } } } + }