package de.otto.edison.cache.configuration; import de.otto.edison.annotations.Beta; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; import org.springframework.cache.caffeine.CaffeineCache; import java.util.Collection; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import static com.github.benmanes.caffeine.cache.Caffeine.from; @Beta public class EdisonCacheManager implements CacheManager, CacheRegistry { private ConcurrentMap<String, Cache> caches; public EdisonCacheManager(final List<CaffeineCacheConfig> cacheConfigs, final List<CaffeineCache> caffeineCaches) { caches = new ConcurrentHashMap<>(); if (cacheConfigs != null) { cacheConfigs .stream() .map(config -> new CaffeineCache(config.cacheName, from(config.spec).build())) .forEach(cache -> caches.put(cache.getName(), cache)); } if (caffeineCaches != null) { caffeineCaches .forEach(cache -> caches.put(cache.getName(), cache)); } } /** * @deprecated will be removed in 2.0.0. You can just expose an instance of CaffeineCache as a Spring Bean instead. */ @Override @SuppressWarnings({"unchecked", "rawtypes"}) @Deprecated public void registerCache(CaffeineCacheConfig config, com.github.benmanes.caffeine.cache.Cache cache) { caches.put(config.cacheName, new CaffeineCache(config.cacheName, cache)); } @Override public Cache getCache(String name) { return caches.get(name); } @Override public Collection<String> getCacheNames() { return caches.keySet(); } }