FileDocCategorySizeDatePackage
MsgHelp.javaAPI DocAndroid 1.5 API7144Wed May 06 22:41:04 BST 2009org.apache.harmony.luni.util

MsgHelp

public final class MsgHelp extends Object
This class contains helper methods for loading resource bundles and formatting external message strings.

Fields Summary
private static HashMap
sRefMap
Constructors Summary
Methods Summary
public static java.lang.Stringformat(java.lang.String format, java.lang.Object[] args)
Generates a formatted text string given a source string containing "argument markers" of the form "{argNum}" where each argNum must be in the range 0..9. The result is generated by inserting the toString of each argument into the position indicated in the string.

To insert the "{" character into the output, use a single backslash character to escape it (i.e. "\{"). The "}" character does not need to be escaped.

param
format String the format to use when printing.
param
args Object[] the arguments to use.
return
String the formatted message.

        StringBuilder answer = new StringBuilder(format.length()
                + (args.length * 20));
        String[] argStrings = new String[args.length];
        for (int i = 0; i < args.length; ++i) {
            if (args[i] == null)
                argStrings[i] = "<null>";
            else
                argStrings[i] = args[i].toString();
        }
        int lastI = 0;
        for (int i = format.indexOf('{", 0); i >= 0; i = format.indexOf('{",
                lastI)) {
            if (i != 0 && format.charAt(i - 1) == '\\") {
                // It's escaped, just print and loop.
                if (i != 1)
                    answer.append(format.substring(lastI, i - 1));
                answer.append('{");
                lastI = i + 1;
            } else {
                // It's a format character.
                if (i > format.length() - 3) {
                    // Bad format, just print and loop.
                    answer.append(format.substring(lastI, format.length()));
                    lastI = format.length();
                } else {
                    int argnum = (byte) Character.digit(format.charAt(i + 1),
                            10);
                    if (argnum < 0 || format.charAt(i + 2) != '}") {
                        // Bad format, just print and loop.
                        answer.append(format.substring(lastI, i + 1));
                        lastI = i + 1;
                    } else {
                        // Got a good one!
                        answer.append(format.substring(lastI, i));
                        if (argnum >= argStrings.length)
                            answer.append("<missing argument>");
                        else
                            answer.append(argStrings[argnum]);
                        lastI = i + 3;
                    }
                }
            }
        }
        if (lastI < format.length())
            answer.append(format.substring(lastI, format.length()));
        return answer.toString();
    
public static java.lang.StringgetString(java.lang.String resource, java.lang.String msg)

        ResourceBundle bundle = MsgHelp.loadBundle(resource);
        if (bundle == null) {
            return msg;
        }
        try {
            return bundle.getString(msg);
        } catch (MissingResourceException e) {
            return "Missing message: " + msg; // $NON_NLS-1$
        }
    
public static java.lang.StringgetString(java.lang.String resource, java.lang.String msg, java.lang.Object[] args)

        String format = msg;
        ResourceBundle bundle = MsgHelp.loadBundle(resource);
        if (bundle != null) {
            try {
                format = bundle.getString(msg);
            } catch (MissingResourceException e) {
            }
        }

        return format(format, args);
    
public static synchronized java.util.ResourceBundleloadBundle(java.lang.String resource)

    
          
        if (sRefMap == null) {
            sRefMap = new HashMap<String, SoftReference<ResourceBundle>>();
        }
        SoftReference<ResourceBundle> bundleRef = sRefMap.get(resource);
        if (bundleRef == null || bundleRef.get() == null) {
            // Attempt to load the messages.
            try {
                ResourceBundle bundle = setLocale(Locale.getDefault(),
                        resource);
                bundleRef = new SoftReference<ResourceBundle>(bundle);
                sRefMap.put(resource, bundleRef);
                return bundle;
            } catch (Throwable e) {
                Logger.global.warning("Got Throwable " + e +
                    " loading messages");
                return null;
            }
        } else {
            return bundleRef.get();
        }
    
public static java.util.ResourceBundlesetLocale(java.util.Locale locale, java.lang.String resource)
Changes the locale of the messages.

param
locale Locale the locale to change to.
param
resource the name of the bundle resource

        try {
            // BEGIN android-removed
            // final ClassLoader loader = VM.bootCallerClassLoader();
            // END android-removed
            return (ResourceBundle) AccessController
                    .doPrivileged(new PrivilegedAction<Object>() {
                        public Object run() {
                            // BEGIN android-changed
                            return ResourceBundle.getBundle(resource, locale,
                                    ClassLoader.getSystemClassLoader());
                            // END android-changed
                        }
                    });
        } catch (MissingResourceException e) {
        }
        return null;