1 /*
2  *******************************************************************************
3  * Copyright (C) 2008-2015, International Business Machines Corporation and
4  * others. All Rights Reserved.
5  *******************************************************************************
6  */
7 package com.ibm.icu.impl;
8 
9 import java.io.IOException;
10 import java.io.InputStream;
11 import java.security.AccessControlException;
12 import java.security.AccessController;
13 import java.security.PrivilegedAction;
14 import java.util.MissingResourceException;
15 import java.util.Properties;
16 
17 /**
18  * ICUConfig is a class used for accessing ICU4J runtime configuration.
19  */
20 public class ICUConfig {
21     public static final String CONFIG_PROPS_FILE = "/com/ibm/icu/ICUConfig.properties";
22     private static final Properties CONFIG_PROPS;
23 
24     static {
25         CONFIG_PROPS = new Properties();
26         try {
27             InputStream is = ICUData.getStream(CONFIG_PROPS_FILE);
28             if (is != null) {
29                 try {
30                     CONFIG_PROPS.load(is);
31                 } finally {
is.close()32                     is.close();
33                 }
34             }
35         } catch (MissingResourceException mre) {
36             // If it does not exist, ignore.
37         } catch (IOException ioe) {
38             // Any IO errors, ignore
39         }
40     }
41 
42     /**
43      * Get ICU configuration property value for the given name.
44      * @param name The configuration property name
45      * @return The configuration property value, or null if it does not exist.
46      */
get(String name)47     public static String get(String name) {
48         return get(name, null);
49     }
50 
51     /**
52      * Get ICU configuration property value for the given name.
53      * @param name The configuration property name
54      * @param def The default value
55      * @return The configuration property value.  If the property does not
56      * exist, <code>def</code> is returned.
57      */
get(String name, String def)58     public static String get(String name, String def) {
59         String val = null;
60         final String fname = name;
61         if (System.getSecurityManager() != null) {
62             try {
63                 val = AccessController.doPrivileged(new PrivilegedAction<String>() {
64                     public String run() {
65                         return System.getProperty(fname);
66                     }
67                 });
68             } catch (AccessControlException e) {
69                 // ignore
70                 // TODO log this message
71             }
72         } else {
73             val = System.getProperty(name);
74         }
75 
76         if (val == null) {
77             val = CONFIG_PROPS.getProperty(name, def);
78         }
79         return val;
80     }
81 }
82