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