package org.infinispan.jcache.remote; import java.util.concurrent.TimeUnit; import org.infinispan.client.hotrod.RemoteCache; public class RemoteCacheWithStats<K, V> extends RemoteCacheWrapper<K, V> { private LocalStatistics stats; public RemoteCacheWithStats(RemoteCache<K, V> delegate, LocalStatistics stats) { super(delegate); this.stats = stats; } @Override public V get(Object key) { V v = delegate.get(key); if (v == null) { stats.incrementCacheMisses(); } else { stats.incrementCacheHits(); } stats.incrementCacheGets(); return v; } @Override public V put(K key, V value) { V v = delegate.put(key, value); stats.incrementCachePuts(); return v; } @Override public V put(K key, V value, long lifespan, TimeUnit unit) { V v = delegate.put(key, value, lifespan, unit); stats.incrementCachePuts(); return v; } @Override public V putIfAbsent(K key, V value) { V result = delegate.putIfAbsent(key, value); if (result == null) { stats.incrementCachePuts(); } return result; } @Override public V replace(K key, V value) { V v = delegate.replace(key, value); if (v != null) { stats.incrementCacheHits(); stats.incrementCachePuts(); } else { stats.incrementCacheMisses(); } return v; } @Override public boolean replaceWithVersion(K key, V newValue, long version) { boolean replaced = delegate.replaceWithVersion(key, newValue, version); if (replaced) { stats.incrementCachePuts(); } return replaced; } @Override public V remove(Object key) { V v = delegate.remove(key); if (v != null) { stats.incrementCacheRemovals(); } return v; } @Override public boolean removeWithVersion(K key, long version) { boolean removed = delegate.removeWithVersion(key, version); if (removed) { stats.incrementCacheRemovals(); } return removed; } }