package lucee.commons.io.cache.complex; import java.util.Date; import lucee.commons.io.cache.CacheEntry; import lucee.runtime.cache.CacheUtil; import lucee.runtime.op.Caster; import lucee.runtime.op.Decision; import lucee.runtime.type.Struct; import lucee.runtime.type.dt.DateTimeImpl; public class CacheComplexEntry implements CacheEntry { private CacheEntry entry; private CacheComplex cache; private CacheComplexData data; private Object value; public CacheComplexEntry(CacheComplex cache,CacheEntry entry) { this.cache=cache; this.entry=entry; } @Override public Date created() { return lastModified(); } @Override public Struct getCustomInfo() { return CacheUtil.getInfo(entry.getCustomInfo(),this); } @Override public String getKey() { return entry.getKey(); } @Override public Object getValue() { getData(); return value; } public CacheComplexData getData() { if(data!=null) return data; Object v = entry.getValue(); if(v instanceof CacheComplexData) { data=(CacheComplexData)v; value=data.value; } else if(v!=null) { value=v; } return null; } @Override public int hitCount() { CacheComplexData d = getData(); if(d!=null) return d.hitCount; return 0; } @Override public long idleTimeSpan() { long i=entry.idleTimeSpan(); if(i>0) return i; CacheComplexData d = getData(); if(d!=null && d.idle!=null && d.idle.longValue()>0) return d.idle.longValue(); return 0; } @Override public long liveTimeSpan() { long l=entry.liveTimeSpan(); if(l>0) return l; CacheComplexData d = getData(); if(d!=null && d.until!=null && d.until.longValue()>0) return d.until.longValue(); return 0; } @Override public Date lastHit() { Date d=entry.lastHit(); if(d!=null) return d; return lastModified(); } @Override public Date lastModified() { Date d=entry.lastModified(); if(d!=null) return d; CacheComplexData ccd = getData(); if(ccd!=null && ccd.lastModified>0) return new DateTimeImpl(ccd.lastModified,false); return new DateTimeImpl(0, false); } @Override public long size() { long s = entry.size(); if(s>0) return s; Object v = getValue(); if(v!=null && Decision.isSimpleValue(v)) return Caster.toString(v,"").length(); return 0; } }