package org.ehcache.core.events;
import org.ehcache.event.CacheEvent;
import org.ehcache.event.CacheEventListener;
import org.ehcache.event.EventFiring;
import org.ehcache.event.EventOrdering;
import org.ehcache.event.EventType;
import java.util.EnumSet;
public final class EventListenerWrapper<K, V> implements CacheEventListener<K, V> {
private final CacheEventListener<? super K, ? super V> listener;
private final EventFiring firing;
private final EventOrdering ordering;
private final EnumSet<EventType> forEvents;
public EventListenerWrapper(CacheEventListener<? super K, ? super V> listener) {
this.listener = listener;
this.firing = null;
this.ordering = null;
this.forEvents = null;
}
public EventListenerWrapper(CacheEventListener<? super K, ? super V> listener, final EventFiring firing, final EventOrdering ordering,
final EnumSet<EventType> forEvents) {
if (listener == null) {
throw new NullPointerException("listener cannot be null");
}
if (firing == null) {
throw new NullPointerException("firing cannot be null");
}
if (ordering == null) {
throw new NullPointerException("ordering cannot be null");
}
if (forEvents == null) {
throw new NullPointerException("forEvents cannot be null");
}
if (forEvents.isEmpty()) {
throw new IllegalArgumentException("forEvents cannot be empty");
}
this.listener = listener;
this.firing = firing;
this.ordering = ordering;
this.forEvents = forEvents;
}
@Override
public int hashCode() {
return listener.hashCode();
}
@Override
public boolean equals(Object other) {
if (!(other instanceof EventListenerWrapper)) {
return false;
}
EventListenerWrapper<?, ?> l2 = (EventListenerWrapper<?, ?>)other;
return listener.equals(l2.listener);
}
@Override
public void onEvent(CacheEvent<? extends K, ? extends V> event) {
listener.onEvent(event);
}
public CacheEventListener<? super K, ? super V> getListener() {
return listener;
}
public boolean isForEventType(EventType type) {
return forEvents.contains(type);
}
public boolean isOrdered() {
return ordering.isOrdered();
}
public EventFiring getFiringMode() {
return firing;
}
}