1 package org.apache.commons.jcs3.auxiliary;
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.Map;
25 import java.util.Objects;
26 import java.util.Set;
27 import java.util.stream.Collectors;
28
29 import org.apache.commons.jcs3.engine.behavior.ICacheElement;
30 import org.apache.commons.jcs3.engine.behavior.IElementSerializer;
31 import org.apache.commons.jcs3.engine.logging.CacheEvent;
32 import org.apache.commons.jcs3.engine.logging.behavior.ICacheEvent;
33 import org.apache.commons.jcs3.engine.logging.behavior.ICacheEventLogger;
34 import org.apache.commons.jcs3.engine.match.KeyMatcherPatternImpl;
35 import org.apache.commons.jcs3.engine.match.behavior.IKeyMatcher;
36 import org.apache.commons.jcs3.utils.serialization.StandardSerializer;
37
38
39 public abstract class AbstractAuxiliaryCache<K, V>
40 implements AuxiliaryCache<K, V>
41 {
42
43 private ICacheEventLogger cacheEventLogger;
44
45
46 private IElementSerializer elementSerializer = new StandardSerializer();
47
48
49 private IKeyMatcher<K> keyMatcher = new KeyMatcherPatternImpl<>();
50
51
52
53
54
55
56
57
58 protected Map<K, ICacheElement<K, V>> processGetMultiple(final Set<K> keys) throws IOException
59 {
60 if (keys != null)
61 {
62 return keys.stream()
63 .map(key -> {
64 try
65 {
66 return get(key);
67 }
68 catch (final IOException e)
69 {
70 return null;
71 }
72 })
73 .filter(Objects::nonNull)
74 .collect(Collectors.toMap(
75 ICacheElement::getKey,
76 element -> element));
77 }
78
79 return new HashMap<>();
80 }
81
82
83
84
85
86
87
88
89 @Override
90 public abstract ICacheElement<K, V> get( K key ) throws IOException;
91
92
93
94
95
96
97
98
99 protected ICacheEvent<K> createICacheEvent( final ICacheElement<K, V> item, final String eventName )
100 {
101 if ( cacheEventLogger == null )
102 {
103 return new CacheEvent<>();
104 }
105 final String diskLocation = getEventLoggingExtraInfo();
106 String regionName = null;
107 K key = null;
108 if ( item != null )
109 {
110 regionName = item.getCacheName();
111 key = item.getKey();
112 }
113 return cacheEventLogger.createICacheEvent( getAuxiliaryCacheAttributes().getName(), regionName, eventName,
114 diskLocation, key );
115 }
116
117
118
119
120
121
122
123
124
125 protected <T> ICacheEvent<T> createICacheEvent( final String regionName, final T key, final String eventName )
126 {
127 if ( cacheEventLogger == null )
128 {
129 return new CacheEvent<>();
130 }
131 final String diskLocation = getEventLoggingExtraInfo();
132 return cacheEventLogger.createICacheEvent( getAuxiliaryCacheAttributes().getName(), regionName, eventName,
133 diskLocation, key );
134
135 }
136
137
138
139
140
141
142 protected <T> void logICacheEvent( final ICacheEvent<T> cacheEvent )
143 {
144 if ( cacheEventLogger != null )
145 {
146 cacheEventLogger.logICacheEvent( cacheEvent );
147 }
148 }
149
150
151
152
153
154
155
156
157 protected void logApplicationEvent( final String source, final String eventName, final String optionalDetails )
158 {
159 if ( cacheEventLogger != null )
160 {
161 cacheEventLogger.logApplicationEvent( source, eventName, optionalDetails );
162 }
163 }
164
165
166
167
168
169
170
171
172 protected void logError( final String source, final String eventName, final String errorMessage )
173 {
174 if ( cacheEventLogger != null )
175 {
176 cacheEventLogger.logError( source, eventName, errorMessage );
177 }
178 }
179
180
181
182
183
184
185 public abstract String getEventLoggingExtraInfo();
186
187
188
189
190
191
192 @Override
193 public void setCacheEventLogger( final ICacheEventLogger cacheEventLogger )
194 {
195 this.cacheEventLogger = cacheEventLogger;
196 }
197
198
199
200
201
202
203 public ICacheEventLogger getCacheEventLogger()
204 {
205 return this.cacheEventLogger;
206 }
207
208
209
210
211
212
213
214
215
216 @Override
217 public void setElementSerializer( final IElementSerializer elementSerializer )
218 {
219 if ( elementSerializer != null )
220 {
221 this.elementSerializer = elementSerializer;
222 }
223 }
224
225
226
227
228
229
230 public IElementSerializer getElementSerializer()
231 {
232 return this.elementSerializer;
233 }
234
235
236
237
238
239
240 @Override
241 public void setKeyMatcher( final IKeyMatcher<K> keyMatcher )
242 {
243 if ( keyMatcher != null )
244 {
245 this.keyMatcher = keyMatcher;
246 }
247 }
248
249
250
251
252
253
254 public IKeyMatcher<K> getKeyMatcher()
255 {
256 return this.keyMatcher;
257 }
258 }