package org.agnitas.emm.extension;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import org.apache.log4j.Logger;
public class ResourceBundleManager {
private static final transient Logger logger = Logger.getLogger( ResourceBundleManager.class);
private final ExtensionSystem extensionSystem;
private final Map<String, Map<String, ResourceBundle>> pluginBundleCache;
public ResourceBundleManager( ExtensionSystem extensionSystem) {
this.extensionSystem = extensionSystem;
this.pluginBundleCache = new HashMap<String, Map<String, ResourceBundle>>();
}
public ResourceBundle getResourceBundle( String plugin, String bundleName) {
String bundleFileName = bundleName + ".properties";
Map<String, ResourceBundle> bundleMap = this.pluginBundleCache.get( plugin);
if( bundleMap == null) {
bundleMap = new HashMap<String, ResourceBundle>();
this.pluginBundleCache.put( plugin, bundleMap);
}
ResourceBundle bundle = bundleMap.get( bundleFileName);
if( bundle == null) {
InputStream stream = this.extensionSystem.getPluginResource( plugin, bundleFileName);
if( stream != null) {
try {
try {
bundle = new PropertyResourceBundle( stream);
bundleMap.put( bundleFileName, bundle);
} finally {
stream.close();
}
} catch( IOException e) {
logger.error( "Error reading resource bundle '" + bundleFileName + "' for plugin '" + plugin + "'", e);
}
} else {
logger.warn( "i18n bundle '" + bundleFileName + "' not found for plugin '" + plugin + "'");
}
}
return bundle;
}
}