package de.axone.cache.ng;
public class CacheWrapperTimeout<K,O> extends CacheWrapper<K,O>{
private final long maxLifeTime;
public CacheWrapperTimeout( CacheNG.Cache<K,O> backend, long maxLifeTime ){
super( backend );
this.maxLifeTime = maxLifeTime;
}
@Override
public CacheNG.Cache.Entry<O> fetchEntry( K key ) {
CacheNG.Cache.Entry<O> entry = wrapped.fetchEntry( key );
if( entry == null ) return null;
if( ! isAlive( key, entry ) ){
invalidate( key );
return null;
}
return entry;
}
@Override
public O fetch( K key ) {
CacheNG.Cache.Entry<O> entry = fetchEntry( key );
if( entry == null ) return null;
return entry.data();
}
@Override
public boolean isCached( K key ) {
CacheNG.Cache.Entry<O> entry = wrapped.fetchEntry( key );
if( entry == null ) return false;
return isAlive( key, entry );
}
protected boolean isAlive( K key, CacheNG.Cache.Entry<O> entry ){
if( maxLifeTime >= 0 ){
long age = System.currentTimeMillis() - entry.creation();
return age < maxLifeTime;
}
return true;
}
@Override
public String info() {
return super.info() + "[Timeout: " + maxLifeTime + " ms]";
}
}