use of com.hazelcast.map.impl.EntryEventFilter in project hazelcast by hazelcast.
the class QueryCacheNaturalFilteringStrategy method doFilter.
@SuppressWarnings({ "checkstyle:npathcomplexity", "checkstyle:cyclomaticcomplexity" })
@Override
public int doFilter(EventFilter filter, Data dataKey, Object dataOldValue, Object dataValue, EntryEventType eventType, String mapNameOrNull) {
if (filter instanceof MapPartitionLostEventFilter) {
return FILTER_DOES_NOT_MATCH;
}
// Since the event type may change if we have a QueryEventFilter to evaluate,
// the effective event type may change after execution of QueryEventFilter.eval
EventListenerFilter filterAsEventListenerFilter = null;
boolean originalFilterEventTypeMatches = true;
if (filter instanceof EventListenerFilter) {
int type = eventType.getType();
if (type == INVALIDATION.getType()) {
return FILTER_DOES_NOT_MATCH;
}
// evaluate whether the filter matches the original event type
originalFilterEventTypeMatches = filter.eval(type);
// hold a reference to the original event filter; this may be used later, in case there is a query event filter
// and it alters the event type to be published
filterAsEventListenerFilter = ((EventListenerFilter) filter);
filter = ((EventListenerFilter) filter).getEventFilter();
if (filter instanceof UuidFilter) {
return FILTER_DOES_NOT_MATCH;
}
}
if (originalFilterEventTypeMatches && filter instanceof TrueEventFilter) {
return eventType.getType();
}
if (filter instanceof QueryEventFilter) {
int effectiveEventType = processQueryEventFilterWithAlternativeEventType(filter, eventType, dataKey, dataOldValue, dataValue, mapNameOrNull);
if (effectiveEventType == FILTER_DOES_NOT_MATCH) {
return FILTER_DOES_NOT_MATCH;
} else {
// wants to listen for (if effective event type != original event type
if (filterAsEventListenerFilter != null && effectiveEventType != eventType.getType()) {
return filterAsEventListenerFilter.eval(effectiveEventType) ? effectiveEventType : FILTER_DOES_NOT_MATCH;
} else {
return effectiveEventType;
}
}
}
if (filter instanceof EntryEventFilter) {
return (originalFilterEventTypeMatches && processEntryEventFilter(filter, dataKey)) ? eventType.getType() : FILTER_DOES_NOT_MATCH;
}
throw new IllegalArgumentException("Unknown EventFilter type = [" + filter.getClass().getCanonicalName() + "]");
}
use of com.hazelcast.map.impl.EntryEventFilter in project hazelcast by hazelcast.
the class AbstractQueryCacheConfigurator method setEntryListener.
protected void setEntryListener(String mapName, String cacheName, QueryCacheConfig config) {
for (EntryListenerConfig listenerConfig : config.getEntryListenerConfigs()) {
MapListener listener = getListener(listenerConfig);
if (listener != null) {
EventFilter filter = new EntryEventFilter(listenerConfig.isIncludeValue(), null);
eventService.addListener(mapName, cacheName, listener, filter);
}
}
}
use of com.hazelcast.map.impl.EntryEventFilter in project hazelcast by hazelcast.
the class DefaultQueryCache method addEntryListenerInternal.
private String addEntryListenerInternal(MapListener listener, K key, boolean includeValue) {
checkNotNull(listener, "listener cannot be null");
Data keyData = toData(key);
EventFilter filter = new EntryEventFilter(includeValue, keyData);
QueryCacheEventService eventService = getEventService();
String mapName = delegate.getName();
return eventService.addListener(mapName, cacheName, listener, filter);
}
Aggregations