001package lucee.commons.io.cache.complex; 002 003import java.util.Date; 004 005import lucee.commons.date.DateTimeUtil; 006import lucee.commons.io.cache.CacheEntry; 007import lucee.runtime.cache.CacheUtil; 008import lucee.runtime.cache.ram.RamCacheEntry; 009import lucee.runtime.op.Caster; 010import lucee.runtime.op.Decision; 011import lucee.runtime.type.Struct; 012import lucee.runtime.type.StructImpl; 013import lucee.runtime.type.dt.DateTime; 014import lucee.runtime.type.dt.DateTimeImpl; 015 016public class CacheComplexEntry implements CacheEntry { 017 018 private CacheEntry entry; 019 private CacheComplex cache; 020 private CacheComplexData data; 021 private Object value; 022 023 public CacheComplexEntry(CacheComplex cache,CacheEntry entry) { 024 this.cache=cache; 025 this.entry=entry; 026 } 027 028 @Override 029 public Date created() { 030 return lastModified(); 031 } 032 033 @Override 034 public Struct getCustomInfo() { 035 return CacheUtil.getInfo(entry.getCustomInfo(),this); 036 } 037 038 @Override 039 public String getKey() { 040 return entry.getKey(); 041 } 042 043 @Override 044 public Object getValue() { 045 getData(); 046 return value; 047 } 048 049 public CacheComplexData getData() { 050 if(data!=null) return data; 051 Object v = entry.getValue(); 052 if(v instanceof CacheComplexData) { 053 data=(CacheComplexData)v; 054 value=data.value; 055 } 056 else if(v!=null) { 057 value=v; 058 } 059 return null; 060 } 061 062 @Override 063 public int hitCount() { 064 CacheComplexData d = getData(); 065 if(d!=null) return d.hitCount; 066 return 0; 067 } 068 069 @Override 070 public long idleTimeSpan() { 071 long i=entry.idleTimeSpan(); 072 if(i>0) return i; 073 074 CacheComplexData d = getData(); 075 if(d!=null && d.idle!=null && d.idle.longValue()>0) return d.idle.longValue(); 076 077 return 0; 078 } 079 080 @Override 081 public long liveTimeSpan() { 082 long l=entry.liveTimeSpan(); 083 if(l>0) return l; 084 085 CacheComplexData d = getData(); 086 if(d!=null && d.until!=null && d.until.longValue()>0) return d.until.longValue(); 087 088 return 0; 089 } 090 091 @Override 092 public Date lastHit() { 093 Date d=entry.lastHit(); 094 if(d!=null) return d; 095 096 return lastModified(); 097 098 } 099 100 @Override 101 public Date lastModified() { 102 Date d=entry.lastModified(); 103 if(d!=null) return d; 104 105 CacheComplexData ccd = getData(); 106 if(ccd!=null && ccd.lastModified>0) return new DateTimeImpl(ccd.lastModified,false); 107 108 return new DateTimeImpl(0, false); 109 } 110 111 @Override 112 public long size() { 113 long s = entry.size(); 114 if(s>0) return s; 115 116 Object v = getValue(); 117 if(v!=null && Decision.isSimpleValue(v)) 118 return Caster.toString(v,"").length(); 119 return 0; 120 } 121 122}