
org.sakaiproject.util.DbResourceBundle Maven / Gradle / Ivy
/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/kernel/branches/SAK-18678/api/src/main/java/org/sakaiproject/site/api/Site.java $
* $Id: Site.java 81275 2010-08-14 09:24:56Z [email protected] $
***********************************************************************************
*
* Copyright (c) 2003, 2004, 2005, 2006, 2008 Sakai Foundation
*
* Licensed under the Educational Community License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.opensource.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
**********************************************************************************/
package org.sakaiproject.util;
import org.sakaiproject.messagebundle.api.MessageBundleService;
import org.sakaiproject.component.cover.ComponentManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.sakaiproject.thread_local.api.ThreadLocalManager;
import java.util.*;
import java.util.Map.Entry;
/**
* An extension of ResourceBundle which gets the bundle data in the normal way and then
* consults with the MessageBundleService for addition data.
* Any values returned by the MessageBundleService will override values returned from
* the normal ResourceBundle.
*
* Also provides a method to index new bundle data by interacting with the MessageBundleService
* to do the real work.
*
* Created by IntelliJ IDEA.
* User: jbush
* Date: May 7, 2009
* Time: 11:03:59 AM
* To change this template use File | Settings | File Templates.
*/
@SuppressWarnings({"rawtypes","unchecked"})
public class DbResourceBundle extends ResourceBundle {
protected Locale locale;
protected Map entries = new HashMap();
protected String baseName;
protected static Log log = LogFactory.getLog(DbResourceBundle.class);
private DbResourceBundle(String baseName, Locale locale) {
this.baseName = baseName;
this.locale = locale;
}
private static Object LOCK = new Object();
private static ThreadLocalManager threadLocalManager;
protected static ThreadLocalManager getThreadLocalManager() {
if (threadLocalManager == null) {
synchronized (LOCK) {
ThreadLocalManager component = (ThreadLocalManager) ComponentManager.get(ThreadLocalManager.class);
if (component == null) {
throw new IllegalStateException("Unable to find the ThreadLocalManager using the ComponentManager");
} else {
threadLocalManager = component;
}
}
}
return threadLocalManager;
}
/**
*
* @param baseName
* @param locale
* @param classLoader
* @return ResourceBundle with values from classpath loading, and overridden by any values
* retrieved from the MessageBundleService
*/
static public ResourceBundle addResourceBundle(String baseName, Locale locale, ClassLoader classLoader) {
DbResourceBundle newBundle = new DbResourceBundle(baseName, locale);
String context = (String) getThreadLocalManager().get(org.sakaiproject.util.RequestFilter.CURRENT_CONTEXT);
try
{
if (context != null) {
Map bundleValues = getMessageBundleService().getBundle(baseName, context, locale);
Iterator> bundleEntryIter = bundleValues.entrySet().iterator();
while (bundleEntryIter.hasNext()) {
Entry entry = bundleEntryIter.next();
String key = entry.getKey();
String value = entry.getValue();
newBundle.addProperty(key, value);
}
}
ResourceBundle loadedBundle = null;
try
{
if ( classLoader == null )
loadedBundle = ResourceBundle.getBundle(baseName, locale);
else
loadedBundle = ResourceBundle.getBundle(baseName, locale, classLoader);
}
catch (NullPointerException e)
{
} // ignore
Enumeration keys = loadedBundle.getKeys();
while (keys.hasMoreElements()){
String key = keys.nextElement();
if (newBundle.handleGetObject(key) == null) {
newBundle.addProperty(key, loadedBundle.getString(key));
}
}
}
catch (Exception e)
{
log.error("problem loading bundle: " +baseName + " locale: " + locale.toString() + " " + e.getMessage());
}
return newBundle;
}
protected void addProperty(String name, String value) {
entries.put(name, value);
}
public Locale getLocale() {
return locale;
}
protected Object handleGetObject(String key) {
return entries.get(key);
}
public Enumeration getKeys() {
return Collections.enumeration(entries.keySet());
}
/**
* imports or updates bundle data via the MessageBundleService
* @param baseName
* @param newBundle
* @param loc
* @param classLoader
*/
public static void indexResourceBundle(String baseName, ResourceBundle newBundle, Locale loc, ClassLoader classLoader) {
// serves as the moduleName
String context = (String) getThreadLocalManager().get(org.sakaiproject.util.RequestFilter.CURRENT_CONTEXT);
if (context == null) return;
MessageBundleService messageBundleService = getMessageBundleService();
messageBundleService.saveOrUpdate(baseName, context, newBundle, loc);
}
private static MessageBundleService getMessageBundleService() {
return (MessageBundleService) ComponentManager.get(MessageBundleService.class.getName());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy