package org.openntf.domino.i18n; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.openntf.domino.utils.Factory; public class RawMessageProviderImpl extends RawMessageProvider { /* * In the first version, we used the standard-no-fallback-ResourceBundle.Control, given by * ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES). * However, when resources sit in an NSF, the method Control.needsReload returns "true" very often * (perhaps always?), and performance gets dreadful. Hence: */ private static class MyNoFallbackControl extends ResourceBundle.Control { static final ResourceBundle.Control _instance = new MyNoFallbackControl(); private List<String> _format; public MyNoFallbackControl() { (_format = new ArrayList<String>()).add("java.properties"); } @Override public List<String> getFormats(final String s) { return _format; } @Override public Locale getFallbackLocale(final String s, final Locale loc) { return null; } @Override public boolean needsReload(final String s1, final Locale loc, final String s2, final ClassLoader cl, final ResourceBundle rb, final long l) { return false; } } protected ClassLoader provClassLoader; @Override public String getRawText(final String bundleName, final String key, final Locale loc) { try { ClassLoader cl = provClassLoader != null ? provClassLoader : Factory.getClassLoader(); ResourceBundle rb = ResourceBundle.getBundle(bundleName, loc, cl, MyNoFallbackControl._instance); // ResourceBundle.Control.getNoFallbackControl(ResourceBundle.Control.FORMAT_PROPERTIES)); return rb.getString(key); } catch (MissingResourceException mre) { return null; } } /** * this is the last provider */ @Override protected int getPriority() { return 99; } }