package org.infinispan.server.test.client.hotrod;
import static org.junit.Assert.assertNotNull;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;
import org.infinispan.client.hotrod.annotation.ClientCacheEntryCreated;
import org.infinispan.client.hotrod.annotation.ClientCacheEntryModified;
import org.infinispan.client.hotrod.annotation.ClientCacheEntryRemoved;
import org.infinispan.client.hotrod.annotation.ClientCacheFailover;
import org.infinispan.client.hotrod.annotation.ClientListener;
import org.infinispan.client.hotrod.event.ClientCacheEntryCreatedEvent;
import org.infinispan.client.hotrod.event.ClientCacheEntryModifiedEvent;
import org.infinispan.client.hotrod.event.ClientCacheEntryRemovedEvent;
import org.infinispan.client.hotrod.event.ClientCacheFailoverEvent;
import org.infinispan.client.hotrod.event.ClientEvent;
@ClientListener
public class EventLogListener {
public BlockingQueue<ClientCacheEntryCreatedEvent> createdEvents =
new ArrayBlockingQueue<ClientCacheEntryCreatedEvent>(128);
public BlockingQueue<ClientCacheEntryModifiedEvent> modifiedEvents =
new ArrayBlockingQueue<ClientCacheEntryModifiedEvent>(128);
public BlockingQueue<ClientCacheEntryRemovedEvent> removedEvents =
new ArrayBlockingQueue<ClientCacheEntryRemovedEvent>(128);
public BlockingQueue<ClientCacheFailoverEvent> failoverEvents =
new ArrayBlockingQueue<ClientCacheFailoverEvent>(128);
@SuppressWarnings("unchecked")
public <E extends ClientEvent> E pollEvent(ClientEvent.Type type) {
try {
E event = (E) queue(type).poll(10, TimeUnit.SECONDS);
assertNotNull(event);
return event;
} catch (InterruptedException e) {
throw new AssertionError(e);
}
}
@SuppressWarnings("unchecked")
public <E extends ClientEvent> BlockingQueue<E> queue(ClientEvent.Type type) {
switch (type) {
case CLIENT_CACHE_ENTRY_CREATED: return (BlockingQueue<E>) createdEvents;
case CLIENT_CACHE_ENTRY_MODIFIED: return (BlockingQueue<E>) modifiedEvents;
case CLIENT_CACHE_ENTRY_REMOVED: return (BlockingQueue<E>) removedEvents;
case CLIENT_CACHE_FAILOVER: return (BlockingQueue<E>) failoverEvents;
default: throw new IllegalArgumentException("Unknown event type: " + type);
}
}
@ClientCacheEntryCreated
@SuppressWarnings("unused")
public void handleCreatedEvent(ClientCacheEntryCreatedEvent e) {
createdEvents.add(e);
}
@ClientCacheEntryModified @SuppressWarnings("unused")
public void handleModifiedEvent(ClientCacheEntryModifiedEvent e) {
modifiedEvents.add(e);
}
@ClientCacheEntryRemoved @SuppressWarnings("unused")
public void handleRemovedEvent(ClientCacheEntryRemovedEvent e) {
removedEvents.add(e);
}
@ClientCacheFailover @SuppressWarnings("unused")
public void handleFailover(ClientCacheFailoverEvent e) {
failoverEvents.add(e);
}
}