package org.infinispan.jcache.util;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.atomic.LongAdder;
import javax.cache.integration.CacheLoader;
import javax.cache.integration.CacheLoaderException;
import org.infinispan.commons.util.CollectionFactory;
/**
* // TODO: Document this
*
* @author Galder ZamarreƱo
* @since // TODO
*/
public class InMemoryJCacheLoader<K, V> implements CacheLoader<K, V> {
private final ConcurrentMap<K, V> store = CollectionFactory.makeConcurrentMap();
private final LongAdder counter = new LongAdder();
public InMemoryJCacheLoader<K, V> store(K key, V value) {
store.put(key, value);
return this;
}
@Override
public V load(K key) throws CacheLoaderException {
V value = store.get(key);
if (value != null)
counter.increment();
return value;
}
@Override
public Map<K, V> loadAll(Iterable<? extends K> keys) throws CacheLoaderException {
Map<K, V> values = new HashMap<K, V>();
for (K key : keys)
values.put(key, load(key));
return values;
}
public long getLoadCount() {
return counter.longValue();
}
}