package org.infinispan.spring.provider;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import org.springframework.cache.Cache;
/**
* <p>
* A {@link org.springframework.cache.Cache <code>Cache</code>} implementation that delegates to a
* {@link org.infinispan.Cache <code>org.infinispan.Cache</code>} instance supplied at construction
* time.
* </p>
*
* @author <a href="mailto:olaf DOT bergner AT gmx DOT de">Olaf Bergner</a>
* @author <a href="mailto:marius.bogoevici@gmail.com">Marius Bogoevici</a>
*
*/
public class SpringCache implements Cache {
private final CacheDelegate cacheImplementation;
/**
* @param nativeCache underlying cache
*/
public SpringCache(final org.infinispan.commons.api.BasicCache<Object, Object> nativeCache) {
cacheImplementation = new CacheDelegate(nativeCache);
}
/**
* @see org.springframework.cache.Cache#getName()
*/
@Override
public String getName() {
return this.cacheImplementation.getName();
}
/**
* @see org.springframework.cache.Cache#getNativeCache()
*/
@Override
public org.infinispan.commons.api.BasicCache<?, ?> getNativeCache() {
return this.cacheImplementation.getNativeCache();
}
/**
* @see org.springframework.cache.Cache#get(java.lang.Object)
*/
@Override
public ValueWrapper get(final Object key) {
return cacheImplementation.get(key);
}
@Override
public <T> T get(Object key, Class<T> type) {
return cacheImplementation.get(key, type);
}
@Override
public <T> T get(Object key, Callable<T> valueLoader) {
return cacheImplementation.get(key, valueLoader);
}
/**
* @see org.springframework.cache.Cache#put(java.lang.Object, java.lang.Object)
*/
@Override
public void put(final Object key, final Object value) {
this.cacheImplementation.put(key, value);
}
/**
* @see CacheDelegate#put(Object, Object, long, TimeUnit).
*/
public void put(final Object key, final Object value, long lifespan, TimeUnit unit) {
this.cacheImplementation.put(key, value, lifespan, unit);
}
@Override
public ValueWrapper putIfAbsent(Object key, Object value) {
return cacheImplementation.putIfAbsent(key, value);
}
/**
* @see org.springframework.cache.Cache#evict(java.lang.Object)
*/
@Override
public void evict(final Object key) {
this.cacheImplementation.evict(key);
}
/**
* @see org.springframework.cache.Cache#clear()
*/
@Override
public void clear() {
this.cacheImplementation.clear();
}
/**
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "InfinispanCache [nativeCache = " + this.cacheImplementation.getNativeCache() + "]";
}
}