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