/* * ResourceBundleRepository.java * */ package org.smartly.commons.i18n.resourcebundle.cache; import org.smartly.commons.i18n.resourcebundle.bundle.IResourceBundle; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * This singleton repository is cache for application * ResourceBundle. * * @author */ public class ResourceBundleCache { private final Map<String, IResourceBundle> _resourceBundleCache; /** * Creates a new instance of ResourceBundleCache */ private ResourceBundleCache() { _resourceBundleCache = Collections.synchronizedMap(new HashMap<String, IResourceBundle>()); } @Override protected void finalize() throws Throwable { try { if (null != _resourceBundleCache) { _resourceBundleCache.clear(); } } catch (Throwable ignored) { } super.finalize(); } public String getResourceFromCache(final String cacheKey, final String resourceKey) { synchronized (_resourceBundleCache) { IResourceBundle rb = _resourceBundleCache.get(cacheKey); if (null == rb) return null; return rb.getString(resourceKey); } } public void addResourceBundleToCache(String key, IResourceBundle rb) { synchronized (_resourceBundleCache) { _resourceBundleCache.put(key, rb); } } public IResourceBundle getResourceBundleFromCache(String key) { synchronized (_resourceBundleCache) { return _resourceBundleCache.get(key); } } public void clearCache() { synchronized (_resourceBundleCache) { _resourceBundleCache.clear(); } } // ------------------------------------------------------------------------ // S T A T I C // ------------------------------------------------------------------------ private static ResourceBundleCache _instance; public static ResourceBundleCache getInstance() { if (null == _instance) _instance = new ResourceBundleCache(); return _instance; } public static void clear() { ResourceBundleCache instance = getInstance(); instance.clearCache(); } public static void add(String key, IResourceBundle rb) { ResourceBundleCache instance = getInstance(); instance.addResourceBundleToCache(key, rb); } public static IResourceBundle get(String key) { ResourceBundleCache instance = getInstance(); return instance.getResourceBundleFromCache(key); } public static String getLabel(String key, String name) { ResourceBundleCache instance = getInstance(); return instance.getResourceFromCache(key, name); } }