Skip to content

Package: MapCache

MapCache

nameinstructionbranchcomplexitylinemethod
MapCache()
M: 8 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
clear()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
clone(Object)
M: 86 C: 0
0%
M: 10 C: 0
0%
M: 6 C: 0
0%
M: 20 C: 0
0%
M: 1 C: 0
0%
close()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
containsKey(Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
deregisterCacheEntryListener(CacheEntryListenerConfiguration)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
get(Object)
M: 41 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 9 C: 0
0%
M: 1 C: 0
0%
getAll(Set)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getAndPut(Object, Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getAndRemove(Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getAndReplace(Object, Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getCacheManager()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getConfiguration(Class)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
getName()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
invoke(Object, EntryProcessor, Object[])
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
invokeAll(Set, EntryProcessor, Object[])
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
isClosed()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
isGetter(Method)
M: 22 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 5 C: 0
0%
M: 1 C: 0
0%
isSetter(Method)
M: 16 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
iterator()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
lambda$clone$0(Object, Map, Object, String, Method)
M: 48 C: 0
0%
M: 6 C: 0
0%
M: 4 C: 0
0%
M: 10 C: 0
0%
M: 1 C: 0
0%
loadAll(Set, boolean, CompletionListener)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
put(Object, Object)
M: 39 C: 0
0%
M: 4 C: 0
0%
M: 3 C: 0
0%
M: 10 C: 0
0%
M: 1 C: 0
0%
putAll(Map)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
putIfAbsent(Object, Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
registerCacheEntryListener(CacheEntryListenerConfiguration)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
remove(Object)
M: 9 C: 0
0%
M: 2 C: 0
0%
M: 2 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
remove(Object, Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
removeAll()
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
removeAll(Set)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
replace(Object, Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
replace(Object, Object, Object)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
static {...}
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
unwrap(Class)
M: 4 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2020, 2022 Eurotech and/or its affiliates and others
3: *
4: * This program and the accompanying materials are made
5: * available under the terms of the Eclipse Public License 2.0
6: * which is available at https://www.eclipse.org/legal/epl-2.0/
7: *
8: * SPDX-License-Identifier: EPL-2.0
9: *
10: * Contributors:
11: * Eurotech - initial API and implementation
12: *******************************************************************************/
13: package org.eclipse.kapua.qa.common.cache;
14:
15: import org.eclipse.kapua.model.KapuaEntity;
16: import org.eclipse.kapua.model.query.KapuaListResult;
17: import org.slf4j.Logger;
18: import org.slf4j.LoggerFactory;
19:
20: import javax.cache.Cache;
21: import javax.cache.CacheManager;
22: import javax.cache.configuration.CacheEntryListenerConfiguration;
23: import javax.cache.configuration.Configuration;
24: import javax.cache.integration.CompletionListener;
25: import javax.cache.processor.EntryProcessor;
26: import javax.cache.processor.EntryProcessorException;
27: import java.lang.reflect.Constructor;
28: import java.lang.reflect.InvocationTargetException;
29: import java.lang.reflect.Method;
30: import java.util.Iterator;
31: import java.util.Map;
32: import java.util.Set;
33: import java.util.concurrent.ConcurrentHashMap;
34:
35: /**
36: * Dummy implementation of JCache using an hashmap, to be used only for tests!
37: */
38: public class MapCache<K, V> implements Cache<K, V> {
39:
40: private static final Logger logger = LoggerFactory.getLogger(MapCacheManager.class);
41: private ConcurrentHashMap<K, V> hashMap;
42:
43: MapCache() {
44: hashMap = new ConcurrentHashMap<>();
45: }
46:
47: @Override
48: public Object get(Object key) {
49: try {
50: Object returnedValue = clone(hashMap.get(key));
51:• if (returnedValue instanceof KapuaListResult) {
52:• for (Object element: ((KapuaListResult) hashMap.get(key)).getItems()) {
53: ((KapuaListResult) returnedValue).addItem((KapuaEntity) clone(element));
54: }
55: }
56: return returnedValue;
57: } catch (Exception e) {
58: logger.error("Error while getting value from cache", e);
59: }
60: return null;
61: }
62:
63:
64: @Override
65: public Map getAll(Set keys) {
66: throw new UnsupportedOperationException();
67: }
68:
69: @Override
70: public boolean containsKey(Object key) {
71: throw new UnsupportedOperationException();
72: }
73:
74: @Override
75: public void loadAll(Set keys, boolean replaceExistingValues, CompletionListener completionListener) {
76: throw new UnsupportedOperationException();
77: }
78:
79: @Override
80: public void put(Object key, Object value) {
81: try {
82: V newValue = (V) clone(value);
83:• if (value instanceof KapuaListResult) {
84:• for (Object element: ((KapuaListResult) value).getItems()) {
85: ((KapuaListResult) newValue).addItem((KapuaEntity) clone(element));
86: }
87: }
88: hashMap.put((K) key, newValue);
89: } catch (Exception e) {
90: logger.error("Error while putting value in cache", e);
91: }
92: }
93:
94: @Override
95: public Object getAndPut(Object key, Object value) {
96: throw new UnsupportedOperationException();
97: }
98:
99: @Override
100: public void putAll(Map map) {
101: throw new UnsupportedOperationException();
102: }
103:
104: @Override
105: public boolean putIfAbsent(Object key, Object value) {
106: throw new UnsupportedOperationException();
107: }
108:
109: @Override
110: public boolean remove(Object key) {
111:• return hashMap.remove(key) != null;
112: }
113:
114: @Override
115: public boolean remove(Object key, Object oldValue) {
116: throw new UnsupportedOperationException();
117: }
118:
119: @Override
120: public Object getAndRemove(Object key) {
121: throw new UnsupportedOperationException();
122: }
123:
124: @Override
125: public boolean replace(Object key, Object oldValue, Object newValue) {
126: throw new UnsupportedOperationException();
127: }
128:
129: @Override
130: public boolean replace(Object key, Object value) {
131: throw new UnsupportedOperationException();
132: }
133:
134: @Override
135: public Object getAndReplace(Object key, Object value) {
136: throw new UnsupportedOperationException();
137: }
138:
139: @Override
140: public void removeAll(Set keys) {
141: throw new UnsupportedOperationException();
142: }
143:
144: @Override
145: public void removeAll() {
146: throw new UnsupportedOperationException();
147: }
148:
149: @Override
150: public void clear() {
151: hashMap.clear();
152: }
153:
154: @Override
155: public String getName() {
156: throw new UnsupportedOperationException();
157: }
158:
159: @Override
160: public CacheManager getCacheManager() {
161: throw new UnsupportedOperationException();
162: }
163:
164: @Override
165: public void close() {
166: throw new UnsupportedOperationException();
167: }
168:
169: @Override
170: public boolean isClosed() {
171: throw new UnsupportedOperationException();
172: }
173:
174: @Override
175: public void registerCacheEntryListener(CacheEntryListenerConfiguration cacheEntryListenerConfiguration) {
176: throw new UnsupportedOperationException();
177: }
178:
179: @Override
180: public void deregisterCacheEntryListener(CacheEntryListenerConfiguration cacheEntryListenerConfiguration) {
181: throw new UnsupportedOperationException();
182: }
183:
184: @Override
185: public Iterator<Entry<K, V>> iterator() {
186: throw new UnsupportedOperationException();
187: }
188:
189: @Override
190: public Object unwrap(Class clazz) {
191: throw new UnsupportedOperationException();
192: }
193:
194: @Override
195: public Map invokeAll(Set keys, EntryProcessor entryProcessor, Object... arguments) {
196: throw new UnsupportedOperationException();
197: }
198:
199: @Override
200: public Object invoke(Object key, EntryProcessor entryProcessor, Object... arguments) throws EntryProcessorException {
201: throw new UnsupportedOperationException();
202: }
203:
204: @Override
205: public Configuration getConfiguration(Class clazz) {
206: throw new UnsupportedOperationException();
207: }
208:
209: private Object clone(Object object) throws InvocationTargetException, IllegalAccessException,
210: InstantiationException {
211:• if (object != null) {
212: try {
213: Class<?> objectClass = object.getClass();
214: Constructor<?> objectConstructor = objectClass.getDeclaredConstructor();
215: objectConstructor.setAccessible(true); // change the constructor accessibility for protected fields
216: Object newObject = objectConstructor.newInstance();
217:
218: Method[] methods = object.getClass().getMethods();
219: Map<String, Method> getterMethods = new ConcurrentHashMap<>();
220: Map<String, Method> setterMethods = new ConcurrentHashMap<>();
221:
222:• for (Method method : methods) {
223:• if (isGetter(method)) {
224: getterMethods.put(method.getName(), method);
225:• } else if (isSetter(method)) {
226: setterMethods.put(method.getName(), method);
227: }
228: }
229:
230:• if (setterMethods.size() == 0) {
231: return object;
232: }
233:
234: getterMethods.forEach((getterName, getter) -> {
235: Object fieldValue;
236: try {
237: fieldValue = getter.invoke(object, null);
238: Method setter = setterMethods.get("s" + getterName.substring(1));
239:• if (setter != null) {
240:• if (fieldValue != null && !fieldValue.getClass().isPrimitive()) {
241: fieldValue = clone(fieldValue);
242: }
243: setter.invoke(newObject, fieldValue);
244: }
245: } catch (Exception e) {
246: logger.error("Error while invoking methods.", e);
247: }
248: });
249: return newObject;
250: } catch (NoSuchMethodException noe) {
251: return object;
252: }
253: }
254: return null;
255: }
256:
257: public boolean isGetter(Method method) {
258:• if (!method.getName().startsWith("get")) { //&& !method.getName().startsWith("is")) {
259: return false;
260: }
261:• if (method.getParameterTypes().length != 0) {
262: return false;
263: }
264:• return !void.class.equals(method.getReturnType());
265: }
266:
267: public boolean isSetter(Method method) {
268:• if (!method.getName().startsWith("set")) {
269: return false;
270: }
271:• return method.getParameterTypes().length == 1;
272: }
273: }