001
014
015 package com.liferay.portal.kernel.util;
016
017 import com.liferay.registry.ServiceReference;
018 import com.liferay.registry.collections.ServiceReferenceMapper;
019 import com.liferay.registry.collections.ServiceTrackerCollections;
020 import com.liferay.registry.collections.ServiceTrackerMap;
021
022
025 public class ResourceBundleLoaderUtil {
026
027 public static ResourceBundleLoader getPortalResourceBundleLoader() {
028 return _portalResourceBundleLoader;
029 }
030
031 public static ResourceBundleLoader
032 getResourceBundleLoaderByBundleSymbolicName(String bundleSymbolicName) {
033
034 return _instance._bundleSymbolicNameServiceTrackerMap.getService(
035 bundleSymbolicName);
036 }
037
038 public static ResourceBundleLoader
039 getResourceBundleLoaderByServletContextName(String servletContextName) {
040
041 return _instance._servletContextNameServiceTrackerMap.getService(
042 servletContextName);
043 }
044
045 public static ResourceBundleLoader
046 getResourceBundleLoaderByServletContextNameAndBaseName(
047 String servletContextName, String baseName) {
048
049 return _instance._servletContextNameAndBaseNameServiceTrackerMap.
050 getService(baseName + "#" + servletContextName);
051 }
052
053 public static void setPortalResourceBundleLoader(
054 ResourceBundleLoader resourceBundleLoader) {
055
056 _portalResourceBundleLoader = resourceBundleLoader;
057 }
058
059 private ResourceBundleLoaderUtil() {
060 _bundleSymbolicNameServiceTrackerMap =
061 ServiceTrackerCollections.openSingleValueMap(
062 ResourceBundleLoader.class, "bundle.symbolic.name");
063 _servletContextNameAndBaseNameServiceTrackerMap =
064 ServiceTrackerCollections.openSingleValueMap(
065 ResourceBundleLoader.class,
066 "(&(resource.bundle.base.name=*)(servlet.context.name=*))",
067 new ServiceReferenceMapper<String, ResourceBundleLoader>() {
068
069 @Override
070 public void map(
071 ServiceReference<ResourceBundleLoader> serviceReference,
072 Emitter<String> emitter) {
073
074 Object baseName = serviceReference.getProperty(
075 "resource.bundle.base.name");
076 Object servletContextName =
077 serviceReference.getProperty(
078 "servlet.context.name");
079
080 emitter.emit(baseName + "#" + servletContextName);
081 }
082
083 });
084 _servletContextNameServiceTrackerMap =
085 ServiceTrackerCollections.openSingleValueMap(
086 ResourceBundleLoader.class, "servlet.context.name");
087 }
088
089 private static final ResourceBundleLoaderUtil _instance =
090 new ResourceBundleLoaderUtil();
091
092 private static ResourceBundleLoader _portalResourceBundleLoader;
093
094 private final ServiceTrackerMap<String, ResourceBundleLoader>
095 _bundleSymbolicNameServiceTrackerMap;
096 private final ServiceTrackerMap<String, ResourceBundleLoader>
097 _servletContextNameAndBaseNameServiceTrackerMap;
098 private final ServiceTrackerMap<String, ResourceBundleLoader>
099 _servletContextNameServiceTrackerMap;
100
101 }