1 package com.atlassian.cache.ehcache.wrapper;
2
3 import net.sf.ehcache.CacheException;
4 import net.sf.ehcache.Ehcache;
5 import net.sf.ehcache.Status;
6 import net.sf.ehcache.loader.CacheLoader;
7
8 import java.util.Collection;
9 import java.util.HashMap;
10 import java.util.Map;
11
12 import static com.atlassian.cache.ehcache.wrapper.WrapperUtils.unwrapAllKeys;
13
14
15
16
17
18 public class ValueProcessorEhcacheLoaderDecorator implements CacheLoader {
19
20 private final CacheLoader delegate;
21 private final ValueProcessor valueProcessor;
22
23 public ValueProcessorEhcacheLoaderDecorator(final CacheLoader delegate, final ValueProcessor valueProcessor) {
24 this.delegate = delegate;
25 this.valueProcessor = valueProcessor;
26 }
27
28 @Override
29 public Object load(final Object key) throws CacheException {
30 return valueProcessor.wrap(delegate.load(valueProcessor.unwrap(key)));
31 }
32
33 @SuppressWarnings("unchecked")
34 @Override
35 public Map loadAll(final Collection keys) {
36 return wrapLoadedValues(delegate.loadAll(unwrapAllKeys(keys, valueProcessor)));
37 }
38
39 @Override
40 public Object load(final Object key, final Object argument) {
41 return valueProcessor.wrap(delegate.load(valueProcessor.unwrap(key), argument));
42 }
43
44 @SuppressWarnings("unchecked")
45 @Override
46 public Map loadAll(final Collection keys, final Object argument) {
47 return wrapLoadedValues(delegate.loadAll(unwrapAllKeys(keys, valueProcessor), argument));
48 }
49
50 @Override
51 public String getName() {
52 return delegate.getName();
53 }
54
55 @Override
56 public CacheLoader clone(final Ehcache cache) throws CloneNotSupportedException {
57 return delegate.clone(cache);
58 }
59
60 @Override
61 public void init() {
62 delegate.init();
63 }
64
65 @Override
66 public void dispose() throws CacheException {
67 delegate.dispose();
68 }
69
70 @Override
71 public Status getStatus() {
72 return delegate.getStatus();
73 }
74
75 private Map<Object, Object> wrapLoadedValues(final Map<Object, Object> unwrappedValues) {
76 Map<Object, Object> result = new HashMap<>(unwrappedValues.size());
77
78 for (final Map.Entry<Object, Object> entry : unwrappedValues.entrySet()) {
79 result.put(valueProcessor.wrap(entry.getKey()), valueProcessor.wrap(entry.getValue()));
80 }
81 return result;
82 }
83 }