17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 3aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert * Copyright (C) 2008-2015, International Business Machines Corporation and 4aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert * others. All Rights Reserved. 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.impl; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.IOException; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.InputStream; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.security.AccessControlException; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.security.AccessController; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.security.PrivilegedAction; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.MissingResourceException; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Properties; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * ICUConfig is a class used for accessing ICU4J runtime configuration. 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class ICUConfig { 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final String CONFIG_PROPS_FILE = "/com/ibm/icu/ICUConfig.properties"; 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final Properties CONFIG_PROPS; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert static { 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CONFIG_PROPS = new Properties(); 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert InputStream is = ICUData.getStream(CONFIG_PROPS_FILE); 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (is != null) { 29aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert try { 30aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert CONFIG_PROPS.load(is); 31aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } finally { 32aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert is.close(); 33aacdd6f022693689b3bf76f70670711f3254a441Fredrik Roubert } 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (MissingResourceException mre) { 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // If it does not exist, ignore. 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (IOException ioe) { 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Any IO errors, ignore 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Get ICU configuration property value for the given name. 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param name The configuration property name 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @return The configuration property value, or null if it does not exist. 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String get(String name) { 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return get(name, null); 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Get ICU configuration property value for the given name. 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param name The configuration property name 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @param def The default value 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @return The configuration property value. If the property does not 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * exist, <code>def</code> is returned. 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static String get(String name, String def) { 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String val = null; 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert final String fname = name; 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (System.getSecurityManager() != null) { 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = AccessController.doPrivileged(new PrivilegedAction<String>() { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String run() { 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return System.getProperty(fname); 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }); 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (AccessControlException e) { 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // ignore 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO log this message 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = System.getProperty(name); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (val == null) { 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = CONFIG_PROPS.getProperty(name, def); 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return val; 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 82