blob: 5fdd3b4bbbcb5cbdd1def3e92c0e7a6877728dc4 [file] [log] [blame]
/**
* 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.cxf.common.i18n;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.apache.cxf.common.util.PackageUtils;
/**
* A container for static utility methods related to resource bundle
* naming conventons.
*/
public final class BundleUtils {
/**
* The default resource bundle naming convention for class is a.b.c is a.b.Messages
*/
private static final String MESSAGE_BUNDLE = ".Messages";
/**
* Prevents instantiation.
*/
private BundleUtils() {
}
/**
* Encapsulates the logic related to naming the default resource bundle
* for a class.
*
* @param cls the Class requiring the bundle
* @return an appropriate ResourceBundle name
*/
public static String getBundleName(Class<?> cls) {
// Class.getPackage() can return null, so change to another way to get Package Name
return PackageUtils.getPackageName(cls) + MESSAGE_BUNDLE;
}
/**
* Encapsulates the logic related to naming the resource bundle
* with the given relative name for a class.
*
* @param cls the Class requiring the bundle
* @return an appropriate ResourceBundle name
*/
public static String getBundleName(Class<?> cls, String name) {
return PackageUtils.getPackageName(cls) + "." + name;
}
/**
* Encapsulates the logic related to locating the default resource bundle
* for a class.
*
* @param cls the Class requiring the bundle
* @return an appropriate ResourceBundle
*/
public static ResourceBundle getBundle(Class<?> cls) {
try {
ClassLoader loader = cls.getClassLoader();
if (loader == null) {
return ResourceBundle.getBundle(getBundleName(cls), Locale.getDefault());
}
return ResourceBundle.getBundle(getBundleName(cls),
Locale.getDefault(),
loader);
} catch (MissingResourceException ex) {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
return ResourceBundle.getBundle(getBundleName(cls), Locale.getDefault());
}
return ResourceBundle.getBundle(getBundleName(cls),
Locale.getDefault(),
loader);
}
}
/**
* Encapsulates the logic related to locating the resource bundle with the given
* relative name for a class.
*
* @param cls the Class requiring the bundle
* @param name the name of the resource
* @return an appropriate ResourceBundle
*/
public static ResourceBundle getBundle(Class<?> cls, String name) {
try {
ClassLoader loader = cls.getClassLoader();
if (loader == null) {
return ResourceBundle.getBundle(getBundleName(cls, name), Locale.getDefault());
}
return ResourceBundle.getBundle(getBundleName(cls, name),
Locale.getDefault(),
loader);
} catch (MissingResourceException ex) {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
return ResourceBundle.getBundle(getBundleName(cls, name), Locale.getDefault());
}
return ResourceBundle.getBundle(getBundleName(cls, name),
Locale.getDefault(),
loader);
}
}
/**
* Encapsulates the logic to format a string based on the key in the resource bundle
*
* @param b Resource bundle to use
* @param key The key in the bundle to lookup
* @param params the params to expand into the string
* @return the formatted string
*/
public static String getFormattedString(ResourceBundle b, String key, Object ... params) {
return MessageFormat.format(b.getString(key), params);
}
}