1 package org.apache.commons.jcs3.engine.memory;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.IOException;
23 import java.util.HashMap;
24 import java.util.Iterator;
25 import java.util.LinkedHashSet;
26 import java.util.Map;
27 import java.util.Set;
28
29 import org.apache.commons.jcs3.engine.behavior.ICacheElement;
30 import org.apache.commons.jcs3.engine.behavior.ICompositeCacheAttributes;
31 import org.apache.commons.jcs3.engine.control.CompositeCache;
32 import org.apache.commons.jcs3.engine.memory.behavior.IMemoryCache;
33 import org.apache.commons.jcs3.engine.stats.behavior.IStats;
34
35
36
37
38 public class MockMemoryCache<K, V>
39 implements IMemoryCache<K, V>
40 {
41
42 private ICompositeCacheAttributes cacheAttr;
43
44
45 private final HashMap<K, ICacheElement<K, V>> map = new HashMap<>();
46
47
48 public int waterfallCallCount;
49
50
51 public int lastNumberOfFreedElements;
52
53
54
55
56
57 @Override
58 public void initialize( final CompositeCache<K, V> cache )
59 {
60
61 }
62
63
64
65
66
67
68 @Override
69 public void dispose()
70 throws IOException
71 {
72
73 }
74
75
76 @Override
77 public int getSize()
78 {
79 return map.size();
80 }
81
82
83 @Override
84 public IStats getStatistics()
85 {
86 return null;
87 }
88
89
90
91 @Override
92 public Set<K> getKeySet()
93 {
94 return new LinkedHashSet<>(map.keySet());
95 }
96
97
98
99
100
101
102 @Override
103 public boolean remove( final K key )
104 throws IOException
105 {
106 return map.remove( key ) != null;
107 }
108
109
110
111
112 @Override
113 public void removeAll()
114 throws IOException
115 {
116 map.clear();
117 }
118
119
120
121
122
123
124 @Override
125 public ICacheElement<K, V> get( final K key )
126 throws IOException
127 {
128 return map.get( key );
129 }
130
131
132
133
134
135
136 @Override
137 public Map<K, ICacheElement<K, V>> getMultiple(final Set<K> keys)
138 throws IOException
139 {
140 final Map<K, ICacheElement<K, V>> elements = new HashMap<>();
141
142 if ( keys != null && !keys.isEmpty() )
143 {
144 final Iterator<K> iterator = keys.iterator();
145
146 while ( iterator.hasNext() )
147 {
148 final K key = iterator.next();
149
150 final ICacheElement<K, V> element = get( key );
151
152 if ( element != null )
153 {
154 elements.put( key, element );
155 }
156 }
157 }
158
159 return elements;
160 }
161
162
163
164
165
166
167 @Override
168 public ICacheElement<K, V> getQuiet( final K key )
169 throws IOException
170 {
171 return map.get( key );
172 }
173
174
175
176
177
178 @Override
179 public void waterfal( final ICacheElement<K, V> ce )
180 throws IOException
181 {
182 waterfallCallCount++;
183 }
184
185
186
187
188
189 @Override
190 public void update( final ICacheElement<K, V> ce )
191 throws IOException
192 {
193 if ( ce != null )
194 {
195 map.put( ce.getKey(), ce );
196 }
197 }
198
199
200
201
202 @Override
203 public ICompositeCacheAttributes getCacheAttributes()
204 {
205 return cacheAttr;
206 }
207
208
209
210
211 @Override
212 public void setCacheAttributes( final ICompositeCacheAttributes cattr )
213 {
214 this.cacheAttr = cattr;
215 }
216
217
218 @Override
219 public CompositeCache<K, V> getCompositeCache()
220 {
221 return null;
222 }
223
224
225
226
227
228 public Set<K> getGroupKeys( final String group )
229 {
230 return null;
231 }
232
233
234
235
236 public Set<String> getGroupNames()
237 {
238 return null;
239 }
240
241
242
243
244
245
246 @Override
247 public int freeElements( final int numberToFree )
248 throws IOException
249 {
250 lastNumberOfFreedElements = numberToFree;
251 return 0;
252 }
253 }