jdk/src/java.base/share/classes/java/util/spi/AbstractResourceBundleProvider.java
changeset 38782 ff27bc5c278e
parent 36511 9d0388c6b336
child 42338 a60f280f803c
equal deleted inserted replaced
38781:f4e9fc088cdd 38782:ff27bc5c278e
    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