001package lucee.commons.io.cache.complex; 002 003import java.io.IOException; 004import java.util.ArrayList; 005import java.util.Iterator; 006import java.util.List; 007 008import lucee.commons.io.cache.Cache; 009import lucee.commons.io.cache.CacheEntry; 010import lucee.commons.io.cache.CacheEntryFilter; 011import lucee.commons.io.cache.CacheKeyFilter; 012import lucee.runtime.cache.CacheConnection; 013import lucee.runtime.cache.CacheUtil; 014import lucee.runtime.config.Config; 015import lucee.runtime.type.Struct; 016 017public class CacheComplex implements Cache { 018 019 private Cache cache; 020 private CacheConnection cc; 021 022 public CacheComplex(CacheConnection cc, Cache cache) { 023 this.cc=cc; 024 this.cache=cache; 025 026 } 027 028 @Override 029 public List<CacheEntry> entries() throws IOException { 030 return entries(cache.entries()); 031 } 032 033 @Override 034 public List<CacheEntry> entries(CacheKeyFilter filter) throws IOException { 035 return entries(cache.entries(filter)); 036 } 037 038 @Override 039 public List<CacheEntry> entries(CacheEntryFilter filter) throws IOException { 040 return entries(cache.entries(filter)); 041 } 042 043 private List<CacheEntry> entries(List<CacheEntry> entries) { 044 if(entries==null || entries.size()==0) return entries; 045 046 Iterator<CacheEntry> it = entries.iterator(); 047 ArrayList<CacheEntry> list=new ArrayList<CacheEntry>(entries.size()); 048 CacheEntry entry; 049 while(it.hasNext()) { 050 entry=it.next(); 051 if(entry!=null) list.add(new CacheComplexEntry(this,entry)); 052 } 053 return list; 054 } 055 056 @Override 057 public CacheEntry getCacheEntry(String key) throws IOException { 058 CacheEntry entry = cache.getCacheEntry(key); 059 if(entry==null) return entry; 060 return new CacheComplexEntry(this,entry); 061 } 062 063 @Override 064 public CacheEntry getCacheEntry(String key, CacheEntry defaultValue) { 065 CacheEntry entry = cache.getCacheEntry(key,defaultValue); 066 if(entry==null || entry==defaultValue) return entry; 067 return new CacheComplexEntry(this,entry); 068 } 069 070 @Override 071 public Struct getCustomInfo() { 072 return CacheUtil.getInfo(cache.getCustomInfo(),cache); 073 } 074 075 @Override 076 public Object getValue(String key) throws IOException { 077 Object value = cache.getValue(key); 078 if(value instanceof CacheComplexData) return ((CacheComplexData)value).value; 079 return value; 080 } 081 082 @Override 083 public Object getValue(String key, Object defaultValue) { 084 Object value = cache.getValue(key,defaultValue); 085 if(value instanceof CacheComplexData) return ((CacheComplexData)value).value; 086 return value; 087 } 088 089 @Override 090 public long hitCount() { 091 return cache.hitCount(); 092 } 093 @Override 094 public long missCount() { 095 return cache.missCount(); 096 } 097 098 @Override 099 public void put(String key, Object value, Long idle, Long until) { 100 cache.put(key, value==null?null:new CacheComplexData(value,idle,until), idle, until); 101 } 102 103 @Override 104 public int remove(CacheEntryFilter filter) throws IOException { 105 return cache.remove(filter); 106 } 107 108 @Override 109 public List<String> keys(CacheEntryFilter filter) throws IOException { 110 return cache.keys(filter); 111 } 112 113 @Override 114 public List<Object> values() throws IOException { 115 return values(cache.values()); 116 } 117 118 @Override 119 public List<Object> values(CacheKeyFilter filter) throws IOException { 120 return values(cache.values(filter)); 121 } 122 123 @Override 124 public List<Object> values(CacheEntryFilter filter) throws IOException { 125 return values(cache.values(filter)); 126 } 127 128 public List<Object> values(List<Object> values) { 129 if(values==null || values.size()==0) return values; 130 131 ArrayList<Object> list=new ArrayList<Object>(); 132 Iterator<Object> it = values.iterator(); 133 Object v; 134 while(it.hasNext()) { 135 v=it.next(); 136 if(v instanceof CacheComplexData) list.add(((CacheComplexData)v).value); 137 else list.add(v); 138 } 139 return list; 140 } 141 142 143 144 ///////////////////////////////////////////////////////////////////////////////////// 145 146 @Override 147 public boolean contains(String key) { 148 return cache.contains(key); 149 } 150 151 @Override 152 public void init(Config config, String arg1, Struct arg2) throws IOException { 153 cache.init(config, arg1, arg2); 154 } 155 156 @Override 157 public List<String> keys() throws IOException { 158 return cache.keys(); 159 } 160 161 @Override 162 public List<String> keys(CacheKeyFilter filter) throws IOException { 163 return cache.keys(filter); 164 } 165 166 @Override 167 public boolean remove(String key) throws IOException { 168 return cache.remove(key); 169 } 170 171 @Override 172 public int remove(CacheKeyFilter filter) throws IOException { 173 return cache.remove(filter); 174 } 175 176}