001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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    /**
023     * @author Carlos Sierra Andr??s
024     */
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    }