package org.infinispan.query.continuous; import java.util.HashMap; import java.util.Map; import org.infinispan.query.api.continuous.ContinuousQueryListener; /** * {@link ContinuousQueryListener} which counts number of calls for each key. * * @author vjuranek * @since 8.0 */ public class CallCountingCQResultListener<K, V> implements ContinuousQueryListener<K, V> { private final Map<K, Integer> joined = new HashMap<>(); private final Map<K, Integer> updated = new HashMap<>(); private final Map<K, Integer> left = new HashMap<>(); @Override public void resultJoining(K key, V value) { incrementNumberOfCalls(key, joined); } @Override public void resultUpdated(K key, V value) { incrementNumberOfCalls(key, updated); } @Override public void resultLeaving(K key) { incrementNumberOfCalls(key, left); } public Map<K, Integer> getJoined() { return joined; } public Map<K, Integer> getUpdated() { return updated; } public Map<K, Integer> getLeft() { return left; } private void incrementNumberOfCalls(K key, Map<K, Integer> callMap) { synchronized (callMap) { Integer calls = callMap.get(key); callMap.put(key, calls == null ? 1 : calls + 1); } } }