37 |
37 |
38 |
38 |
39 /** |
39 /** |
40 * {@code AbstractResourceBundleProvider} is an abstract class for helping |
40 * {@code AbstractResourceBundleProvider} is an abstract class for helping |
41 * implement the {@link ResourceBundleProvider} interface. |
41 * implement the {@link ResourceBundleProvider} interface. |
|
42 * |
|
43 * <p> |
|
44 * Resource bundles can be packaged in a named module separated from |
|
45 * the <em>caller module</em> loading the resource bundle, i.e. the module |
|
46 * calling {@link ResourceBundle#getBundle(String)}. For the caller module |
|
47 * to load a resource bundle "{@code com.example.app.MyResources}" |
|
48 * from another module and a service interface named |
|
49 * "{@code com.example.app.MyResourcesProvider}", |
|
50 * the <em>bundle provider module</em> can provide the implementation class |
|
51 * as follows: |
|
52 * |
|
53 * <pre><code> |
|
54 * import com.example.app.MyResourcesProvider; |
|
55 * class MyResourcesProviderImpl extends AbstractResourceBundleProvider |
|
56 * implements MyResourcesProvider |
|
57 * {</code> |
|
58 * {@code @Override |
|
59 * public ResourceBundle getBundle(String baseName, Locale locale) { |
|
60 * // this module only provides bundles in french |
|
61 * if (locale.equals(Locale.FRENCH)) { |
|
62 * return super.getBundle(baseName, locale); |
|
63 * } |
|
64 * return null; |
|
65 * } |
|
66 * }}</pre> |
|
67 * |
|
68 * @see <a href="../ResourceBundle.html#bundleprovider"> |
|
69 * Resource Bundles in Named Modules</a> |
|
70 * @see <a href="../ResourceBundle.html#RBP_support"> |
|
71 * ResourceBundleProvider Service Providers</a> |
42 * |
72 * |
43 * @since 9 |
73 * @since 9 |
44 */ |
74 */ |
45 public abstract class AbstractResourceBundleProvider implements ResourceBundleProvider { |
75 public abstract class AbstractResourceBundleProvider implements ResourceBundleProvider { |
46 private static final String FORMAT_CLASS = "java.class"; |
76 private static final String FORMAT_CLASS = "java.class"; |
123 @Override |
153 @Override |
124 public ResourceBundle getBundle(String baseName, Locale locale) { |
154 public ResourceBundle getBundle(String baseName, Locale locale) { |
125 Module module = this.getClass().getModule(); |
155 Module module = this.getClass().getModule(); |
126 String bundleName = toBundleName(baseName, locale); |
156 String bundleName = toBundleName(baseName, locale); |
127 ResourceBundle bundle = null; |
157 ResourceBundle bundle = null; |
|
158 |
128 for (String format : formats) { |
159 for (String format : formats) { |
129 try { |
160 try { |
130 if (FORMAT_CLASS.equals(format)) { |
161 if (FORMAT_CLASS.equals(format)) { |
131 PrivilegedAction<ResourceBundle> pa = () -> |
162 PrivilegedAction<ResourceBundle> pa = () -> |
132 ResourceBundleProviderSupport |
163 ResourceBundleProviderSupport |