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