mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
112 lines
3.1 KiB
Java
112 lines
3.1 KiB
Java
package java.util;
|
|
|
|
import java.lang.reflect.Method;
|
|
import java.io.InputStream;
|
|
import java.io.IOException;
|
|
|
|
public abstract class ResourceBundle {
|
|
protected String name;
|
|
protected ResourceBundle parent;
|
|
|
|
private static String replace(char a, char b, String s) {
|
|
char[] array = new char[s.length()];
|
|
for (int i = 0; i < array.length; ++i) {
|
|
char c = s.charAt(i);
|
|
array[i] = (c == a ? b : c);
|
|
}
|
|
return new String(array, 0, array.length, false);
|
|
}
|
|
|
|
private static ResourceBundle findProperties(String name, ClassLoader loader,
|
|
ResourceBundle parent)
|
|
throws IOException
|
|
{
|
|
InputStream in = loader.getResourceAsStream
|
|
(replace('.', '/', name) + ".properties");
|
|
if (in != null) {
|
|
try {
|
|
ResourceBundle r = new PropertyResourceBundle(in);
|
|
r.name = name;
|
|
r.parent = parent;
|
|
return r;
|
|
} finally {
|
|
in.close();
|
|
}
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static ResourceBundle find(String name, ClassLoader loader,
|
|
ResourceBundle parent)
|
|
throws Exception
|
|
{
|
|
try {
|
|
Class c = Class.forName(name, true, loader);
|
|
if (c.isAssignableFrom(ResourceBundle.class)) {
|
|
return (ResourceBundle) c.getConstructor().newInstance();
|
|
}
|
|
} catch (ClassNotFoundException ok) {
|
|
} catch (NoSuchMethodException ok) { }
|
|
|
|
return findProperties(name, loader, parent);
|
|
}
|
|
|
|
public static ResourceBundle getBundle(String name, Locale locale,
|
|
ClassLoader loader)
|
|
{
|
|
try {
|
|
ResourceBundle b = find(name, loader, null);
|
|
|
|
if (locale.getLanguage() != null) {
|
|
name = name + "_" + locale.getLanguage();
|
|
ResourceBundle b2 = find(name, loader, b);
|
|
if (b2 != null) b = b2;
|
|
|
|
if (locale.getCountry() != null) {
|
|
name = name + "_" + locale.getCountry();
|
|
b2 = find(name, loader, b);
|
|
if (b2 != null) b = b2;
|
|
|
|
if (locale.getVariant() != null) {
|
|
name = name + "_" + locale.getVariant();
|
|
b2 = find(name, loader, b);
|
|
if (b2 != null) b = b2;
|
|
}
|
|
}
|
|
}
|
|
return b;
|
|
} catch (Exception e) {
|
|
RuntimeException re = new MissingResourceException(name, name, null);
|
|
re.initCause(e);
|
|
throw re;
|
|
}
|
|
}
|
|
|
|
public static ResourceBundle getBundle(String name, Locale locale) {
|
|
return getBundle(name, locale,
|
|
Method.getCaller().getDeclaringClass().getClassLoader());
|
|
}
|
|
|
|
public static ResourceBundle getBundle(String name) {
|
|
return getBundle(name, Locale.getDefault(),
|
|
Method.getCaller().getDeclaringClass().getClassLoader());
|
|
}
|
|
|
|
public Object getObject(String key) {
|
|
for (ResourceBundle b = this; b != null; b = b.parent) {
|
|
Object value = b.handleGetObject(key);
|
|
if (value != null) {
|
|
return value;
|
|
}
|
|
}
|
|
throw new MissingResourceException(key, name, key);
|
|
}
|
|
|
|
public String getString(String key) {
|
|
return (String) getObject(key);
|
|
}
|
|
|
|
protected abstract Object handleGetObject(String key);
|
|
}
|