+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.luni.util;
+
+/**
+ * This class contains helper methods for loading resource bundles and
+ * formatting external message strings.
+ *
+ */
+
+public final class MsgHelp {
+
+ /**
+ * 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.
+ * <p>
+ * 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.
+ */
+ public static String format(String format, Object[] args) {
+ 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);
+ int argnum = (byte) (format.charAt(i + 1) - '0');
+ 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();
+ }
+
+// /**
+// * Changes the locale of the messages.
+// *
+// * @param locale
+// * Locale the locale to change to.
+// */
+// static public ResourceBundle setLocale(final Locale locale,
+// final String resource) {
+// /*
+// try {
+// final ClassLoader loader = VM.bootCallerClassLoader();
+// return (ResourceBundle) AccessController
+// .doPrivileged(new PrivilegedAction<Object>() {
+// public Object run() {
+// return ResourceBundle.getBundle(resource, locale,
+// loader != null ? loader : ClassLoader.getSystemClassLoader());
+// }
+// });
+// } catch (MissingResourceException e) {
+// }
+// */
+// /**
+// * @j2sNative
+// *
+// * Class.forName("java.util.ResourceBundle");
+// */
+// {}
+// return ResourceBundle.getBundle(resource);
+// //return null;
+// }
+}