package org.infinispan.query.affinity; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; import java.util.function.Predicate; import java.util.stream.Collectors; import org.infinispan.commands.remote.BaseRpcCommand; import org.infinispan.statetransfer.StateRequestCommand; import org.infinispan.statetransfer.StateResponseCommand; class RpcCollector { private List<RpcDetail> rpcCollection = new ArrayList<>(); private final List<Class<? extends BaseRpcCommand>> stateTransferCommands = Arrays.asList(StateRequestCommand.class, StateResponseCommand.class); private Predicate<RpcDetail> stateTransferPredicate = rpc -> stateTransferCommands.contains(rpc.getCommand().getClass()); private Predicate<RpcDetail> sameDestinationPredicate = RpcDetail::isRpcToItself; private Predicate<RpcDetail> cacheNamePredicate(String cacheName) { return rpc -> rpc.getCacheName().equals(cacheName); } synchronized void addRPC(RpcDetail rpcDetail) { rpcCollection.add(rpcDetail); } synchronized Set<RpcDetail> getRpcsForCache(String cacheName) { return rpcCollection.stream() .filter(sameDestinationPredicate.negate()) .filter(stateTransferPredicate.negate()) .filter(cacheNamePredicate(cacheName)) .collect(Collectors.toSet()); } }