package org.joget.commons.spring.model; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.List; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import org.joget.commons.util.DynamicDataSourceManager; public class ResourceBundleMessageDao extends AbstractSpringDao { public static final String ENTITY_NAME = "ResourceBundleMessage"; private Cache cache; public void setCache(Cache cache) { this.cache = cache; } public void saveOrUpdate(ResourceBundleMessage message) { String cacheKey = getCacheKey(message.getKey(),message.getLocale()); cache.remove(cacheKey); super.saveOrUpdate(ENTITY_NAME, message); } public void delete(ResourceBundleMessage message) { String cacheKey = getCacheKey(message.getKey(),message.getLocale()); cache.remove(cacheKey); super.delete(ENTITY_NAME, message); } public ResourceBundleMessage getMessageById(String id) { return (ResourceBundleMessage) super.find(ENTITY_NAME, id); } public ResourceBundleMessage getMessage(String key, String locale) { String cacheKey = getCacheKey(key,locale); Element element = cache.get(cacheKey); if (element == null) { Collection<ResourceBundleMessage> results = new ArrayList<ResourceBundleMessage>(); results = super.find(ENTITY_NAME, "WHERE e.key = ? AND e.locale = ?", new String[]{key, locale}, null, null, null, null); ResourceBundleMessage result = null; if (results != null && results.size() != 0) { result = results.iterator().next(); } element = new Element(cacheKey, (Serializable) result); cache.put(element); return result; }else{ return (ResourceBundleMessage) element.getValue(); } } public List<ResourceBundleMessage> getMessages(String condition, String[] param, String sort, Boolean desc, Integer start, Integer rows) { if (condition != null && condition.trim().length() != 0) { return (List<ResourceBundleMessage>) super.find(ENTITY_NAME, condition, param, sort, desc, start, rows); } else { return (List<ResourceBundleMessage>) super.find(ENTITY_NAME, "", new Object[]{}, sort, desc, start, rows); } } public List<ResourceBundleMessage> getMessages(String locale, String sort, Boolean desc, Integer start, Integer rows) { if (locale != null && locale.trim().length() != 0) { return (List<ResourceBundleMessage>) super.find(ENTITY_NAME, "WHERE e.locale = ?", new String[]{locale}, sort, desc, start, rows); } else { return (List<ResourceBundleMessage>) super.find(ENTITY_NAME, "", new Object[]{}, sort, desc, start, rows); } } public Long count(String condition, Object[] params) { return super.count(ENTITY_NAME, condition, params); } private String getCacheKey(String key, String locale){ return DynamicDataSourceManager.getCurrentProfile()+key+locale; } }