package uk.nhs.kch.rassyeyanie.framework.configuration; import java.util.Collections; import java.util.HashSet; import java.util.Set; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; /** */ public class PersistentCacheServiceImpl implements CacheService { private CacheManager cacheManager; private String cacheName; public void setCacheManager(CacheManager cacheManager) { this.cacheManager = cacheManager; } public void setCacheName(String cacheName) { this.cacheName = cacheName; } @Override public Set<String> getCachedValues(String key) { return Collections.unmodifiableSet(fetchDataFromCache(key)); } @Override public void addCachedValue(String key, String value) { Set<String> cachedValues = fetchDataFromCache(key); cachedValues.add(value); } @Override public void removeCachedValue(String key, String value) { Set<String> cachedValues = fetchDataFromCache(key); cachedValues.remove(value); } private Cache getCache() { if (!cacheManager.cacheExists(cacheName)) { cacheManager.addCache(cacheName); } return cacheManager.getCache(cacheName); } @SuppressWarnings("unchecked") private Set<String> fetchDataFromCache(String key) { Cache cache = getCache(); Element element = cache.get(key); if (element == null) { element = new Element(key, new HashSet<String>()); cache.put(element); } return (Set<String>)element.getObjectValue(); } }