package org.infinispan.test.concurrent; import java.util.concurrent.atomic.AtomicInteger; import org.infinispan.commands.ReplicableCommand; /** * {@link org.infinispan.test.concurrent.CommandMatcher} implementation that can match a single invocation (e.g. the * 2nd invocation that matches the other conditions). * * @author Dan Berindei * @since 7.0 */ public class MatchCountMatcher implements CommandMatcher { private final CommandMatcher matcher; private final int matchCount; private final AtomicInteger actualMatchCount = new AtomicInteger(0); MatchCountMatcher(CommandMatcher matcher, int matchCount) { this.matcher = matcher; this.matchCount = matchCount; } @Override public boolean accept(ReplicableCommand command) { if (!matcher.accept(command)) return false; // Only increment the counter if all the other conditions are met. if (matchCount >= 0 && actualMatchCount.getAndIncrement() != matchCount) { return false; } return true; } }