package org.handwerkszeug.riak.util;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author taichi
*/
public class SingleLocaleStrings {
static final Logger LOG = LoggerFactory
.getLogger(SingleLocaleStrings.class);
public static void load(Class<?> holder) {
load(holder, holder.getName(), holder.getClassLoader());
}
public static void load(Class<?> holder, String bundlename,
ClassLoader loader) {
ResourceBundle rb = getBundle(bundlename, loader);
if (rb == null) {
return;
}
for (Field field : holder.getDeclaredFields()) {
if (validateMask(field) == false) {
String key = field.getName();
try {
if (String.class.isAssignableFrom(field.getType())) {
field.set(null, rb.getString(key));
}
} catch (MissingResourceException e) {
notfound(key, bundlename);
} catch (Exception e) {
error(e);
}
}
}
}
protected static boolean validateMask(Field f) {
final int MOD_EXPECTED = Modifier.PUBLIC | Modifier.STATIC;
final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
return (f.getModifiers() & MOD_MASK) != MOD_EXPECTED;
}
protected static ResourceBundle getBundle(String name, ClassLoader loader) {
try {
return ResourceBundle.getBundle(name, Locale.getDefault(), loader);
} catch (MissingResourceException e) {
error(e);
return null;
}
}
protected static void error(Throwable t) {
LOG.error(t.getMessage(), t);
}
protected static void notfound(String key, String bundlename) {
LOG.warn(key + " not found in " + bundlename);
}
}