001
014
015 package com.liferay.taglib.util;
016
017 import com.liferay.portal.kernel.util.AggregateResourceBundle;
018 import com.liferay.portal.kernel.util.JavaConstants;
019 import com.liferay.portal.kernel.util.ResourceBundleUtil;
020 import com.liferay.portal.util.PortalUtil;
021
022 import java.util.Collections;
023 import java.util.Enumeration;
024 import java.util.Locale;
025 import java.util.MissingResourceException;
026 import java.util.ResourceBundle;
027
028 import javax.portlet.PortletConfig;
029
030 import javax.servlet.http.HttpServletRequest;
031 import javax.servlet.jsp.PageContext;
032
033
036 public class TagResourceBundleUtil {
037
038 public static ResourceBundle getResourceBundle(PageContext pageContext) {
039 ResourceBundle resourceBundle =
040 (ResourceBundle)pageContext.getAttribute("resourceBundle");
041
042 if (resourceBundle != null) {
043 return resourceBundle;
044 }
045
046 HttpServletRequest request =
047 (HttpServletRequest)pageContext.getRequest();
048
049 Locale locale = PortalUtil.getLocale(request);
050
051 return getResourceBundle(pageContext, "content.Language", locale);
052 }
053
054 public static ResourceBundle getResourceBundle(
055 PageContext pageContext, String baseName, Locale locale) {
056
057 ResourceBundle pageResourceBundle = getPageResourceBundle(
058 pageContext, baseName, locale);
059
060 HttpServletRequest request =
061 (HttpServletRequest)pageContext.getRequest();
062
063 ResourceBundle portletResourceBundle = getPortletResourceBundle(
064 request, locale);
065
066 ResourceBundle portalResourceBundle = PortalUtil.getResourceBundle(
067 locale);
068
069 if (pageResourceBundle.equals(portletResourceBundle)) {
070 return new AggregateResourceBundle(
071 portletResourceBundle, portalResourceBundle);
072 }
073
074 return new AggregateResourceBundle(
075 pageResourceBundle, portletResourceBundle, portalResourceBundle);
076 }
077
078 protected static ResourceBundle getPageResourceBundle(
079 PageContext pageContext, String baseName, Locale locale) {
080
081 try {
082 Object page = pageContext.getPage();
083
084 return ResourceBundleUtil.getBundle(
085 baseName, locale, page.getClass());
086 }
087 catch (MissingResourceException mre) {
088 return _emptyResourceBundle;
089 }
090 }
091
092 protected static ResourceBundle getPortletResourceBundle(
093 HttpServletRequest request, Locale locale) {
094
095 PortletConfig portletConfig = (PortletConfig)request.getAttribute(
096 JavaConstants.JAVAX_PORTLET_CONFIG);
097
098 if (portletConfig != null) {
099 return portletConfig.getResourceBundle(locale);
100 }
101
102 return _emptyResourceBundle;
103 }
104
105 private static final ResourceBundle _emptyResourceBundle =
106 new EmptyResourceBundle();
107
108 private static class EmptyResourceBundle extends ResourceBundle {
109
110 @Override
111 public boolean containsKey(String key) {
112 return false;
113 }
114
115 @Override
116 public Enumeration<String> getKeys() {
117 return Collections.emptyEnumeration();
118 }
119
120 @Override
121 protected Object handleGetObject(String key) {
122 return null;
123 }
124
125 }
126
127 }