18d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath/* 28d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath ******************************************************************************* 38d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * Copyright (C) 2008-2010, International Business Machines Corporation and * 48d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * others. All Rights Reserved. * 58d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath ******************************************************************************* 68d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath */ 78d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathpackage com.ibm.icu.impl; 88d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath 98d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.io.IOException; 108d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.io.InputStream; 118d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.security.AccessControlException; 128d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.security.AccessController; 138d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.security.PrivilegedAction; 148d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.util.MissingResourceException; 158d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathimport java.util.Properties; 168d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath 178d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath/** 188d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * ICUConfig is a class used for accessing ICU4J runtime configuration. 198d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath */ 208d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamathpublic class ICUConfig { 218d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath public static final String CONFIG_PROPS_FILE = "/com/ibm/icu/ICUConfig.properties"; 228d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath private static final Properties CONFIG_PROPS; 238d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath 248d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath static { 258d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath CONFIG_PROPS = new Properties(); 268d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath try { 278d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath InputStream is = ICUData.getStream(CONFIG_PROPS_FILE); 288d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath if (is != null) { 298d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath CONFIG_PROPS.load(is); 308d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 318d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } catch (MissingResourceException mre) { 328d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath // If it does not exist, ignore. 338d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } catch (IOException ioe) { 348d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath // Any IO errors, ignore 358d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 368d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 378d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath 388d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath /** 398d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * Get ICU configuration property value for the given name. 408d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * @param name The configuration property name 418d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * @return The configuration property value, or null if it does not exist. 428d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath */ 438d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath public static String get(String name) { 448d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath return get(name, null); 458d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 468d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath 478d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath /** 488d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * Get ICU configuration property value for the given name. 498d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * @param name The configuration property name 508d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * @param def The default value 518d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * @return The configuration property value. If the property does not 528d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath * exist, <code>def</code> is returned. 538d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath */ 548d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath public static String get(String name, String def) { 558d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath String val = null; 568d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath final String fname = name; 578d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath if (System.getSecurityManager() != null) { 588d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath try { 598d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath val = AccessController.doPrivileged(new PrivilegedAction<String>() { 608d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath public String run() { 618d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath return System.getProperty(fname); 628d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 638d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath }); 648d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } catch (AccessControlException e) { 658d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath // ignore 668d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath // TODO log this message 678d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 688d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } else { 698d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath val = System.getProperty(name); 708d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 718d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath 728d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath if (val == null) { 738d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath val = CONFIG_PROPS.getProperty(name, def); 748d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 758d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath return val; 768d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath } 778d05787d6a4b5762d790ccd2a9ed9dc8885986efNarayan Kamath} 78